From 3388246b4524512041d858880f70eabccd5ef7a2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 17 May 2026 08:25:13 +0000 Subject: [PATCH 1/2] Initial plan From d0a59cd90270ae1b441c7b6e5984591cd8ff6066 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 2 Jun 2026 06:52:58 +0000 Subject: [PATCH 2/2] Add Time control button + sub-panel to PvB modal --- .../dto/botgame/CreateBotGameRequest.kt | 2 + .../services/PlayerVsBotGameService.kt | 14 ++ .../src/main/resources/modals/play-bot.html | 132 +++++++++++++++++- .../modal-handlers/play-bot-modal-handler.js | 75 +++++++++- 4 files changed, 220 insertions(+), 3 deletions(-) diff --git a/webapp-service-layer/src/main/kotlin/io/elephantchess/servicelayer/dto/botgame/CreateBotGameRequest.kt b/webapp-service-layer/src/main/kotlin/io/elephantchess/servicelayer/dto/botgame/CreateBotGameRequest.kt index 2cd0f0bbc..2ae55bde6 100644 --- a/webapp-service-layer/src/main/kotlin/io/elephantchess/servicelayer/dto/botgame/CreateBotGameRequest.kt +++ b/webapp-service-layer/src/main/kotlin/io/elephantchess/servicelayer/dto/botgame/CreateBotGameRequest.kt @@ -12,4 +12,6 @@ data class CreateBotGameRequest( val startFen: String?, val openingMode: OpeningMode = OpeningMode.BY_FREQUENCY, val variant: Variant = Variant.XIANGQI, + val timeControlBase: Int? = null, + val timeControlIncrement: Int? = null, ) diff --git a/webapp-service-layer/src/main/kotlin/io/elephantchess/servicelayer/services/PlayerVsBotGameService.kt b/webapp-service-layer/src/main/kotlin/io/elephantchess/servicelayer/services/PlayerVsBotGameService.kt index 3c26060e9..6bc6b2edc 100644 --- a/webapp-service-layer/src/main/kotlin/io/elephantchess/servicelayer/services/PlayerVsBotGameService.kt +++ b/webapp-service-layer/src/main/kotlin/io/elephantchess/servicelayer/services/PlayerVsBotGameService.kt @@ -126,6 +126,20 @@ class PlayerVsBotGameService( throw BadRequestException("You must be authenticated in to play with depth greater than 6") } + request.timeControlBase?.let { base -> + if (base <= 0) { + throw BadRequestException("Time control base must be positive") + } + } + request.timeControlIncrement?.let { increment -> + if (increment < 0) { + throw BadRequestException("Time control increment must be non-negative") + } + if (request.timeControlBase == null) { + throw BadRequestException("Time control increment requires a base time") + } + } + // Manchu variant requires Engine only opening mode if (request.variant == Variant.MANCHU && request.openingMode != OpeningMode.ENGINE_ONLY) { throw BadRequestException("Variants require engine-only opening mode") diff --git a/webapp/src/main/resources/modals/play-bot.html b/webapp/src/main/resources/modals/play-bot.html index f86a9f608..d135398c0 100644 --- a/webapp/src/main/resources/modals/play-bot.html +++ b/webapp/src/main/resources/modals/play-bot.html @@ -1,6 +1,6 @@