use proper Color type and reuse json handlers

deepcrayonfish^2
Thibault Duplessis 2021-11-20 09:51:26 +01:00
parent a0c13389ce
commit 14828e8478
16 changed files with 30 additions and 32 deletions

View File

@ -271,7 +271,11 @@ object perfStat {
results.results map { r =>
tr(
td(userIdLink(r.opId.value.some, withOnline = false), " (", r.opInt, ")"),
td(a(cls := "glpt", href := routes.Round.watcher(r.gameId, r.color))(absClientDateTime(r.at)))
td(
a(cls := "glpt", href := routes.Round.watcher(r.gameId, r.color.name))(
absClientDateTime(r.at)
)
)
)
}
)

View File

@ -6,7 +6,6 @@ import play.api.libs.json._
import lila.common.Iso
import lila.common.Json._
import lila.game.JsonView.colorWrites
import lila.game.LightPov
import lila.rating.PerfType
import lila.simul.Simul

View File

@ -8,7 +8,7 @@ import reactivemongo.api.ReadPreference
import lila.analyse.{ JsonView => analysisJson, Analysis }
import lila.common.config._
import lila.common.Json.jodaWrites
import lila.common.Json._
import lila.common.paginator.{ Paginator, PaginatorJson }
import lila.db.dsl._
import lila.db.paginator.Adapter

View File

@ -9,7 +9,7 @@ import scala.concurrent.duration._
import lila.analyse.{ JsonView => analysisJson, Analysis }
import lila.common.config.MaxPerSecond
import lila.common.Json.jodaWrites
import lila.common.Json._
import lila.common.{ HTTPRequest, LightUser }
import lila.db.dsl._
import lila.game.JsonView._

View File

@ -3,6 +3,7 @@ package lila.bot
import play.api.i18n.Lang
import play.api.libs.json._
import lila.common.Json._
import lila.common.Json.jodaWrites
import lila.game.JsonView._
import lila.game.{ Game, GameRepo, Pov }

View File

@ -1,8 +1,10 @@
package lila.challenge
import play.api.libs.json._
import play.api.i18n.Lang
import play.api.libs.json._
import lila.common.Json._
import lila.game.JsonView._
import lila.i18n.{ I18nKeys => trans }
import lila.socket.Socket.SocketVersion
import lila.socket.UserLagCache
@ -13,7 +15,6 @@ final class JsonView(
isOnline: lila.socket.IsOnline
) {
import lila.game.JsonView._
import Challenge._
implicit private val RegisteredWrites = OWrites[Challenger.Registered] { r =>

View File

@ -41,9 +41,16 @@ object Json {
JsNumber(time.getMillis)
}
implicit val colorWrites: Writes[chess.Color] = Writes { c =>
JsString(c.name)
}
implicit val fenFormat: Format[FEN] = stringIsoFormat[FEN](Iso.fenIso)
implicit val uciReader: Reads[Uci] = Reads.of[String] flatMapResult { str =>
implicit val uciReads: Reads[Uci] = Reads.of[String] flatMapResult { str =>
JsResult.fromTry(Uci(str) toTry s"Invalid UCI: $str")
}
implicit val uciWrites: Writes[Uci] = Writes { u =>
JsString(u.uci)
}
}

View File

@ -10,7 +10,7 @@ import play.api.libs.ws.StandaloneWSClient
import scala.concurrent.ExecutionContext
import scala.concurrent.duration._
import lila.common.Json.uciReader
import lila.common.Json._
import lila.common.ThreadLocalRandom
import lila.game.Game
import lila.memo.SettingStore

View File

@ -17,6 +17,7 @@ import chess.{
import JsonView._
import lila.chat.{ PlayerLine, UserLine }
import lila.common.ApiVersion
import lila.common.Json._
sealed trait Event {
def typ: String

View File

@ -5,7 +5,7 @@ import play.api.libs.json._
import chess.format.{ FEN, Forsyth }
import chess.variant.Crazyhouse
import chess.{ Clock, Color }
import lila.common.Json.jodaWrites
import lila.common.Json._
final class JsonView(rematches: Rematches) {
@ -143,12 +143,4 @@ object JsonView {
implicit val sourceWriter: Writes[Source] = Writes { s =>
JsString(s.name)
}
implicit val colorWrites: Writes[Color] = Writes { c =>
JsString(c.name)
}
implicit val fenWrites: Writes[FEN] = Writes { f =>
JsString(f.value)
}
}

View File

@ -5,6 +5,7 @@ import org.joda.time.format.ISODateTimeFormat
import play.api.i18n.Lang
import play.api.libs.json._
import lila.common.Json.{ jodaWrites => _, _ }
import lila.common.LightUser
import lila.rating.{ Glicko, Perf, PerfType }
import lila.user.User

View File

@ -1,5 +1,6 @@
package lila.perfStat
import chess.Color
import org.joda.time.{ DateTime, Period }
import lila.common.Heapsort
@ -196,7 +197,7 @@ object RatingAt {
} orElse cur
}
case class Result(opInt: Int, opId: UserId, at: DateTime, gameId: String, color: String)
case class Result(opInt: Int, opId: UserId, at: DateTime, gameId: String, color: Color)
case class Results(results: List[Result]) extends AnyVal {
def agg(pov: Pov, comp: Int) =
@ -211,7 +212,7 @@ case class Results(results: List[Result]) extends AnyVal {
UserId(~pov.opponent.userId),
pov.game.movedAt,
pov.gameId,
if (pov.player.color == chess.White) "white" else "black"
pov.player.color
) :: results,
Results.nb,
Ordering.by[Result, Int](_.opInt * comp)

View File

@ -7,6 +7,7 @@ import play.api.libs.json._
import scala.math
import lila.common.ApiVersion
import lila.common.Json._
import lila.game.JsonView._
import lila.game.{ Pov, Game, Player => GamePlayer }
import lila.pref.Pref

View File

@ -3,6 +3,7 @@ package lila.simul
import play.api.libs.json._
import lila.common.LightUser
import lila.common.Json._
import lila.game.{ Game, GameRepo }
import lila.user.User
@ -12,10 +13,6 @@ final class JsonView(
proxyRepo: lila.round.GameProxyRepo
)(implicit ec: scala.concurrent.ExecutionContext) {
implicit private val colorWriter: Writes[chess.Color] = Writes { c =>
JsString(c.name)
}
implicit private val simulTeamWriter = Json.writes[SimulTeam]
private def fetchGames(simul: Simul) =

View File

@ -127,21 +127,12 @@ object JsonView {
implicit val chapterIdWrites: Writes[Chapter.Id] = stringIsoWriter(Chapter.idIso)
implicit val chapterNameWrites: Writes[Chapter.Name] = stringIsoWriter(Chapter.nameIso)
implicit private[study] val uciWrites: Writes[Uci] = Writes[Uci] { u =>
JsString(u.uci)
}
implicit private val posReader: Reads[Pos] = Reads[Pos] { v =>
(v.asOpt[String] flatMap Pos.fromKey).fold[JsResult[Pos]](JsError(Nil))(JsSuccess(_))
}
implicit private[study] val pathWrites: Writes[Path] = Writes[Path] { p =>
JsString(p.toString)
}
implicit private[study] val colorWriter: Writes[chess.Color] = Writes[chess.Color] { c =>
JsString(c.name)
}
implicit private[study] val fenWriter: Writes[FEN] = Writes[FEN] { f =>
JsString(f.value)
}
implicit private[study] val sriWriter: Writes[Sri] = Writes[Sri] { sri =>
JsString(sri.value)
}

View File

@ -106,6 +106,8 @@ final class StudyMultiBoard(
private object handlers {
import lila.common.Json._
implicit val previewPlayerWriter: Writes[ChapterPreview.Player] = Writes[ChapterPreview.Player] { p =>
Json
.obj("name" -> p.name)