79 lines
2.6 KiB
Swift
79 lines
2.6 KiB
Swift
//
|
|
// AppDataController.swift
|
|
// App
|
|
//
|
|
// Created by Michael Simard on 10/29/21.
|
|
//
|
|
|
|
//
|
|
import Fluent
|
|
import Vapor
|
|
|
|
import Foundation
|
|
|
|
struct AppDataController: RouteCollection {
|
|
|
|
func boot(routes: RoutesBuilder) throws {
|
|
let matchRoute = routes.grouped("cod-tracker","api")
|
|
matchRoute.get("config", use: config)
|
|
}
|
|
|
|
func config(req:Request) -> EventLoopFuture<Configuration>{
|
|
|
|
let gameModeConfigs = GameMode.query(on: req.db).all().map { gameMode in
|
|
return gameMode.map { gm in
|
|
return gm.gameModeConfig
|
|
}
|
|
}
|
|
|
|
let gameModeGroupConfigs = GameModeGroup.query(on: req.db).all().map { gameModeGroup in
|
|
return gameModeGroup.map { gmg in
|
|
return gmg.gameModeGroupConfig
|
|
}
|
|
}
|
|
|
|
let games = Game.query(on: req.db).all()
|
|
let maps = Map.query(on: req.db).all()
|
|
|
|
let playerConfigs = Player.query(on: req.db).all().map { player in
|
|
return player.map { p in
|
|
return p.playerConfig
|
|
}
|
|
}
|
|
|
|
let lossReasonConfigs = LossReason.query(on: req.db).all().map { lossReason in
|
|
return lossReason.map { lr in
|
|
return lr.lossReasonConfig
|
|
}
|
|
}
|
|
|
|
let colourSchemeConfigs = ColourScheme.query(on: req.db).all().map { colourScheme in
|
|
return colourScheme.map { cs in
|
|
return cs.colorSchemeConfig
|
|
}
|
|
}
|
|
|
|
|
|
return (gameModeConfigs.and(gameModeGroupConfigs).and(games).and(maps).and(playerConfigs).and(lossReasonConfigs).and(colourSchemeConfigs)).map { arg -> (Configuration) in
|
|
|
|
let ((((((( gameModeConfigs), gameModeGroupConfigs),games),maps),playerConfigs), lossReasonConfigs),colourSchemeConfigs) = arg
|
|
|
|
var gameConfigs:[GameConfig] = []
|
|
|
|
|
|
gameConfigs = games.map({ game in
|
|
let mapConfigs = game.mapIds.compactMap { mapId in
|
|
return maps.first { m in
|
|
m.mapId == mapId
|
|
}?.mapConfig
|
|
}
|
|
|
|
|
|
|
|
return GameConfig(gameId: game.gameId, name: game.name, maps: mapConfigs, enabled: game.enabled, colours: colourSchemeConfigs.first{game.gameId == "\($0.gameId)"})
|
|
})
|
|
return Configuration(games:gameConfigs, gameModes: gameModeConfigs, gameModeGroups: gameModeGroupConfigs, players: playerConfigs, lossReasons: lossReasonConfigs)
|
|
}
|
|
}
|
|
}
|