diff --git a/app/controllers/Account.scala b/app/controllers/Account.scala index a2529c65fded..2ddc867c348f 100644 --- a/app/controllers/Account.scala +++ b/app/controllers/Account.scala @@ -120,7 +120,7 @@ final class Account( negotiateJson( env.pref.api.get(me).map { prefs => Ok: - lila.common.LightUser.lightUserWrites.writes(me.light) ++ Json.obj( + lila.common.LightUser.write(me.light) ++ Json.obj( "coach" -> isGranted(_.Coach), "prefs" -> lila.pref.JsonView.write(prefs, lichobileCompat = false) ) diff --git a/app/controllers/Api.scala b/app/controllers/Api.scala index 8f20994b80ef..653e0e312652 100644 --- a/app/controllers/Api.scala +++ b/app/controllers/Api.scala @@ -70,8 +70,8 @@ final class Api( env.user.lightUserApi asyncMany ids dmap (_.flatten) flatMap { users => val streamingIds = env.streamer.liveStreamApi.userIds def toJson(u: LightUser) = - LightUser.lightUserWrites - .writes(u) + LightUser + .write(u) .add("online" -> env.socket.isOnline(u.id)) .add("playing" -> env.round.playing(u.id)) .add("streaming" -> streamingIds(u.id)) diff --git a/app/controllers/Msg.scala b/app/controllers/Msg.scala index ff9b7ec3ab76..e69d26eaade4 100644 --- a/app/controllers/Msg.scala +++ b/app/controllers/Msg.scala @@ -3,7 +3,6 @@ package controllers import play.api.libs.json.* import lila.app.{ given, * } -import lila.common.LightUser.lightUserWrites final class Msg(env: Env) extends LilaController(env): @@ -84,7 +83,7 @@ final class Msg(env: Env) extends LilaController(env): private def inboxJson(using me: Me) = env.msg.api.myThreads flatMap env.msg.json.threads map { threads => Json.obj( - "me" -> lightUserWrites.writes(me.light).add("bot" -> me.isBot), + "me" -> lila.common.LightUser.write(me.light).add("bot" -> me.isBot), "contacts" -> threads ) } diff --git a/app/controllers/Streamer.scala b/app/controllers/Streamer.scala index 54faf1dc4fef..32b898d3c088 100644 --- a/app/controllers/Streamer.scala +++ b/app/controllers/Streamer.scala @@ -47,7 +47,7 @@ final class Streamer(env: Env, apiC: => Api) extends LilaController(env): users <- env.user.lightUserApi asyncManyFallback s.streams.map(_.streamer.userId) yield apiC.toApiResult: (s.streams zip users).map: (stream, user) => - lila.common.LightUser.lightUserWrites.writes(user) ++ + lila.common.LightUser.write(user) ++ lila.streamer.Stream.toJson(env.memo.picfitUrl, stream) def show(username: UserStr) = Open: diff --git a/app/controllers/User.scala b/app/controllers/User.scala index 5e935ef1812d..608a58814a43 100644 --- a/app/controllers/User.scala +++ b/app/controllers/User.scala @@ -569,8 +569,8 @@ final class User( lightUserApi.asyncMany(userIds) map { users => Json.obj( "result" -> JsArray(users collect { case Some(u) => - lila.common.LightUser.lightUserWrites - .writes(u) + lila.common.LightUser + .write(u) .add("online" -> env.socket.isOnline(u.id)) }) ) diff --git a/app/views/insight.scala b/app/views/insight.scala index 244f58df125e..cc7a9fede5c3 100644 --- a/app/views/insight.scala +++ b/app/views/insight.scala @@ -31,7 +31,7 @@ object insight: "initialQuestion" -> question, "i18n" -> Json.obj(), "myUserId" -> ctx.userId, - "user" -> (lila.common.LightUser.lightUserWrites.writes(u.light) ++ Json.obj( + "user" -> (lila.common.LightUser.write(u.light) ++ Json.obj( "nbGames" -> insightUser.count, "stale" -> stale, "shareId" -> prefId diff --git a/modules/common/src/main/LightUser.scala b/modules/common/src/main/LightUser.scala index f0facec6b480..ad40ff2a6e64 100644 --- a/modules/common/src/main/LightUser.scala +++ b/modules/common/src/main/LightUser.scala @@ -23,15 +23,14 @@ object LightUser: given UserIdOf[LightUser] = _.id - given lightUserWrites: OWrites[LightUser] = OWrites: u => - writeNoId(u) + ("id" -> JsString(u.id.value)) - - def writeNoId(u: LightUser): JsObject = - Json - .obj("name" -> u.name) - .add("title" -> u.title) - .add("flair" -> u.flair) - .add("patron" -> u.isPatron) + given lightUserWrites: OWrites[LightUser] = OWrites(write) + + def write(u: LightUser): JsObject = writeNoId(u) + ("id" -> JsString(u.id.value)) + def writeNoId(u: LightUser): JsObject = Json + .obj("name" -> u.name) + .add("title" -> u.title) + .add("flair" -> u.flair) + .add("patron" -> u.isPatron) def fallback(name: UserName) = LightUser( id = name.id, diff --git a/modules/msg/src/main/MsgCompat.scala b/modules/msg/src/main/MsgCompat.scala index cc27b2026063..007eed659386 100644 --- a/modules/msg/src/main/MsgCompat.scala +++ b/modules/msg/src/main/MsgCompat.scala @@ -115,7 +115,7 @@ final class MsgCompat( private case class ThreadData(user: UserStr, subject: String, text: String) private def renderUser(user: LightUser) = - LightUser.lightUserWrites.writes(user) ++ Json.obj( + LightUser.write(user) ++ Json.obj( "online" -> isOnline(user.id), "username" -> user.name // for mobile app BC ) diff --git a/modules/round/src/main/RoundMobileSocket.scala b/modules/round/src/main/RoundMobileSocket.scala index 5ebe39751348..5ff114bc1107 100644 --- a/modules/round/src/main/RoundMobileSocket.scala +++ b/modules/round/src/main/RoundMobileSocket.scala @@ -9,7 +9,6 @@ import lila.common.{ Bus, Preload, ApiVersion } import lila.socket.Socket import lila.common.LightUser import lila.common.Json.given -import LightUser.lightUserWrites import chess.{ Color, ByColor } import lila.pref.Pref import lila.chat.Chat diff --git a/modules/round/src/main/TvBroadcast.scala b/modules/round/src/main/TvBroadcast.scala index 1af2477ca698..7061e15a647c 100644 --- a/modules/round/src/main/TvBroadcast.scala +++ b/modules/round/src/main/TvBroadcast.scala @@ -59,7 +59,7 @@ final private class TvBroadcast( val user = p.userId.flatMap(lightUserSync) Json .obj("color" -> p.color.name) - .add("user" -> user.map(LightUser.lightUserWrites.writes)) + .add("user" -> user.map(LightUser.write)) .add("ai" -> p.aiLevel) .add("rating" -> p.rating) .add("seconds" -> pov.game.clock.map(_.remainingTime(pov.color).roundSeconds)) diff --git a/ui/tournament/src/view/arena.ts b/ui/tournament/src/view/arena.ts index 31b8a2742d18..72ba55a8dcad 100644 --- a/ui/tournament/src/view/arena.ts +++ b/ui/tournament/src/view/arena.ts @@ -69,15 +69,14 @@ function playerTr(ctrl: TournamentController, player: StandingPlayer) { ); } -function podiumUsername(p: PodiumPlayer) { - return h( +const podiumUsername = (p: PodiumPlayer) => + h( 'a.text.ulpt.user-link', { attrs: { href: '/@/' + p.name }, }, playerName(p), ); -} function podiumStats(p: PodiumPlayer, berserkable: boolean, ctrl: TournamentController): VNode { const noarg = ctrl.trans.noarg,