diff --git a/app/controllers/User.scala b/app/controllers/User.scala index 722d9f6ff8..3ce3b82f47 100644 --- a/app/controllers/User.scala +++ b/app/controllers/User.scala @@ -139,11 +139,11 @@ object User extends LilaController { antichess <- env.cached top10Perf PerfType.Antichess.key atomic <- env.cached top10Perf PerfType.Atomic.key horde <- env.cached top10Perf PerfType.Horde.key - nbAllTime ← env.cached topNbGame nb map2 { (user: UserModel) => - user -> user.count.game - } - nbDay ← Env.game.cached activePlayerUidsDay nb flatMap { pairs => - UserRepo.byOrderedIds(pairs.map(_.userId)) map (_ zip pairs.map(_.nb)) + nbAllTime ← env.cached topNbGame nb + nbDay ← Env.game.cached activePlayerUidsDay nb map { + _ flatMap { pair => + env lightUser pair.userId map { UserModel.LightCount(_, pair.nb) } + } } tourneyWinners ← Env.tournament.winners scheduled nb online ← env.cached topOnline 50 @@ -163,9 +163,15 @@ object User extends LilaController { nbDay = nbDay, nbAllTime = nbAllTime))), api = _ => fuccess { - implicit val userWrites = play.api.libs.json.Writes[UserModel] { env.jsonView(_, true) } + implicit val lightPerfWrites = play.api.libs.json.Writes[UserModel.LightPerf] { l => + Json.obj( + "id" -> l.user.id, + "username" -> l.user.name, + "title" -> l.user.title, + "perfs" -> Json.obj( + l.perfKey -> Json.obj("rating" -> l.rating, "progress" -> l.progress))) + } Ok(Json.obj( - "online" -> online, "bullet" -> bullet, "blitz" -> blitz, "classical" -> classical, diff --git a/app/mashup/Preload.scala b/app/mashup/Preload.scala index e72a562a35..0fdf80c1c0 100644 --- a/app/mashup/Preload.scala +++ b/app/mashup/Preload.scala @@ -16,7 +16,7 @@ import play.api.libs.json._ final class Preload( tv: Tv, - leaderboard: Boolean => Fu[List[(User, PerfType)]], + leaderboard: Boolean => Fu[List[User.LightPerf]], tourneyWinners: Int => Fu[List[Winner]], timelineEntries: String => Fu[List[Entry]], streamsOnAir: () => Fu[List[StreamOnAir]], @@ -26,7 +26,7 @@ final class Preload( getPlayban: String => Fu[Option[TempBan]], lightUser: String => Option[LightUser]) { - private type Response = (JsObject, List[Entry], List[MiniForumPost], List[Tournament], List[Simul], Option[Game], List[(User, PerfType)], List[Winner], Option[lila.puzzle.DailyPuzzle], List[StreamOnAir], List[lila.blog.MiniPost], Option[TempBan], Option[Preload.CurrentGame], Int) + private type Response = (JsObject, List[Entry], List[MiniForumPost], List[Tournament], List[Simul], Option[Game], List[User.LightPerf], List[Winner], Option[lila.puzzle.DailyPuzzle], List[StreamOnAir], List[lila.blog.MiniPost], Option[TempBan], Option[Preload.CurrentGame], Int) def apply( posts: Fu[List[MiniForumPost]], diff --git a/app/views/lobby/home.scala.html b/app/views/lobby/home.scala.html index a99cf1cdb5..37421acc1e 100644 --- a/app/views/lobby/home.scala.html +++ b/app/views/lobby/home.scala.html @@ -1,4 +1,4 @@ -@(data: play.api.libs.json.JsObject, userTimeline: List[lila.timeline.Entry], forumRecent: List[lila.forum.MiniForumPost], tours: List[Tournament], simuls: List[lila.simul.Simul], featured: Option[Game], leaderboard: List[(User, lila.rating.PerfType)], tournamentWinners: List[lila.tournament.Winner], puzzle: Option[lila.puzzle.DailyPuzzle], streams: List[lila.tv.StreamOnAir], lastPost: List[lila.blog.MiniPost], playban: Option[lila.playban.TempBan], currentGame: Option[lila.app.mashup.Preload.CurrentGame], nbRounds: Int)(implicit ctx: Context) +@(data: play.api.libs.json.JsObject, userTimeline: List[lila.timeline.Entry], forumRecent: List[lila.forum.MiniForumPost], tours: List[Tournament], simuls: List[lila.simul.Simul], featured: Option[Game], leaderboard: List[User.LightPerf], tournamentWinners: List[lila.tournament.Winner], puzzle: Option[lila.puzzle.DailyPuzzle], streams: List[lila.tv.StreamOnAir], lastPost: List[lila.blog.MiniPost], playban: Option[lila.playban.TempBan], currentGame: Option[lila.app.mashup.Preload.CurrentGame], nbRounds: Int)(implicit ctx: Context) @underchat = {