From a3d1ead0230b529e1a65c306ae6ac82a1dc414cc Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Thu, 21 Oct 2021 11:48:39 +0200 Subject: [PATCH] refactor rating stats controller and hide more user ratings --- app/AppLoader.scala | 1 - app/controllers/Main.scala | 2 +- app/controllers/Stat.scala | 18 ------------ app/controllers/User.scala | 11 ++++++++ app/views/stat/ratingDistribution.scala | 37 +++++++++++++------------ app/views/user/bits.scala | 5 +++- app/views/user/perfStat.scala | 4 +-- conf/routes | 2 +- 8 files changed, 39 insertions(+), 41 deletions(-) delete mode 100644 app/controllers/Stat.scala diff --git a/app/AppLoader.scala b/app/AppLoader.scala index 7067b65e44..20fda9692f 100644 --- a/app/AppLoader.scala +++ b/app/AppLoader.scala @@ -140,7 +140,6 @@ final class LilaComponents(ctx: ApplicationLoader.Context) extends BuiltInCompon lazy val search: Search = wire[Search] lazy val setup: Setup = wire[Setup] lazy val simul: Simul = wire[Simul] - lazy val stat: Stat = wire[Stat] lazy val streamer: Streamer = wire[Streamer] lazy val study: Study = wire[Study] lazy val team: Team = wire[Team] diff --git a/app/controllers/Main.scala b/app/controllers/Main.scala index 8e19de131a..59ee633d89 100644 --- a/app/controllers/Main.scala +++ b/app/controllers/Main.scala @@ -211,7 +211,7 @@ Allow: / case 103 => s"$faq#acpl" case 258 => s"$faq#marks" case 13 => s"$faq#titles" - case 87 => routes.Stat.ratingDistribution("blitz").url + case 87 => routes.User.ratingDistribution("blitz").url case 110 => s"$faq#name" case 29 => s"$faq#titles" case 4811 => s"$faq#lm" diff --git a/app/controllers/Stat.scala b/app/controllers/Stat.scala deleted file mode 100644 index fb17d816a5..0000000000 --- a/app/controllers/Stat.scala +++ /dev/null @@ -1,18 +0,0 @@ -package controllers - -import lila.app._ -import views._ - -final class Stat(env: Env) extends LilaController(env) { - - def ratingDistribution(perfKey: lila.rating.Perf.Key) = - Open { implicit ctx => - lila.rating.PerfType(perfKey).filter(lila.rating.PerfType.leaderboardable.has) match { - case Some(perfType) => - env.user.rankingApi.weeklyRatingDistribution(perfType) dmap { data => - Ok(html.stat.ratingDistribution(perfType, data)) - } - case _ => notFound - } - } -} diff --git a/app/controllers/User.scala b/app/controllers/User.scala index 210ceb5c8c..abc99cd85b 100644 --- a/app/controllers/User.scala +++ b/app/controllers/User.scala @@ -579,6 +579,17 @@ final class User( } } + def ratingDistribution(perfKey: lila.rating.Perf.Key) = + Open { implicit ctx => + lila.rating.PerfType(perfKey).filter(lila.rating.PerfType.leaderboardable.has) match { + case Some(perfType) => + env.user.rankingApi.weeklyRatingDistribution(perfType) dmap { data => + Ok(html.stat.ratingDistribution(perfType, data)) + } + case _ => notFound + } + } + def myself = Auth { _ => me => fuccess(Redirect(routes.User.show(me.username))) diff --git a/app/views/stat/ratingDistribution.scala b/app/views/stat/ratingDistribution.scala index ebec3baadd..262dd0083d 100644 --- a/app/views/stat/ratingDistribution.scala +++ b/app/views/stat/ratingDistribution.scala @@ -41,33 +41,36 @@ object ratingDistribution { a( dataIcon := pt.iconChar, cls := (perfType == pt).option("current"), - href := routes.Stat.ratingDistribution(pt.key) + href := routes.User.ratingDistribution(pt.key) )(pt.trans) } ) ) ), div(cls := "desc", dataIcon := perfType.iconChar)( - ctx.me.flatMap(_.perfs(perfType).glicko.establishedIntRating).map { rating => - lila.user.Stat.percentile(data, rating) match { - case (under, sum) => - div( - trans - .nbPerfTypePlayersThisWeek(strong(sum.localize), perfType.trans), - br, - trans.yourPerfTypeRatingIsRating(perfType.trans, strong(rating)), - br, - trans.youAreBetterThanPercentOfPerfTypePlayers( - strong((under * 100.0 / sum).round, "%"), - perfType.trans + ctx.me.ifTrue(ctx.pref.showRatings).flatMap(_.perfs(perfType).glicko.establishedIntRating).map { + rating => + lila.user.Stat.percentile(data, rating) match { + case (under, sum) => + div( + trans + .nbPerfTypePlayersThisWeek(strong(sum.localize), perfType.trans), + br, + trans.yourPerfTypeRatingIsRating(perfType.trans, strong(rating)), + br, + trans.youAreBetterThanPercentOfPerfTypePlayers( + strong((under * 100.0 / sum).round, "%"), + perfType.trans + ) ) - ) - } + } } getOrElse div( trans.nbPerfTypePlayersThisWeek .plural(data.sum, strong(data.sum.localize), perfType.trans), - br, - trans.youDoNotHaveAnEstablishedPerfTypeRating(perfType.trans) + ctx.pref.showRatings option frag( + br, + trans.youDoNotHaveAnEstablishedPerfTypeRating(perfType.trans) + ) ) ), div(id := "rating_distribution_chart")(spinner) diff --git a/app/views/user/bits.scala b/app/views/user/bits.scala index 410e66f526..d846b1fbfc 100644 --- a/app/views/user/bits.scala +++ b/app/views/user/bits.scala @@ -14,7 +14,10 @@ object bits { def communityMenu(active: String)(implicit ctx: Context) = st.nav(cls := "page-menu__menu subnav")( a(cls := active.active("leaderboard"), href := routes.User.list)(trans.leaderboard()), - a(cls := active.active("ratings"), href := routes.Stat.ratingDistribution("blitz"))( + a( + cls := active.active("ratings"), + href := routes.User.ratingDistribution("blitz") + )( trans.ratingStats() ), a(cls := active.active("tournament"), href := routes.Tournament.leaderboard)( diff --git a/app/views/user/perfStat.scala b/app/views/user/perfStat.scala index 3deef8b14d..62441a7591 100644 --- a/app/views/user/perfStat.scala +++ b/app/views/user/perfStat.scala @@ -96,13 +96,13 @@ object perfStat { span(cls := "details")( if (ctx is u) { trans.youAreBetterThanPercentOfPerfTypePlayers( - a(href := routes.Stat.ratingDistribution(perfType.key))(strong(percentile, "%")), + a(href := routes.User.ratingDistribution(perfType.key))(strong(percentile, "%")), a(href := routes.User.topNb(200, perfType.key))(perfType.trans) ) } else { trans.userIsBetterThanPercentOfPerfTypePlayers( a(href := routes.User.show(u.username))(u.username), - a(href := routes.Stat.ratingDistribution(perfType.key))(strong(percentile, "%")), + a(href := routes.User.ratingDistribution(perfType.key))(strong(percentile, "%")), a(href := routes.User.topNb(200, perfType.key))(perfType.trans) ) } diff --git a/conf/routes b/conf/routes index b5460997ce..8c83be1214 100644 --- a/conf/routes +++ b/conf/routes @@ -635,7 +635,7 @@ POST /appeal/:username/snooze/:dur controllers.Appeal.snooze(username: Strin POST /appeal/:username/send-to-zulip controllers.Appeal.sendToZulip(username: String) # Stats -GET /stat/rating/distribution/:perf controllers.Stat.ratingDistribution(perf: String) +GET /stat/rating/distribution/:perf controllers.User.ratingDistribution(perf: String) # API GET /api controllers.Api.index