send info about my team in large battles
parent
0693dd511c
commit
5b26ceaaaa
|
@ -82,6 +82,7 @@ final class JsonView(
|
|||
battle.teams.intersect(teams.toSet).toList
|
||||
}))
|
||||
teamStanding <- getTeamStanding(tour)
|
||||
myTeam <- myInfo.flatMap(_.teamId) ?? { getMyRankedTeam(tour, _) }
|
||||
} yield Json
|
||||
.obj(
|
||||
"nbPlayers" -> tour.nbPlayers,
|
||||
|
@ -101,6 +102,7 @@ final class JsonView(
|
|||
.add("stats" -> stats)
|
||||
.add("socketVersion" -> socketVersion.map(_.value))
|
||||
.add("teamStanding" -> teamStanding)
|
||||
.add("myTeam" -> myTeam)
|
||||
.add("duelTeams" -> data.duelTeams) ++
|
||||
full.?? {
|
||||
Json
|
||||
|
@ -148,7 +150,7 @@ final class JsonView(
|
|||
_ ?? { player =>
|
||||
fetchCurrentGameId(tour, me) flatMap { gameId =>
|
||||
getOrGuessRank(tour, player) dmap { rank =>
|
||||
MyInfo(rank + 1, player.withdraw, gameId).some
|
||||
MyInfo(rank + 1, player.withdraw, gameId, player.team).some
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -363,6 +365,9 @@ final class JsonView(
|
|||
"p" -> Json.arr(u1, u2)
|
||||
)
|
||||
|
||||
def getTeamStanding(tour: Tournament): Fu[Option[JsArray]] =
|
||||
tour.isTeamBattle ?? { teamStandingJsonCache get tour.id dmap some }
|
||||
|
||||
private val teamStandingJsonCache = cacheApi[Tournament.ID, JsArray](4, "tournament.teamStanding") {
|
||||
_.expireAfterWrite(500 millis)
|
||||
.buildAsyncFuture { id =>
|
||||
|
@ -372,9 +377,6 @@ final class JsonView(
|
|||
}
|
||||
}
|
||||
|
||||
def getTeamStanding(tour: Tournament): Fu[Option[JsArray]] =
|
||||
tour.isTeamBattle ?? { teamStandingJsonCache get tour.id dmap some }
|
||||
|
||||
implicit private val teamBattleRankedWrites: Writes[TeamBattle.RankedTeam] = OWrites { rt =>
|
||||
Json.obj(
|
||||
"rank" -> rt.rank,
|
||||
|
@ -389,6 +391,12 @@ final class JsonView(
|
|||
)
|
||||
}
|
||||
|
||||
private def getMyRankedTeam(tour: Tournament, teamId: TeamID): Fu[Option[TeamBattle.RankedTeam]] =
|
||||
tour.teamBattle.exists(_.hasTooManyTeams) ??
|
||||
cached.battle.teamStanding.get(tour.id) map {
|
||||
_.find(_.teamId == teamId)
|
||||
}
|
||||
|
||||
private val teamInfoCache =
|
||||
cacheApi[(Tournament.ID, TeamID), Option[JsObject]](16, "tournament.teamInfo.json") {
|
||||
_.expireAfterWrite(5 seconds)
|
||||
|
|
|
@ -11,6 +11,8 @@ case class TeamBattle(
|
|||
) {
|
||||
def hasEnoughTeams = teams.sizeIs > 1
|
||||
lazy val sortedTeamIds = teams.toList.sorted
|
||||
|
||||
def hasTooManyTeams = teams.sizeIs > TeamBattle.displayTeams
|
||||
}
|
||||
|
||||
object TeamBattle {
|
||||
|
|
|
@ -2,6 +2,8 @@ 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
|
||||
|
@ -25,7 +27,7 @@ case class GameView(
|
|||
def tourAndTeamVs = TourAndTeamVs(tour, teamVs)
|
||||
}
|
||||
|
||||
case class MyInfo(rank: Int, withdraw: Boolean, gameId: Option[lila.game.Game.ID]) {
|
||||
case class MyInfo(rank: Int, withdraw: Boolean, gameId: Option[lila.game.Game.ID], teamId: Option[TeamID]) {
|
||||
def page = (rank + 9) / 10
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue