send info about my team in large battles

team-battle-unlimited
Thibault Duplessis 2021-01-22 11:32:13 +01:00
parent 0693dd511c
commit 5b26ceaaaa
3 changed files with 17 additions and 5 deletions

View File

@ -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)

View File

@ -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 {

View File

@ -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
}