simplify round user JSON
This commit is contained in:
parent
3f86f8bc7c
commit
9c28d08101
|
@ -43,7 +43,7 @@ object Account extends LilaController {
|
|||
Ok {
|
||||
import play.api.libs.json._
|
||||
import lila.pref.JsonView._
|
||||
Env.user.jsonView(me, extended = true) ++ Json.obj(
|
||||
Env.user.jsonView(me) ++ Json.obj(
|
||||
"prefs" -> prefs,
|
||||
"nowPlaying" -> JsArray(povs take 20 map Env.api.lobbyApi.nowPlaying))
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ object Auth extends LilaController {
|
|||
private def mobileUserOk(u: UserModel): Fu[Result] =
|
||||
lila.game.GameRepo urgentGames u map { povs =>
|
||||
Ok {
|
||||
Env.user.jsonView(u, extended = true) ++ Json.obj(
|
||||
Env.user.jsonView(u) ++ Json.obj(
|
||||
"nowPlaying" -> JsArray(povs take 20 map Env.api.lobbyApi.nowPlaying))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -64,7 +64,7 @@ object User extends LilaController {
|
|||
negotiate(
|
||||
html = env.cached topOnline max map { html.user.online(_, max) },
|
||||
api = _ => env.cached topOnline getInt("nb").fold(10)(_ min max) map { list =>
|
||||
Ok(Json.toJson(list.map(env.jsonView(_, true))))
|
||||
Ok(Json.toJson(list.map(env.jsonView(_))))
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
@ -34,7 +34,7 @@ private[api] final class UserApi(
|
|||
Json.obj(
|
||||
"list" -> JsArray(
|
||||
users map { u =>
|
||||
jsonView(u, extended = team.isDefined) ++
|
||||
jsonView(u) ++
|
||||
Json.obj("url" -> makeUrl(s"@/${u.username}"))
|
||||
}
|
||||
)
|
||||
|
@ -51,7 +51,7 @@ private[api] final class UserApi(
|
|||
ctx.userId.?? { relationApi.fetchRelation(_, u.id) } zip
|
||||
ctx.userId.?? { relationApi.fetchFollows(u.id, _) } map {
|
||||
case ((((((gameOption, nbGamesWithMe), following), followers), followable), relation), isFollowed) =>
|
||||
jsonView(u, extended = true) ++ {
|
||||
jsonView(u) ++ {
|
||||
Json.obj(
|
||||
"url" -> makeUrl(s"@/$username"),
|
||||
"playing" -> gameOption.map(g => makeUrl(s"${g.gameId}/${g.color.name}")),
|
||||
|
|
|
@ -53,7 +53,7 @@ final class JsonView(
|
|||
"color" -> player.color.name,
|
||||
"version" -> socket.version,
|
||||
"spectator" -> false,
|
||||
"user" -> playerUser.map { userJsonView(_, true) },
|
||||
"user" -> playerUser.map { userJsonView(_, game.perfType) },
|
||||
"rating" -> player.rating,
|
||||
"ratingDiff" -> player.ratingDiff,
|
||||
"provisional" -> player.provisional.option(true),
|
||||
|
@ -68,7 +68,7 @@ final class JsonView(
|
|||
"opponent" -> Json.obj(
|
||||
"color" -> opponent.color.name,
|
||||
"ai" -> opponent.aiLevel,
|
||||
"user" -> opponentUser.map { userJsonView(_, true) },
|
||||
"user" -> opponentUser.map { userJsonView(_, game.perfType) },
|
||||
"rating" -> opponent.rating,
|
||||
"ratingDiff" -> opponent.ratingDiff,
|
||||
"provisional" -> opponent.provisional.option(true),
|
||||
|
@ -154,7 +154,7 @@ final class JsonView(
|
|||
"version" -> socket.version,
|
||||
"spectator" -> true,
|
||||
"ai" -> player.aiLevel,
|
||||
"user" -> playerUser.map { userJsonView(_, true) },
|
||||
"user" -> playerUser.map { userJsonView(_, game.perfType) },
|
||||
"name" -> player.name,
|
||||
"rating" -> player.rating,
|
||||
"ratingDiff" -> player.ratingDiff,
|
||||
|
@ -168,7 +168,7 @@ final class JsonView(
|
|||
"opponent" -> Json.obj(
|
||||
"color" -> opponent.color.name,
|
||||
"ai" -> opponent.aiLevel,
|
||||
"user" -> opponentUser.map { userJsonView(_, true) },
|
||||
"user" -> opponentUser.map { userJsonView(_, game.perfType) },
|
||||
"name" -> opponent.name,
|
||||
"rating" -> opponent.rating,
|
||||
"ratingDiff" -> opponent.ratingDiff,
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package lila.user
|
||||
|
||||
import lila.common.PimpedJson._
|
||||
import lila.rating.{ Perf, Glicko }
|
||||
import lila.rating.{ Perf, Glicko, PerfType }
|
||||
import play.api.libs.json._
|
||||
import User.PlayTime
|
||||
|
||||
|
@ -14,27 +14,23 @@ final class JsonView(isOnline: String => Boolean) {
|
|||
"rd" -> o.glicko.deviation.toInt,
|
||||
"prog" -> o.progress)
|
||||
}
|
||||
private implicit val perfsWrites: Writes[Perfs] = Writes { o =>
|
||||
JsObject(o.perfsMap.toList map {
|
||||
case (name, perf) => name -> perfWrites.writes(perf)
|
||||
})
|
||||
}
|
||||
private implicit val profileWrites = Json.writes[Profile]
|
||||
private implicit val playTimeWrites = Json.writes[PlayTime]
|
||||
|
||||
def apply(u: User, extended: Boolean) = Json.obj(
|
||||
def apply(u: User, onlyPerf: Option[PerfType] = None) = Json.obj(
|
||||
"id" -> u.id,
|
||||
"username" -> u.username
|
||||
) ++ extended.??(Json.obj(
|
||||
"title" -> u.title,
|
||||
"online" -> isOnline(u.id),
|
||||
"engine" -> u.engine,
|
||||
"booster" -> u.booster,
|
||||
"language" -> u.lang,
|
||||
"profile" -> u.profile.??(profileWrites.writes).noNull,
|
||||
"perfs" -> u.perfs,
|
||||
"createdAt" -> u.createdAt,
|
||||
"seenAt" -> u.seenAt,
|
||||
"playTime" -> u.playTime
|
||||
)).noNull
|
||||
"username" -> u.username,
|
||||
"title" -> u.title,
|
||||
"online" -> isOnline(u.id),
|
||||
"engine" -> u.engine,
|
||||
"booster" -> u.booster,
|
||||
"language" -> u.lang,
|
||||
"profile" -> u.profile.??(profileWrites.writes).noNull,
|
||||
"perfs" -> JsObject(u.perfs.perfsMap collect {
|
||||
case (key, perf) if onlyPerf.fold(true)(_.key == key) => key -> perfWrites.writes(perf)
|
||||
}),
|
||||
"createdAt" -> u.createdAt,
|
||||
"seenAt" -> u.seenAt,
|
||||
"playTime" -> u.playTime
|
||||
).noNull
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue