From 89c648cb6dedfd04457d4bc4a09ad4b5e5e6c08b Mon Sep 17 00:00:00 2001 From: Adam Morris Date: Fri, 3 Nov 2023 09:51:24 +1000 Subject: [PATCH 1/5] show rating of simul clock config --- modules/simul/src/main/SimulApi.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/simul/src/main/SimulApi.scala b/modules/simul/src/main/SimulApi.scala index 7ec5c1f6d21e9..7b69eba9bb1a7 100644 --- a/modules/simul/src/main/SimulApi.scala +++ b/modules/simul/src/main/SimulApi.scala @@ -97,7 +97,7 @@ final class SimulApi( .filter(simul.variants.contains) .ifTrue(simul.nbAccepted < Game.maxPlayingRealtime) .so: variant => - val perfType = PerfType(variant, chess.Speed.Rapid) + val perfType = PerfType(variant, chess.Speed(simul.clock.config.some)) perfsRepo .withPerf(me.value, perfType) .flatMap: user => From 8a7ac01da2cc96b449ccb7160c4d8b165d6521fb Mon Sep 17 00:00:00 2001 From: Adam Morris Date: Mon, 6 Nov 2023 19:41:48 +1000 Subject: [PATCH 2/5] show host proper rating with provisional --- modules/simul/src/main/JsonView.scala | 3 ++- modules/simul/src/main/Simul.scala | 8 +++----- modules/user/src/main/UserPerfs.scala | 8 ++++++++ ui/simul/src/interfaces.ts | 1 + 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/simul/src/main/JsonView.scala b/modules/simul/src/main/JsonView.scala index 03fb10da886c8..6657cf2589990 100644 --- a/modules/simul/src/main/JsonView.scala +++ b/modules/simul/src/main/JsonView.scala @@ -78,7 +78,8 @@ final class JsonView( .obj( "id" -> host.id, "name" -> host.name, - "rating" -> simul.hostRating + "rating" -> simul.hostRating, + "provisional" -> simul.hostProvisional ) .add("gameId" -> simul.hostGameId.ifTrue(simul.isRunning)) .add("title" -> host.title) diff --git a/modules/simul/src/main/Simul.scala b/modules/simul/src/main/Simul.scala index a8ce7d07a817a..a9105a516063a 100644 --- a/modules/simul/src/main/Simul.scala +++ b/modules/simul/src/main/Simul.scala @@ -22,6 +22,7 @@ case class Simul( estimatedStartAt: Option[Instant] = None, hostId: UserId, hostRating: IntRating, + hostProvisional: Option[RatingProvisional], hostGameId: Option[String], // game the host is focusing on startedAt: Option[Instant], finishedAt: Option[Instant], @@ -158,11 +159,8 @@ object Simul: status = SimulStatus.Created, clock = clock, hostId = host.id, - hostRating = host.perfs.bestRatingIn: - variants.map { - PerfType(_, Speed(clock.config.some)) - } ::: List(PerfType.Blitz, PerfType.Rapid, PerfType.Classical) - , + hostRating = host.perfs.bestPerf(variants.map { PerfType(_, Speed(clock.config.some)) }).intRating, + hostProvisional = host.perfs.bestPerf(variants.map { PerfType(_, Speed(clock.config.some)) }).provisional.some, hostGameId = none, createdAt = nowInstant, estimatedStartAt = estimatedStartAt, diff --git a/modules/user/src/main/UserPerfs.scala b/modules/user/src/main/UserPerfs.scala index b4431bd05ec5a..30c1dbdf55e17 100644 --- a/modules/user/src/main/UserPerfs.scala +++ b/modules/user/src/main/UserPerfs.scala @@ -96,6 +96,14 @@ case class UserPerfs( case (ro, _) => ro .getOrElse(Perf.default.intRating) + def bestPerf(types: List[PerfType]): Perf = + types + .map(apply) + .foldLeft(none[Perf]): + case (ro, p) if ro.forall(_.intRating < p.intRating) => p.some + case (ro, _) => ro + .getOrElse(Perf.default) + def bestRatingInWithMinGames(types: List[PerfType], nbGames: Int): Option[IntRating] = types .map(apply) diff --git a/ui/simul/src/interfaces.ts b/ui/simul/src/interfaces.ts index 067d74685bf1e..62094d0c4b2ef 100644 --- a/ui/simul/src/interfaces.ts +++ b/ui/simul/src/interfaces.ts @@ -42,6 +42,7 @@ export interface Player extends LightUserOnline { export interface Host extends LightUserOnline { rating: number; + provisional?: boolean; gameId?: string; } From 1b7fd80ca8543d5aee7d72271f88521df145d3f5 Mon Sep 17 00:00:00 2001 From: Adam Morris Date: Mon, 6 Nov 2023 19:51:37 +1000 Subject: [PATCH 3/5] refactor --- modules/simul/src/main/Simul.scala | 49 ++++++++++++++++-------------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/modules/simul/src/main/Simul.scala b/modules/simul/src/main/Simul.scala index a9105a516063a..2b7c73a8d9725 100644 --- a/modules/simul/src/main/Simul.scala +++ b/modules/simul/src/main/Simul.scala @@ -153,26 +153,29 @@ object Simul: estimatedStartAt: Option[Instant], featurable: Option[Boolean], conditions: SimulCondition.All - ): Simul = Simul( - _id = SimulId(ThreadLocalRandom nextString 8), - name = name, - status = SimulStatus.Created, - clock = clock, - hostId = host.id, - hostRating = host.perfs.bestPerf(variants.map { PerfType(_, Speed(clock.config.some)) }).intRating, - hostProvisional = host.perfs.bestPerf(variants.map { PerfType(_, Speed(clock.config.some)) }).provisional.some, - hostGameId = none, - createdAt = nowInstant, - estimatedStartAt = estimatedStartAt, - variants = if position.isDefined then List(chess.variant.Standard) else variants, - position = position, - applicants = Nil, - pairings = Nil, - startedAt = none, - finishedAt = none, - hostSeenAt = nowInstant.some, - color = color.some, - text = text, - featurable = featurable, - conditions = conditions - ) + ): Simul = { + val hostPerf = host.perfs.bestPerf(variants.map { PerfType(_, Speed(clock.config.some)) }) + Simul( + _id = SimulId(ThreadLocalRandom nextString 8), + name = name, + status = SimulStatus.Created, + clock = clock, + hostId = host.id, + hostRating = hostPerf.intRating, + hostProvisional = hostPerf.provisional.some, + hostGameId = none, + createdAt = nowInstant, + estimatedStartAt = estimatedStartAt, + variants = if position.isDefined then List(chess.variant.Standard) else variants, + position = position, + applicants = Nil, + pairings = Nil, + startedAt = none, + finishedAt = none, + hostSeenAt = nowInstant.some, + color = color.some, + text = text, + featurable = featurable, + conditions = conditions + ) + } From 3c40e60f413a62d49fe5ce1183f5af9898f362c6 Mon Sep 17 00:00:00 2001 From: Adam Morris Date: Mon, 6 Nov 2023 19:53:30 +1000 Subject: [PATCH 4/5] scalafmtAll --- modules/simul/src/main/JsonView.scala | 6 +++--- modules/simul/src/main/Simul.scala | 3 +-- modules/user/src/main/UserPerfs.scala | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/modules/simul/src/main/JsonView.scala b/modules/simul/src/main/JsonView.scala index 6657cf2589990..034697f82bb35 100644 --- a/modules/simul/src/main/JsonView.scala +++ b/modules/simul/src/main/JsonView.scala @@ -76,9 +76,9 @@ final class JsonView( "host" -> lightHost.map { host => Json .obj( - "id" -> host.id, - "name" -> host.name, - "rating" -> simul.hostRating, + "id" -> host.id, + "name" -> host.name, + "rating" -> simul.hostRating, "provisional" -> simul.hostProvisional ) .add("gameId" -> simul.hostGameId.ifTrue(simul.isRunning)) diff --git a/modules/simul/src/main/Simul.scala b/modules/simul/src/main/Simul.scala index 2b7c73a8d9725..bea3b49102072 100644 --- a/modules/simul/src/main/Simul.scala +++ b/modules/simul/src/main/Simul.scala @@ -153,7 +153,7 @@ object Simul: estimatedStartAt: Option[Instant], featurable: Option[Boolean], conditions: SimulCondition.All - ): Simul = { + ): Simul = val hostPerf = host.perfs.bestPerf(variants.map { PerfType(_, Speed(clock.config.some)) }) Simul( _id = SimulId(ThreadLocalRandom nextString 8), @@ -178,4 +178,3 @@ object Simul: featurable = featurable, conditions = conditions ) - } diff --git a/modules/user/src/main/UserPerfs.scala b/modules/user/src/main/UserPerfs.scala index 30c1dbdf55e17..e7b3d6427f531 100644 --- a/modules/user/src/main/UserPerfs.scala +++ b/modules/user/src/main/UserPerfs.scala @@ -101,7 +101,7 @@ case class UserPerfs( .map(apply) .foldLeft(none[Perf]): case (ro, p) if ro.forall(_.intRating < p.intRating) => p.some - case (ro, _) => ro + case (ro, _) => ro .getOrElse(Perf.default) def bestRatingInWithMinGames(types: List[PerfType], nbGames: Int): Option[IntRating] = From 241a9fc5c551b823ad53559f086a3ee06c971886 Mon Sep 17 00:00:00 2001 From: Thibault Duplessis Date: Mon, 6 Nov 2023 11:53:56 +0100 Subject: [PATCH 5/5] simul host.provisional is optional --- modules/simul/src/main/JsonView.scala | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/simul/src/main/JsonView.scala b/modules/simul/src/main/JsonView.scala index 034697f82bb35..63c3a9d9dddf1 100644 --- a/modules/simul/src/main/JsonView.scala +++ b/modules/simul/src/main/JsonView.scala @@ -76,11 +76,11 @@ final class JsonView( "host" -> lightHost.map { host => Json .obj( - "id" -> host.id, - "name" -> host.name, - "rating" -> simul.hostRating, - "provisional" -> simul.hostProvisional + "id" -> host.id, + "name" -> host.name, + "rating" -> simul.hostRating ) + .add("provisional" -> simul.hostProvisional) .add("gameId" -> simul.hostGameId.ifTrue(simul.isRunning)) .add("title" -> host.title) .add("patron" -> host.isPatron)