swiss API fixes
parent
ca53974b1d
commit
e64679f420
|
@ -108,9 +108,7 @@ final class Swiss(
|
|||
data =>
|
||||
tourC.rateLimitCreation(me, false, req) {
|
||||
JsonOk {
|
||||
env.swiss.api.create(data, me, teamId) flatMap { swiss =>
|
||||
env.swiss.json(swiss, me.some, true)
|
||||
}
|
||||
env.swiss.api.create(data, me, teamId) map env.swiss.json.api
|
||||
}
|
||||
}
|
||||
)
|
||||
|
|
|
@ -104,10 +104,13 @@ final private class SwissFields(form: Form[_])(implicit ctx: Context) {
|
|||
)
|
||||
|
||||
def rated =
|
||||
form3.checkbox(
|
||||
form("rated"),
|
||||
trans.rated(),
|
||||
help = raw("Games are rated<br>and impact players ratings").some
|
||||
frag(
|
||||
form3.checkbox(
|
||||
form("rated"),
|
||||
trans.rated(),
|
||||
help = raw("Games are rated<br>and impact players ratings").some
|
||||
),
|
||||
st.input(tpe := "hidden", st.name := form("rated").name, value := "false") // hack allow disabling rated
|
||||
)
|
||||
def variant =
|
||||
form3.group(form("variant"), trans.variant(), half = true)(
|
||||
|
|
|
@ -33,7 +33,7 @@ final class SwissForm {
|
|||
.verifying("Invalid clock", _.estimateTotalSeconds > 0),
|
||||
"startsAt" -> optional(inTheFuture(ISODateTimeOrTimestamp.isoDateTimeOrTimestamp)),
|
||||
"variant" -> optional(nonEmptyText.verifying(v => Variant(v).isDefined)),
|
||||
"rated" -> boolean,
|
||||
"rated" -> optional(boolean),
|
||||
"nbRounds" -> number(min = 3, max = 100),
|
||||
"description" -> optional(nonEmptyText),
|
||||
"hasChat" -> optional(boolean),
|
||||
|
@ -47,7 +47,7 @@ final class SwissForm {
|
|||
clock = ClockConfig(180, 0),
|
||||
startsAt = Some(DateTime.now plusMinutes 10),
|
||||
variant = Variant.default.key.some,
|
||||
rated = true,
|
||||
rated = true.some,
|
||||
nbRounds = 8,
|
||||
description = none,
|
||||
hasChat = true.some,
|
||||
|
@ -60,7 +60,7 @@ final class SwissForm {
|
|||
clock = s.clock,
|
||||
startsAt = s.startsAt.some,
|
||||
variant = s.variant.key.some,
|
||||
rated = s.settings.rated,
|
||||
rated = s.settings.rated.some,
|
||||
nbRounds = s.settings.nbRounds,
|
||||
description = s.settings.description,
|
||||
hasChat = s.settings.hasChat.some,
|
||||
|
@ -92,7 +92,7 @@ object SwissForm {
|
|||
clock: ClockConfig,
|
||||
startsAt: Option[DateTime],
|
||||
variant: Option[String],
|
||||
rated: Boolean,
|
||||
rated: Option[Boolean],
|
||||
nbRounds: Int,
|
||||
description: Option[String],
|
||||
hasChat: Option[Boolean],
|
||||
|
|
|
@ -24,6 +24,11 @@ final class SwissJson(
|
|||
import SwissJson._
|
||||
import BsonHandlers._
|
||||
|
||||
def api(swiss: Swiss) =
|
||||
swissJsonBase(swiss) ++ Json.obj(
|
||||
"rated" -> swiss.settings.rated
|
||||
)
|
||||
|
||||
def apply(
|
||||
swiss: Swiss,
|
||||
me: Option[User],
|
||||
|
@ -39,23 +44,8 @@ final class SwissJson(
|
|||
podium <- podiumJson(swiss)
|
||||
boards <- boardApi.withGames(swiss.id)
|
||||
stats <- statsApi(swiss)
|
||||
} yield Json
|
||||
} yield swissJsonBase(swiss) ++ Json
|
||||
.obj(
|
||||
"id" -> swiss.id.value,
|
||||
"createdBy" -> swiss.createdBy,
|
||||
"startsAt" -> formatDate(swiss.startsAt),
|
||||
"name" -> swiss.name,
|
||||
"clock" -> swiss.clock,
|
||||
"variant" -> swiss.variant.key,
|
||||
"round" -> swiss.round,
|
||||
"nbRounds" -> swiss.actualNbRounds,
|
||||
"nbPlayers" -> swiss.nbPlayers,
|
||||
"nbOngoing" -> swiss.nbOngoing,
|
||||
"status" -> {
|
||||
if (swiss.isStarted) "started"
|
||||
else if (swiss.isFinished) "finished"
|
||||
else "created"
|
||||
},
|
||||
"canJoin" -> {
|
||||
(swiss.isNotFinished && myInfo.exists(_.player.absent)) ||
|
||||
(myInfo.isEmpty && swiss.isEnterable && isInTeam)
|
||||
|
@ -63,19 +53,9 @@ final class SwissJson(
|
|||
"standing" -> standing,
|
||||
"boards" -> boards.map(boardJson)
|
||||
)
|
||||
.add("me" -> myInfo.map(myInfoJson))
|
||||
.add("joinTeam" -> (!isInTeam).option(swiss.teamId))
|
||||
.add("socketVersion" -> socketVersion.map(_.value))
|
||||
.add("quote" -> swiss.isCreated.option(lila.quote.Quote.one(swiss.id.value)))
|
||||
.add("nextRound" -> swiss.nextRoundAt.map { next =>
|
||||
Json.obj(
|
||||
"at" -> formatDate(next),
|
||||
"in" -> (next.getSeconds - nowSeconds).toInt.atLeast(0)
|
||||
)
|
||||
})
|
||||
.add("me" -> myInfo.map(myInfoJson))
|
||||
.add("greatPlayer" -> GreatPlayer.wikiUrl(swiss.name).map { url =>
|
||||
Json.obj("name" -> swiss.name, "url" -> url)
|
||||
})
|
||||
.add("playerInfo" -> playerInfo.map { playerJsonExt(swiss, _) })
|
||||
.add("podium" -> podium)
|
||||
.add("isRecentlyFinished" -> swiss.isRecentlyFinished)
|
||||
|
@ -136,8 +116,6 @@ final class SwissJson(
|
|||
}
|
||||
}
|
||||
|
||||
private def formatDate(date: DateTime) = ISODateTimeFormat.dateTime print date
|
||||
|
||||
private def podiumJson(swiss: Swiss): Fu[Option[JsArray]] =
|
||||
swiss.isFinished ?? {
|
||||
SwissPlayer.fields { f =>
|
||||
|
@ -165,6 +143,38 @@ final class SwissJson(
|
|||
|
||||
object SwissJson {
|
||||
|
||||
private def formatDate(date: DateTime) = ISODateTimeFormat.dateTime print date
|
||||
|
||||
private def swissJsonBase(swiss: Swiss) =
|
||||
Json
|
||||
.obj(
|
||||
"id" -> swiss.id.value,
|
||||
"createdBy" -> swiss.createdBy,
|
||||
"startsAt" -> formatDate(swiss.startsAt),
|
||||
"name" -> swiss.name,
|
||||
"clock" -> swiss.clock,
|
||||
"variant" -> swiss.variant.key,
|
||||
"round" -> swiss.round,
|
||||
"nbRounds" -> swiss.actualNbRounds,
|
||||
"nbPlayers" -> swiss.nbPlayers,
|
||||
"nbOngoing" -> swiss.nbOngoing,
|
||||
"status" -> {
|
||||
if (swiss.isStarted) "started"
|
||||
else if (swiss.isFinished) "finished"
|
||||
else "created"
|
||||
}
|
||||
)
|
||||
.add("quote" -> swiss.isCreated.option(lila.quote.Quote.one(swiss.id.value)))
|
||||
.add("nextRound" -> swiss.nextRoundAt.map { next =>
|
||||
Json.obj(
|
||||
"at" -> formatDate(next),
|
||||
"in" -> (next.getSeconds - nowSeconds).toInt.atLeast(0)
|
||||
)
|
||||
})
|
||||
.add("greatPlayer" -> GreatPlayer.wikiUrl(swiss.name).map { url =>
|
||||
Json.obj("name" -> swiss.name, "url" -> url)
|
||||
})
|
||||
|
||||
private[swiss] def playerJson(swiss: Swiss, view: SwissPlayer.View): JsObject =
|
||||
playerJsonBase(swiss, view) ++ Json
|
||||
.obj(
|
||||
|
|
Loading…
Reference in New Issue