lila/modules/tournament/src/main/model.scala

112 lines
2.8 KiB
Scala

package lila.tournament
import play.api.i18n.Lang
import lila.hub.LightTeam.TeamID
final class LeaderboardRepo(val coll: lila.db.dsl.Coll)
case class TournamentTop(value: List[Player]) extends AnyVal
case class TourMiniView(
tour: Tournament,
top: Option[TournamentTop],
teamVs: Option[TeamBattle.TeamVs]
) {
def tourAndTeamVs = TourAndTeamVs(tour, teamVs)
}
case class TourAndTeamVs(tour: Tournament, teamVs: Option[TeamBattle.TeamVs])
case class GameView(
tour: Tournament,
teamVs: Option[TeamBattle.TeamVs],
ranks: Option[GameRanks],
top: Option[TournamentTop]
) {
def tourAndTeamVs = TourAndTeamVs(tour, teamVs)
}
case class MyInfo(rank: Int, withdraw: Boolean, gameId: Option[lila.game.Game.ID], teamId: Option[TeamID]) {
def page = (rank + 9) / 10
}
case class VisibleTournaments(
created: List[Tournament],
started: List[Tournament],
finished: List[Tournament]
) {
def unfinished = created ::: started
def all = started ::: created ::: finished
def add(tours: List[Tournament]) =
copy(
created = tours.filter(_.isCreated) ++ created,
started = tours.filter(_.isStarted) ++ started
)
}
case class PlayerInfoExt(
user: lila.user.User,
player: Player,
recentPovs: List[lila.game.LightPov]
)
case class GameRanks(whiteRank: Int, blackRank: Int)
case class RankedPairing(pairing: Pairing, rank1: Int, rank2: Int) {
def bestRank = rank1 min rank2
// def rankSum = rank1 + rank2
def bestColor = chess.Color.fromWhite(rank1 < rank2)
}
object RankedPairing {
def apply(ranking: Ranking)(pairing: Pairing): Option[RankedPairing] =
for {
r1 <- ranking get pairing.user1
r2 <- ranking get pairing.user2
} yield RankedPairing(pairing, r1 + 1, r2 + 1)
}
case class RankedPlayer(rank: Int, player: Player) {
def is(other: RankedPlayer) = player is other.player
def withColorHistory(getHistory: Player.ID => ColorHistory) =
RankedPlayerWithColorHistory(rank, player, getHistory(player.id))
override def toString = s"$rank. ${player.userId}[${player.rating}]"
}
object RankedPlayer {
def apply(ranking: Ranking)(player: Player): Option[RankedPlayer] =
ranking get player.userId map { rank =>
RankedPlayer(rank + 1, player)
}
}
case class RankedPlayerWithColorHistory(rank: Int, player: Player, colorHistory: ColorHistory) {
def is(other: RankedPlayer) = player is other.player
override def toString = s"$rank. ${player.userId}[${player.rating}]"
}
case class FeaturedGame(
game: lila.game.Game,
white: RankedPlayer,
black: RankedPlayer
)
final class GetTourName(f: (Tournament.ID, Lang) => Option[String])
extends ((Tournament.ID, Lang) => Option[String]) {
def apply(id: Tournament.ID, lang: Lang) = f(id, lang)
def get(id: Tournament.ID)(implicit lang: Lang) = f(id, lang)
}