diff --git a/bruno/account/challenge/01 Send Challenge.bru b/bruno/account/challenge/01 Send Challenge.bru index 056e606..3e88563 100644 --- a/bruno/account/challenge/01 Send Challenge.bru +++ b/bruno/account/challenge/01 Send Challenge.bru @@ -10,11 +10,6 @@ post { auth: inherit } -settings { - encodeUrl: true - timeout: 0 -} - headers { Content-Type: application/json Authorization: Bearer {{token}} @@ -22,9 +17,20 @@ headers { body:json { { + "color": "random", "timeControl": { "limitSeconds": 600, "incrementSeconds": 5 } } } + +vars:pre-request { + username: bdc + token: eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJub3djaGVzcyIsInN1YiI6ImY3MGQxNDIwLTdhZmEtNGVjMy05Mzg1LWViYWU0N2U3NGY4OCIsInVzZXJuYW1lIjoicGxheWVyMSIsImlhdCI6MTc3OTE5MjkwOCwiZXhwIjoxNzc5MTkzMjA4LCJqdGkiOiJkMDhlZmRhMi01ZjliLTQyNjgtOGM3MC1iNDA2OTViNDhiMTUifQ.q68R2bUdRQ5QwEIfcP0d2g_Wac94qd4K6BzP-PC94x-tDpT3leUY8ZpqY6YzoNv-ywp5sm47-WC539DyUqdzDgPVLLSmOMjRxG-HpaNdXwsXlp8_C7KGlgkK_XSMa3Gq6S4AfUbaXbRhPg5NZz2MRosu0BY2ed0ISvmEfX5XEdBRlKgD14BIKAsEFv3tHtarFS1RGpcSoHV2oeIk_m-VHUC78N-ciNHmBH6mZna_fVHgMocOIrEsTZuUms0Zacmebvh2tAcf36xux1Bm2awJff19zReD-A2o9jucrKcM3Im5BJ6JtuWAsHEae9KLmuol6S2pldvNOmUn3egFUYz0yQ +} + +settings { + encodeUrl: true + timeout: 0 +} diff --git a/modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala b/modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala index 1f5775c..08490fd 100644 --- a/modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala +++ b/modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala @@ -6,7 +6,6 @@ import scala.compiletime.uninitialized import java.time.Instant import java.util.UUID -import scala.Conversion @Entity @Table(name = "challenges") @@ -34,13 +33,14 @@ class Challenge extends PanacheEntityBase: @Column(nullable = true, columnDefinition = "varchar(255)") var declineReason: DeclineReason = uninitialized - var timeControlType: String = uninitialized + @Column(nullable = true) + var limitSeconds: java.lang.Integer = uninitialized @Column(nullable = true) - var timeControlLimit: java.lang.Integer = uninitialized + var incrementSeconds: java.lang.Integer = uninitialized @Column(nullable = true) - var timeControlIncrement: java.lang.Integer = uninitialized + var daysPerMove: java.lang.Integer = uninitialized var createdAt: Instant = uninitialized @@ -52,5 +52,6 @@ class Challenge extends PanacheEntityBase: def gameIdOpt: Option[String] = Option(gameId) def declineReasonOpt: Option[DeclineReason] = Option(declineReason) - def timeControlLimitOpt: Option[Int] = Option(timeControlLimit).map(_.intValue()) - def timeControlIncrementOpt: Option[Int] = Option(timeControlIncrement).map(_.intValue()) + def limitSecondsOpt: Option[Int] = Option(limitSeconds).map(_.intValue()) + def incrementSecondsOpt: Option[Int] = Option(incrementSeconds).map(_.intValue()) + def daysPerMoveOpt: Option[Int] = Option(daysPerMove).map(_.intValue()) diff --git a/modules/account/src/main/scala/de/nowchess/account/dto/Dtos.scala b/modules/account/src/main/scala/de/nowchess/account/dto/Dtos.scala index 6876803..be992f4 100644 --- a/modules/account/src/main/scala/de/nowchess/account/dto/Dtos.scala +++ b/modules/account/src/main/scala/de/nowchess/account/dto/Dtos.scala @@ -10,7 +10,7 @@ case class PlayerInfo(id: String, name: String, rating: Int) case class PublicAccountDto(id: String, username: String, rating: Int, createdAt: String) -case class TimeControlDto(`type`: String, limit: Option[Int], increment: Option[Int]) +case class TimeControlDto(limitSeconds: Option[Int], incrementSeconds: Option[Int], daysPerMove: Option[Int]) case class ChallengeRequest(color: String, timeControl: TimeControlDto) diff --git a/modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala b/modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala index 4b7f9da..c5e8650 100644 --- a/modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala +++ b/modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala @@ -88,9 +88,9 @@ class ChallengeService: challenge.destUser = destUser challenge.color = color challenge.status = ChallengeStatus.Created - challenge.timeControlType = req.timeControl.`type` - challenge.timeControlLimit = req.timeControl.limit.map(java.lang.Integer.valueOf).orNull - challenge.timeControlIncrement = req.timeControl.increment.map(java.lang.Integer.valueOf).orNull + challenge.limitSeconds = req.timeControl.limitSeconds.map(java.lang.Integer.valueOf).orNull + challenge.incrementSeconds = req.timeControl.incrementSeconds.map(java.lang.Integer.valueOf).orNull + challenge.daysPerMove = req.timeControl.daysPerMove.map(java.lang.Integer.valueOf).orNull challenge.createdAt = Instant.now() challenge.expiresAt = Instant.now().plus(24, ChronoUnit.HOURS) challengeRepository.persist(challenge) @@ -200,10 +200,9 @@ class ChallengeService: if ThreadLocalRandom.current().nextBoolean() then (challenger, destUser) else (destUser, challenger) private def buildTimeControl(challenge: Challenge): Option[CoreTimeControl] = - challenge.timeControlType match - case "unlimited" => None - case "correspondence" => Some(CoreTimeControl(None, None, challenge.timeControlLimitOpt)) - case _ => Some(CoreTimeControl(challenge.timeControlLimitOpt, challenge.timeControlIncrementOpt, None)) + if challenge.limitSecondsOpt.isEmpty && challenge.incrementSecondsOpt.isEmpty && challenge.daysPerMoveOpt.isEmpty + then None + else Some(CoreTimeControl(challenge.limitSecondsOpt, challenge.incrementSecondsOpt, challenge.daysPerMoveOpt)) private def parseColor(raw: String): Either[ChallengeError, ChallengeColor] = raw.toLowerCase match @@ -227,7 +226,7 @@ class ChallengeService: destUser = PlayerInfo(c.destUser.id.toString, c.destUser.username, c.destUser.rating), variant = "standard", color = c.color.toString.toLowerCase, - timeControl = TimeControlDto(c.timeControlType, c.timeControlLimitOpt, c.timeControlIncrementOpt), + timeControl = TimeControlDto(c.limitSecondsOpt, c.incrementSecondsOpt, c.daysPerMoveOpt), status = c.status.toString.toLowerCase, declineReason = c.declineReasonOpt.map(_.toString.toLowerCase), gameId = c.gameIdOpt, diff --git a/modules/account/src/test/scala/de/nowchess/account/resource/ChallengeResourceTest.scala b/modules/account/src/test/scala/de/nowchess/account/resource/ChallengeResourceTest.scala index b793d6b..47caf3a 100644 --- a/modules/account/src/test/scala/de/nowchess/account/resource/ChallengeResourceTest.scala +++ b/modules/account/src/test/scala/de/nowchess/account/resource/ChallengeResourceTest.scala @@ -44,7 +44,7 @@ class ChallengeResourceTest: .path[String]("token") private val clockBody = - """{"color":"random","timeControl":{"type":"clock","limit":300,"increment":5}}""" + """{"color":"random","timeControl":{"limitSeconds":300,"incrementSeconds":5}}""" private def authed(token: String) = givenRequest().header("Authorization", s"Bearer $token")