From d88a9f549ed4044d38b8a63d0213349388f13546 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Sun, 28 Oct 2012 19:30:54 +0100 Subject: [PATCH] load less users from db --- app/bookmark/BookmarkApi.scala | 7 ++----- app/controllers/Analyse.scala | 2 +- app/controllers/Round.scala | 4 ++-- app/user/Cached.scala | 2 +- app/user/UserHelper.scala | 7 +++++++ app/views/analyse/replay.scala.html | 2 +- app/views/game/more.scala.html | 6 ++---- app/views/round/player.scala.html | 2 +- app/views/round/watcher.scala.html | 2 +- todo | 3 --- 10 files changed, 18 insertions(+), 19 deletions(-) diff --git a/app/bookmark/BookmarkApi.scala b/app/bookmark/BookmarkApi.scala index 668376d80c..14be7685a8 100644 --- a/app/bookmark/BookmarkApi.scala +++ b/app/bookmark/BookmarkApi.scala @@ -30,11 +30,8 @@ final class BookmarkApi( def countByUser(user: User): Int = cached.count(user.id) - def usersByGame(game: DbGame): IO[List[User]] = - if (game.hasBookmarks) for { - userIds ← bookmarkRepo userIdsByGameId game.id - users ← (userIds map userRepo.byId).sequence - } yield users.flatten + def userIdsByGame(game: DbGame): IO[List[String]] = + if (game.hasBookmarks) bookmarkRepo userIdsByGameId game.id else io(Nil) def removeByGame(game: DbGame): IO[Unit] = diff --git a/app/controllers/Analyse.scala b/app/controllers/Analyse.scala index 0a0e3c1b6f..e52de36831 100644 --- a/app/controllers/Analyse.scala +++ b/app/controllers/Analyse.scala @@ -40,7 +40,7 @@ object Analyse extends LilaController { IOptionIOk(gameRepo.pov(id, color)) { pov ⇒ for { roomHtml ← roundMessenger renderWatcher pov.game - bookmarkers ← bookmarkApi usersByGame pov.game + bookmarkers ← bookmarkApi userIdsByGame pov.game pgnString ← pgnRepo get id pgn ← pgnDump(pov.game, pgnString) analysis ← analyser get pov.game.id diff --git a/app/controllers/Round.scala b/app/controllers/Round.scala index 5c5911544a..3f66cf08ae 100644 --- a/app/controllers/Round.scala +++ b/app/controllers/Round.scala @@ -55,7 +55,7 @@ object Round extends LilaController with TheftPrevention with RoundEventPerforme pov.game.started.fold( for { roomHtml ← messenger render pov.game - bookmarkers ← pov.game.hasBookmarks.fold(bookmarkApi usersByGame pov.game, io(Nil)) + bookmarkers ← bookmarkApi userIdsByGame pov.game engine ← pov.opponent.userId.fold(userRepo.isEngine, io(false)) analysed ← analyser has pov.gameId tour ← tournamentRepo byId pov.game.tournamentId @@ -87,7 +87,7 @@ object Round extends LilaController with TheftPrevention with RoundEventPerforme } private def watch(pov: Pov)(implicit ctx: Context): IO[Result] = for { - bookmarkers ← pov.game.hasBookmarks.fold(bookmarkApi usersByGame pov.game, io(Nil)) + bookmarkers ← bookmarkApi userIdsByGame pov.game roomHtml ← messenger renderWatcher pov.game analysed ← analyser has pov.gameId tour ← tournamentRepo byId pov.game.tournamentId diff --git a/app/user/Cached.scala b/app/user/Cached.scala index d97bc9c793..0a1d8b3be7 100644 --- a/app/user/Cached.scala +++ b/app/user/Cached.scala @@ -12,7 +12,7 @@ final class Cached( import Cached._ - def username(userId: String) = + def username(userId: String): Option[String] = usernameCache.getOrElseUpdate( userId.toLowerCase, (userRepo username userId).unsafePerformIO diff --git a/app/user/UserHelper.scala b/app/user/UserHelper.scala index 7c24e1eeb6..87cc6e703f 100644 --- a/app/user/UserHelper.scala +++ b/app/user/UserHelper.scala @@ -41,6 +41,13 @@ trait UserHelper { userId: String, cssClass: Option[String]): Html = userIdLink(userId.some, cssClass) + def userIdLinkMini(userId: String) = Html { + """%s""".format( + routes.User.show(userId), + (cached username userId) | userId + ) + } + def userLink( user: User, cssClass: Option[String] = None, diff --git a/app/views/analyse/replay.scala.html b/app/views/analyse/replay.scala.html index faf4695900..19ac586767 100644 --- a/app/views/analyse/replay.scala.html +++ b/app/views/analyse/replay.scala.html @@ -1,4 +1,4 @@ -@(pov: Pov, pgn: String, roomHtml: Html, bookmarkers: List[User], opening: Option[chess.OpeningExplorer.Opening], analysis: Option[lila.analyse.Analysis], version: Int, tour: Option[lila.tournament.Tournament])(implicit ctx: Context) +@(pov: Pov, pgn: String, roomHtml: Html, bookmarkers: List[String], opening: Option[chess.OpeningExplorer.Opening], analysis: Option[lila.analyse.Analysis], version: Int, tour: Option[lila.tournament.Tournament])(implicit ctx: Context) @import pov._ diff --git a/app/views/game/more.scala.html b/app/views/game/more.scala.html index a8cfaf96a7..0bdb85051d 100644 --- a/app/views/game/more.scala.html +++ b/app/views/game/more.scala.html @@ -1,9 +1,7 @@ -@(pov: Pov, bookmarkers: List[User] = Nil)(extra: Html)(implicit ctx: Context) +@(pov: Pov, bookmarkers: List[String] = Nil)(extra: Html)(implicit ctx: Context) @import pov._ -@bookmarkerLink(user: User) = {@user.username} - @defining("http://lichess.org" + routes.Round.watcher(gameId, color.name)) { url =>
@@ -18,7 +16,7 @@

@trans.bookmarkedByNbPlayers(bookmarkers.size)

- @Html(bookmarkers.map(bookmarkerLink).mkString(", ")) + @Html(bookmarkers.map(userIdLinkMini).mkString(", "))
} diff --git a/app/views/round/player.scala.html b/app/views/round/player.scala.html index 14a5e6937d..01e3853b1c 100644 --- a/app/views/round/player.scala.html +++ b/app/views/round/player.scala.html @@ -1,4 +1,4 @@ -@(pov: Pov, version: Int, engine: Boolean, roomHtml: Option[Html], bookmarkers: List[User], analysed: Boolean, tour: Option[lila.tournament.Tournament])(implicit ctx: Context) +@(pov: Pov, version: Int, engine: Boolean, roomHtml: Option[Html], bookmarkers: List[String], analysed: Boolean, tour: Option[lila.tournament.Tournament])(implicit ctx: Context) @import pov._ diff --git a/app/views/round/watcher.scala.html b/app/views/round/watcher.scala.html index 31194d5525..2e00b56603 100644 --- a/app/views/round/watcher.scala.html +++ b/app/views/round/watcher.scala.html @@ -1,4 +1,4 @@ -@(pov: Pov, version: Int, roomHtml: Html, bookmarkers: List[User], analysed: Boolean, tour: Option[lila.tournament.Tournament])(implicit ctx: Context) +@(pov: Pov, version: Int, roomHtml: Html, bookmarkers: List[String], analysed: Boolean, tour: Option[lila.tournament.Tournament])(implicit ctx: Context) @import pov._ diff --git a/todo b/todo index 6f3e3f8aea..8128c00097 100644 --- a/todo +++ b/todo @@ -33,9 +33,6 @@ make hand and finisher actors to avoid racing conditions tournament monitor all hub members should use userIds rather than usernames tournament ties -tournament detect leavers and withdraw them (started) (also use force resign) --> or show current tournament on every page, with (join) and (redraw) buttons -tournament warmup games AI thinks during your time (premove?) http://en.lichess.org/forum/lichess-feedback/y-u-so-greedy-with-time-stockfish#4 - in fact it does not, but the UI clocks only update once the ai made the move - solution: do AI asynchronously. Send player move events right away,