add map history
This commit is contained in:
@@ -24,6 +24,8 @@ struct StatsController: RouteCollection {
|
|||||||
statsRoute.post("logMatch", use: logMatch)
|
statsRoute.post("logMatch", use: logMatch)
|
||||||
statsRoute.get("history","page",":page", use: history)
|
statsRoute.get("history","page",":page", use: history)
|
||||||
statsRoute.get("history", use: history)
|
statsRoute.get("history", use: history)
|
||||||
|
statsRoute.get("maps", use: mapRecords)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -626,6 +628,45 @@ struct StatsController: RouteCollection {
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func mapRecords(req: Request) throws -> EventLoopFuture<[MapRecord]> {
|
||||||
|
|
||||||
|
return Match.query(on: req.db).all().map { (matches) -> [MapRecord] in
|
||||||
|
|
||||||
|
let mapStats = self.getMapStats(matches: matches)
|
||||||
|
let sortedMaps = self.mapsSortedByBest(records: mapStats)
|
||||||
|
|
||||||
|
let records = sortedMaps.map { (mapId) -> MapRecord in
|
||||||
|
return MapRecord(map: MapData.allMaps[mapId]!, stats: mapStats[mapId]!, ratio:mapStats[mapId]!.winLossRatio)
|
||||||
|
}
|
||||||
|
|
||||||
|
var wins:Double = 0
|
||||||
|
var loss:Double = 0
|
||||||
|
|
||||||
|
for record in records {
|
||||||
|
print("\(record.map.name) \(record.stats.record) \(record.ratio)")
|
||||||
|
wins = wins + Double(record.stats.totalWins)
|
||||||
|
loss = loss + Double(record.stats.totalLosses)
|
||||||
|
|
||||||
|
}
|
||||||
|
let ratio = wins / loss
|
||||||
|
|
||||||
|
return records
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func mapsSortedByBest (records :[ Int:Stats] ) -> [ Int ]
|
||||||
|
{
|
||||||
|
return records.keys.sorted { (map1, map2) -> Bool in
|
||||||
|
return records[map1]?.getRatioDouble() ?? 0.0 < records[map2]?.getRatioDouble() ?? 0.0
|
||||||
|
}.reversed()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
func getBestMap (records :[ Int:Stats] ) -> Int {
|
func getBestMap (records :[ Int:Stats] ) -> Int {
|
||||||
|
|
||||||
let maps = records.keys.sorted { (map1, map2) -> Bool in
|
let maps = records.keys.sorted { (map1, map2) -> Bool in
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
struct Map: Hashable {
|
struct Map: Hashable, Codable {
|
||||||
var id: Int
|
var id: Int
|
||||||
var name:String
|
var name:String
|
||||||
var imageName:String
|
var imageName:String
|
||||||
|
|||||||
16
Sources/App/Models/MapRecord.swift
Normal file
16
Sources/App/Models/MapRecord.swift
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
//
|
||||||
|
// MapRecord.swift
|
||||||
|
// App
|
||||||
|
//
|
||||||
|
// Created by Michael Simard on 1/10/21.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import Vapor
|
||||||
|
import Fluent
|
||||||
|
|
||||||
|
struct MapRecord: Content {
|
||||||
|
var map:Map
|
||||||
|
var stats:Stats
|
||||||
|
var ratio:String
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user