// // Queries.swift // TournamentStats // // Created by Laurent Morvillier on 03/06/2019. // Copyright © 2019 Stax River. All rights reserved. // import Foundation import RealmSwift import Realm class Queries { static func biggestWinners(realm: Realm) -> [CumulatedResults] { let players = realm.objects(Player.self) var crArray: [CumulatedResults] = [] for player in players { crArray.append(CumulatedResults(player: player)) } return crArray.sorted(by: { (cr1, cr2) -> Bool in return cr1.total > cr2.total }) } static func mostCashes(realm: Realm) -> [CumulatedResults] { let players = realm.objects(Player.self) var crArray: [CumulatedResults] = [] for player in players { crArray.append(CumulatedResults(player: player)) } return crArray.sorted(by: { (cr1, cr2) -> Bool in if cr1.numberOfCashes == cr2.numberOfCashes { return cr1.total > cr2.total } return cr1.numberOfCashes > cr2.numberOfCashes }) } static func allWinnersSortedByEvent(realm: Realm, date: Date? = nil) -> [TournamentWinner] { let winners: Results if let day = date { winners = realm.objects(Result.self).filter("rank == 1 && ANY tournaments.date IN %@", [day]) } else { winners = realm.objects(Result.self).filter("rank == 1") } var tws: [TournamentWinner] = [] for w in winners { let tw = TournamentWinner(tournament: w.tournaments.first!, result: w) tws.append(tw) } tws.sort { (tw1, tw2) -> Bool in tw1.tournament.number < tw2.tournament.number } return tws } static func notableCashes(realm: Realm, date: Date) -> [PlayerResult] { let notableCashes: Results = realm.objects(Result.self).filter("player.notable = true && ANY tournaments.date IN %@", [date]) var prs: [PlayerResult] = [] for nc in notableCashes { let pr = PlayerResult(tournament: nc.tournaments.first!, result: nc) prs.append(pr) } prs.sort { (pr1, pr2) -> Bool in if pr1.result.rank == pr2.result.rank { return pr1.result.earnings > pr2.result.earnings } return pr1.result.rank < pr2.result.rank } return prs } static func sortedEvents(realm: Realm, fieldName: String, ascending: Bool) -> [TournamentRepresentable] { let tournies = realm.objects(Tournament.self).sorted(byKeyPath: fieldName, ascending: ascending) var trs: [TournamentRepresentable] = [] for tourny in tournies { trs.append(TournamentRepresentable(tournament: tourny)) } return trs } static func cashesByCountry(realm: Realm) -> [CountryCashes] { let playerDistinctCountries = realm.objects(Player.self).distinct(by: ["country"]) var countryCashes: [CountryCashes] = [] for player in playerDistinctCountries { let country = player.country let resultsByCountry = realm.objects(Result.self).filter("player.country == %@", country) let cc = CountryCashes(country: country, cashes: resultsByCountry.count) countryCashes.append(cc) } countryCashes.sort { (cc1, cc2) -> Bool in return cc1.cashes > cc2.cashes } return countryCashes } }