An amazing project that generates micro reports from tournament results
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
3.7 KiB

//
// 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<Result>
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<Result> = 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
}
}