Files
cod-backend/Sources/App/Controllers/AppDataController.swift
2021-10-31 00:01:27 -05:00

67 lines
2.2 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
}
}
return (gameModeConfigs.and(gameModeGroupConfigs).and(games).and(maps).and(playerConfigs).and(lossReasonConfigs)).map { arg -> (Configuration) in
let (((((( gameModeConfigs), gameModeGroupConfigs),games),maps),playerConfigs), lossReasonConfigs) = 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)
})
return Configuration(games:gameConfigs, gameModes: gameModeConfigs, gameModeGroups: gameModeGroupConfigs, players: playerConfigs, lossReasons: lossReasonConfigs)
}
}
}