From 3df199afa1463fbdda8d325c873cc6631acead5f Mon Sep 17 00:00:00 2001 From: Janis Date: Thu, 23 Apr 2026 21:56:21 +0200 Subject: [PATCH] feat(game): introduce game modes and time control features --- .codesight/CODESIGHT.md | 91 ++++++++-- .codesight/graph.md | 18 +- .codesight/libs.md | 69 +++++++- .codesight/wiki/index.md | 6 +- .codesight/wiki/log.md | 2 + .codesight/wiki/overview.md | 22 ++- .idea/gradle.xml | 1 + .idea/scala_compiler.xml | 2 +- CLAUDE.md | 1 - CLAUDE.original.md | 1 - bruno/board/game/01 Create Game.bru | 6 +- bruno/board/game/02 Get Game.bru | 7 +- bruno/board/game/03 Stream Game.bru | 17 +- bruno/board/import/01 Import FEN.bru | 6 +- bruno/board/move/01 Make Move.bru | 2 +- bruno/environments/local.bru | 1 + gradle/wrapper/gradle-wrapper.properties | 2 +- modules/account/build.gradle.kts | 4 + .../reachability-metadata.json | 27 +++ .../src/main/resources/application.yml | 40 +++-- .../account/client/CoreGameClient.scala | 24 +++ .../config/NativeReflectionConfig.scala | 16 +- .../nowchess/account/domain/Challenge.scala | 4 + .../scala/de/nowchess/account/dto/Dtos.scala | 1 + .../nowchess/account/error/AccountError.scala | 11 ++ .../account/error/ChallengeError.scala | 25 +++ .../account/resource/AccountResource.scala | 5 +- .../account/resource/ChallengeResource.scala | 23 +-- .../account/service/AccountService.scala | 11 +- .../account/service/ChallengeService.scala | 77 ++++++--- .../resource/ChallengeResourceTest.scala | 15 +- .../scala/de/nowchess/api/dto/ClockDto.scala | 9 + .../api/dto/CreateGameRequestDto.scala | 4 + .../de/nowchess/api/dto/GameStateDto.scala | 1 + .../api/dto/ImportFenRequestDto.scala | 1 + .../de/nowchess/api/dto/TimeControlDto.scala | 7 + .../de/nowchess/api/error/GameError.scala | 13 ++ .../de/nowchess/api/game/ClockState.scala | 55 ++++++ .../scala/de/nowchess/api/game/GameMode.scala | 4 + .../de/nowchess/api/game/GameResult.scala | 7 +- .../de/nowchess/api/game/TimeControl.scala | 6 + .../nowchess/api/io/GameContextImport.scala | 3 +- .../de/nowchess/api/game/ClockStateTest.scala | 109 ++++++++++++ .../nowchess/api/game/GameContextTest.scala | 5 +- modules/core/build.gradle.kts | 2 + .../core/src/main/resources/application.yml | 45 ++++- .../nowchess/chess/config/JacksonConfig.scala | 14 +- .../chess/config/NativeReflectionConfig.scala | 5 +- .../chess/config/SquareKeyDeserializer.scala | 8 - .../chess/config/SquareKeySerializer.scala | 9 - .../de/nowchess/chess/engine/GameEngine.scala | 148 +++++++++++++---- .../chess/json/MoveTypeDeserializer.scala | 19 --- .../chess/json/MoveTypeSerializer.scala | 23 --- .../chess/json/SquareSerializer.scala | 9 - .../de/nowchess/chess/observer/Observer.scala | 6 + .../nowchess/chess/registry/GameEntry.scala | 2 + .../chess/resource/GameResource.scala | 131 +++++++++------ .../resource/GameWebSocketResource.scala | 132 +++++++++++++++ .../chess/engine/GameEngineClockTest.scala | 147 +++++++++++++++++ .../engine/GameEngineDrawOfferTest.scala | 4 +- .../engine/GameEngineIntegrationTest.scala | 14 +- .../chess/engine/GameEngineOutcomesTest.scala | 5 +- .../chess/engine/GameEngineResignTest.scala | 15 +- .../chess/json/JsonSerializersTest.scala | 82 ++------- .../GameResourceIntegrationTest.scala | 26 +-- modules/io/build.gradle.kts | 1 + .../reachability-metadata.json | 27 +++ .../de/nowchess/io/GameFileService.scala | 13 +- .../scala/de/nowchess/io/fen/FenParser.scala | 21 +-- .../io/fen/FenParserCombinators.scala | 7 +- .../nowchess/io/fen/FenParserFastParse.scala | 7 +- .../de/nowchess/io/json/JsonParser.scala | 13 +- .../scala/de/nowchess/io/pgn/PgnParser.scala | 11 +- .../io/service/config/JacksonConfig.scala | 9 +- .../io/service/resource/IoResource.scala | 4 +- .../de/nowchess/io/GameFileServiceSuite.scala | 3 +- .../de/nowchess/io/fen/FenExporterTest.scala | 2 +- .../de/nowchess/io/json/JsonParserTest.scala | 8 +- .../io/json/SquareKeyDeserializerTest.scala | 35 ++-- .../io/json/SquareKeySerializerTest.scala | 35 +--- modules/json/build.gradle.kts | 86 ++++++++++ .../de/nowchess/json/ChessJacksonModule.scala | 16 ++ .../json/GameResultDeserializer.scala | 21 +++ .../nowchess/json/GameResultSerializer.scala | 18 ++ .../nowchess}/json/MoveTypeDeserializer.scala | 2 +- .../nowchess}/json/MoveTypeSerializer.scala | 2 +- .../nowchess}/json/SquareDeserializer.scala | 2 +- .../json/SquareKeyDeserializer.scala | 2 +- .../nowchess}/json/SquareKeySerializer.scala | 2 +- .../de/nowchess}/json/SquareSerializer.scala | 2 +- .../json/ChessJacksonModuleTest.scala | 156 ++++++++++++++++++ modules/rule/build.gradle.kts | 1 + .../reachability-metadata.json | 27 +++ .../nowchess/rules/config/JacksonConfig.scala | 14 +- .../rules/json/SquareDeserializer.scala | 9 - .../rules/json/SquareKeyDeserializer.scala | 8 - .../rules/json/SquareKeySerializer.scala | 9 - .../DefaultRulesStateTransitionsTest.scala | 2 +- .../rules/json/JsonSerializersTest.scala | 97 ++--------- settings.gradle.kts | 1 + 100 files changed, 1676 insertions(+), 604 deletions(-) create mode 100644 modules/account/src/main/resources/META-INF.native-image.de.nowchess.account/reachability-metadata.json create mode 100644 modules/account/src/main/scala/de/nowchess/account/client/CoreGameClient.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/error/AccountError.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/error/ChallengeError.scala create mode 100644 modules/api/src/main/scala/de/nowchess/api/dto/ClockDto.scala create mode 100644 modules/api/src/main/scala/de/nowchess/api/dto/TimeControlDto.scala create mode 100644 modules/api/src/main/scala/de/nowchess/api/error/GameError.scala create mode 100644 modules/api/src/main/scala/de/nowchess/api/game/ClockState.scala create mode 100644 modules/api/src/main/scala/de/nowchess/api/game/GameMode.scala create mode 100644 modules/api/src/main/scala/de/nowchess/api/game/TimeControl.scala create mode 100644 modules/api/src/test/scala/de/nowchess/api/game/ClockStateTest.scala delete mode 100644 modules/core/src/main/scala/de/nowchess/chess/config/SquareKeyDeserializer.scala delete mode 100644 modules/core/src/main/scala/de/nowchess/chess/config/SquareKeySerializer.scala delete mode 100644 modules/core/src/main/scala/de/nowchess/chess/json/MoveTypeDeserializer.scala delete mode 100644 modules/core/src/main/scala/de/nowchess/chess/json/MoveTypeSerializer.scala delete mode 100644 modules/core/src/main/scala/de/nowchess/chess/json/SquareSerializer.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/resource/GameWebSocketResource.scala create mode 100644 modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineClockTest.scala create mode 100644 modules/io/src/main/resources/META-INF.native-image.de.nowchess.io/reachability-metadata.json create mode 100644 modules/json/build.gradle.kts create mode 100644 modules/json/src/main/scala/de/nowchess/json/ChessJacksonModule.scala create mode 100644 modules/json/src/main/scala/de/nowchess/json/GameResultDeserializer.scala create mode 100644 modules/json/src/main/scala/de/nowchess/json/GameResultSerializer.scala rename modules/{rule/src/main/scala/de/nowchess/rules => json/src/main/scala/de/nowchess}/json/MoveTypeDeserializer.scala (97%) rename modules/{rule/src/main/scala/de/nowchess/rules => json/src/main/scala/de/nowchess}/json/MoveTypeSerializer.scala (96%) rename modules/{core/src/main/scala/de/nowchess/chess => json/src/main/scala/de/nowchess}/json/SquareDeserializer.scala (91%) rename modules/{io/src/main/scala/de/nowchess/io => json/src/main/scala/de/nowchess}/json/SquareKeyDeserializer.scala (91%) rename modules/{io/src/main/scala/de/nowchess/io => json/src/main/scala/de/nowchess}/json/SquareKeySerializer.scala (92%) rename modules/{rule/src/main/scala/de/nowchess/rules => json/src/main/scala/de/nowchess}/json/SquareSerializer.scala (91%) create mode 100644 modules/json/src/test/scala/de/nowchess/json/ChessJacksonModuleTest.scala create mode 100644 modules/rule/src/main/resources/META-INF.native-image.de.nowchess.rule/reachability-metadata.json delete mode 100644 modules/rule/src/main/scala/de/nowchess/rules/json/SquareDeserializer.scala delete mode 100644 modules/rule/src/main/scala/de/nowchess/rules/json/SquareKeyDeserializer.scala delete mode 100644 modules/rule/src/main/scala/de/nowchess/rules/json/SquareKeySerializer.scala diff --git a/.codesight/CODESIGHT.md b/.codesight/CODESIGHT.md index 7d74d03..56fc2a9 100644 --- a/.codesight/CODESIGHT.md +++ b/.codesight/CODESIGHT.md @@ -2,8 +2,8 @@ > **Stack:** raw-http | none | unknown | scala -> 0 routes | 0 models | 0 components | 89 lib files | 1 env vars | 1 middleware -> **Token savings:** this file is ~0 tokens. Without it, AI exploration would cost ~0 tokens. **Saves ~0 tokens per conversation.** +> 0 routes | 0 models | 0 components | 107 lib files | 1 env vars | 1 middleware +> **Token savings:** this file is ~7,200 tokens. Without it, AI exploration would cost ~37,300 tokens. **Saves ~30,100 tokens per conversation.** --- @@ -25,6 +25,62 @@ - function main: () -> None - class TestCase - _...2 more_ +- `modules/account/src/main/scala/de/nowchess/account/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/account/src/main/scala/de/nowchess/account/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/account/src/main/scala/de/nowchess/account/domain/Account.scala` — class Account +- `modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala` + - class Challenge + - function declineReasonOpt + - function timeControlLimitOpt + - function timeControlIncrementOpt +- `modules/account/src/main/scala/de/nowchess/account/domain/ChallengeColorConverter.scala` — class ChallengeColorConverter +- `modules/account/src/main/scala/de/nowchess/account/domain/ChallengeStatusConverter.scala` — class ChallengeStatusConverter +- `modules/account/src/main/scala/de/nowchess/account/domain/DeclineReasonConverter.scala` — class DeclineReasonConverter +- `modules/account/src/main/scala/de/nowchess/account/domain/TimeControl.scala` — class TimeControl +- `modules/account/src/main/scala/de/nowchess/account/error/AccountError.scala` — function message +- `modules/account/src/main/scala/de/nowchess/account/error/ChallengeError.scala` — function message +- `modules/account/src/main/scala/de/nowchess/account/repository/AccountRepository.scala` + - class AccountRepository + - function findByUsername + - function findById + - function persist + - function findByEmail + - function findAll +- `modules/account/src/main/scala/de/nowchess/account/repository/ChallengeRepository.scala` + - class ChallengeRepository + - function findActiveByChallengerId + - function findActiveByDestUserId + - function findDuplicateChallenge + - function findById + - function persist + - _...1 more_ +- `modules/account/src/main/scala/de/nowchess/account/resource/AccountResource.scala` + - class AccountResource + - function register + - function login + - function me + - function publicProfile +- `modules/account/src/main/scala/de/nowchess/account/resource/ChallengeResource.scala` + - class ChallengeResource + - function create + - function list + - function accept + - function decline + - function cancel +- `modules/account/src/main/scala/de/nowchess/account/service/AccountService.scala` + - class AccountService + - function register + - function login + - function findByUsername + - function findById +- `modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala` + - class ChallengeService + - function create + - function accept + - function decline + - function cancel + - function listForUser + - _...1 more_ - `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` - class Board - function apply @@ -54,6 +110,15 @@ - `modules/api/src/main/scala/de/nowchess/api/dto/ErrorEventDto.scala` — class ErrorEventDto, function apply - `modules/api/src/main/scala/de/nowchess/api/dto/GameFullEventDto.scala` — class GameFullEventDto, function apply - `modules/api/src/main/scala/de/nowchess/api/dto/GameStateEventDto.scala` — class GameStateEventDto, function apply +- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — function message +- `modules/api/src/main/scala/de/nowchess/api/game/ClockState.scala` + - function activeColor + - function afterMove + - function remainingMs + - function remainingMs + - function afterMove + - function remainingMs + - _...3 more_ - `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` - function kingSquare - function withBoard @@ -228,8 +293,8 @@ - function turn - function context - function pendingDrawOfferBy - - function canUndo - - _...17 more_ + - function currentClockState + - _...18 more_ - `modules/core/src/main/scala/de/nowchess/chess/exception/ApiException.scala` - class ApiException - class GameNotFoundException @@ -364,36 +429,36 @@ - `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **74** files - `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **66** files - `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **52** files -- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **38** files -- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **26** files +- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **42** files +- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **27** files - `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **21** files - `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **20** files - `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — imported by **20** files - `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **13** files +- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **12** files - `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` — imported by **12** files -- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **11** files +- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **10** files - `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **10** files -- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **9** files +- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — imported by **9** files - `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — imported by **8** files +- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **7** files - `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **7** files - `modules/api/src/main/scala/de/nowchess/api/bot/Bot.scala` — imported by **6** files -- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **6** files - `modules/bot/src/main/scala/de/nowchess/bot/ai/Evaluation.scala` — imported by **6** files - `modules/api/src/main/scala/de/nowchess/api/io/GameContextExport.scala` — imported by **6** files -- `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala` — imported by **5** files ## Import Map (who imports what) - `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` ← `modules/api/src/main/scala/de/nowchess/api/bot/Bot.scala`, `modules/api/src/main/scala/de/nowchess/api/io/GameContextExport.scala`, `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala`, `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`, `modules/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala` +69 more - `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/move/Move.scala`, `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/api/src/test/scala/de/nowchess/api/move/MoveTest.scala` +61 more - `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` ← `modules/api/src/main/scala/de/nowchess/api/bot/Bot.scala`, `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`, `modules/api/src/test/scala/de/nowchess/api/board/BoardTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala` +47 more -- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala` +33 more -- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +21 more +- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/ClockState.scala`, `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala`, `modules/api/src/test/scala/de/nowchess/api/game/ClockStateTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala` +37 more +- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +22 more - `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`, `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala`, `modules/bot/src/main/scala/de/nowchess/bot/util/ZobristHash.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +16 more - `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +15 more - `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala` +15 more - `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/test/scala/de/nowchess/bot/ZobristHashTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala` +8 more -- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +7 more +- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` ← `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala`, `modules/core/src/main/scala/de/nowchess/chess/resource/GameResource.scala` +7 more --- diff --git a/.codesight/graph.md b/.codesight/graph.md index 7f676a5..42b736a 100644 --- a/.codesight/graph.md +++ b/.codesight/graph.md @@ -5,33 +5,33 @@ - `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **74** files - `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **66** files - `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **52** files -- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **38** files -- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **26** files +- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **42** files +- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **27** files - `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **21** files - `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **20** files - `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — imported by **20** files - `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **13** files +- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **12** files - `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` — imported by **12** files -- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **11** files +- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **10** files - `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **10** files -- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **9** files +- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — imported by **9** files - `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — imported by **8** files +- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **7** files - `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **7** files - `modules/api/src/main/scala/de/nowchess/api/bot/Bot.scala` — imported by **6** files -- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **6** files - `modules/bot/src/main/scala/de/nowchess/bot/ai/Evaluation.scala` — imported by **6** files - `modules/api/src/main/scala/de/nowchess/api/io/GameContextExport.scala` — imported by **6** files -- `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala` — imported by **5** files ## Import Map (who imports what) - `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` ← `modules/api/src/main/scala/de/nowchess/api/bot/Bot.scala`, `modules/api/src/main/scala/de/nowchess/api/io/GameContextExport.scala`, `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala`, `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`, `modules/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala` +69 more - `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/move/Move.scala`, `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/api/src/test/scala/de/nowchess/api/move/MoveTest.scala` +61 more - `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` ← `modules/api/src/main/scala/de/nowchess/api/bot/Bot.scala`, `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala`, `modules/api/src/test/scala/de/nowchess/api/board/BoardTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala` +47 more -- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala` +33 more -- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +21 more +- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/ClockState.scala`, `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala`, `modules/api/src/test/scala/de/nowchess/api/game/ClockStateTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala` +37 more +- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +22 more - `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`, `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala`, `modules/bot/src/main/scala/de/nowchess/bot/util/ZobristHash.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +16 more - `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +15 more - `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala` +15 more - `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` ← `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/test/scala/de/nowchess/bot/ZobristHashTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala` +8 more -- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` ← `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala`, `modules/bot/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala` +7 more +- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` ← `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala`, `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala`, `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala`, `modules/core/src/main/scala/de/nowchess/chess/resource/GameResource.scala` +7 more diff --git a/.codesight/libs.md b/.codesight/libs.md index b8ce77c..9c66ffb 100644 --- a/.codesight/libs.md +++ b/.codesight/libs.md @@ -16,6 +16,62 @@ - function main: () -> None - class TestCase - _...2 more_ +- `modules/account/src/main/scala/de/nowchess/account/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/account/src/main/scala/de/nowchess/account/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/account/src/main/scala/de/nowchess/account/domain/Account.scala` — class Account +- `modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala` + - class Challenge + - function declineReasonOpt + - function timeControlLimitOpt + - function timeControlIncrementOpt +- `modules/account/src/main/scala/de/nowchess/account/domain/ChallengeColorConverter.scala` — class ChallengeColorConverter +- `modules/account/src/main/scala/de/nowchess/account/domain/ChallengeStatusConverter.scala` — class ChallengeStatusConverter +- `modules/account/src/main/scala/de/nowchess/account/domain/DeclineReasonConverter.scala` — class DeclineReasonConverter +- `modules/account/src/main/scala/de/nowchess/account/domain/TimeControl.scala` — class TimeControl +- `modules/account/src/main/scala/de/nowchess/account/error/AccountError.scala` — function message +- `modules/account/src/main/scala/de/nowchess/account/error/ChallengeError.scala` — function message +- `modules/account/src/main/scala/de/nowchess/account/repository/AccountRepository.scala` + - class AccountRepository + - function findByUsername + - function findById + - function persist + - function findByEmail + - function findAll +- `modules/account/src/main/scala/de/nowchess/account/repository/ChallengeRepository.scala` + - class ChallengeRepository + - function findActiveByChallengerId + - function findActiveByDestUserId + - function findDuplicateChallenge + - function findById + - function persist + - _...1 more_ +- `modules/account/src/main/scala/de/nowchess/account/resource/AccountResource.scala` + - class AccountResource + - function register + - function login + - function me + - function publicProfile +- `modules/account/src/main/scala/de/nowchess/account/resource/ChallengeResource.scala` + - class ChallengeResource + - function create + - function list + - function accept + - function decline + - function cancel +- `modules/account/src/main/scala/de/nowchess/account/service/AccountService.scala` + - class AccountService + - function register + - function login + - function findByUsername + - function findById +- `modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala` + - class ChallengeService + - function create + - function accept + - function decline + - function cancel + - function listForUser + - _...1 more_ - `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` - class Board - function apply @@ -45,6 +101,15 @@ - `modules/api/src/main/scala/de/nowchess/api/dto/ErrorEventDto.scala` — class ErrorEventDto, function apply - `modules/api/src/main/scala/de/nowchess/api/dto/GameFullEventDto.scala` — class GameFullEventDto, function apply - `modules/api/src/main/scala/de/nowchess/api/dto/GameStateEventDto.scala` — class GameStateEventDto, function apply +- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — function message +- `modules/api/src/main/scala/de/nowchess/api/game/ClockState.scala` + - function activeColor + - function afterMove + - function remainingMs + - function remainingMs + - function afterMove + - function remainingMs + - _...3 more_ - `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` - function kingSquare - function withBoard @@ -219,8 +284,8 @@ - function turn - function context - function pendingDrawOfferBy - - function canUndo - - _...17 more_ + - function currentClockState + - _...18 more_ - `modules/core/src/main/scala/de/nowchess/chess/exception/ApiException.scala` - class ApiException - class GameNotFoundException diff --git a/.codesight/wiki/index.md b/.codesight/wiki/index.md index 22ba8d0..afb5e0d 100644 --- a/.codesight/wiki/index.md +++ b/.codesight/wiki/index.md @@ -1,6 +1,6 @@ # NowChessSystems — Wiki -_Generated 2026-04-12 — re-run `npx codesight --wiki` if the codebase has changed._ +_Generated 2026-04-23 — re-run `npx codesight --wiki` if the codebase has changed._ Structural map compiled from source code via AST. No LLM — deterministic, 200ms. @@ -15,7 +15,7 @@ Structural map compiled from source code via AST. No LLM — deterministic, 200m - Routes: **0** - Models: **0** - Components: **0** -- Env vars: **0** required, **0** with defaults +- Env vars: **1** required, **0** with defaults ## How to Use @@ -41,4 +41,4 @@ These exist in your codebase but are **not** reflected in wiki articles: When in doubt, search the source. The wiki is a starting point, not a complete inventory. --- -_Last compiled: 2026-04-12 · 2 articles · [codesight](https://github.com/Houseofmvps/codesight)_ \ No newline at end of file +_Last compiled: 2026-04-23 · 2 articles · [codesight](https://github.com/Houseofmvps/codesight)_ \ No newline at end of file diff --git a/.codesight/wiki/log.md b/.codesight/wiki/log.md index 6c83809..d94578e 100644 --- a/.codesight/wiki/log.md +++ b/.codesight/wiki/log.md @@ -3,3 +3,5 @@ History of `npx codesight --wiki` runs. Capped at 20 entries. ## [2026-04-12 14:34:19] scan | 0 routes, 0 models, 0 components → 2 articles + +## [2026-04-23 11:41:43] scan | 0 routes, 0 models, 0 components → 2 articles diff --git a/.codesight/wiki/overview.md b/.codesight/wiki/overview.md index 770cf96..190a96a 100644 --- a/.codesight/wiki/overview.md +++ b/.codesight/wiki/overview.md @@ -4,16 +4,24 @@ **NowChessSystems** is a scala project built with raw-http. +## Scale + +1 middleware layers · 1 environment variables + ## High-Impact Files Changes to these files have the widest blast radius across the codebase: -- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **28** files -- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **21** files -- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **19** files -- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **14** files -- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **13** files -- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **10** files +- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **74** files +- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **66** files +- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **52** files +- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **42** files +- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **27** files +- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **21** files + +## Required Environment Variables + +- `STOCKFISH_PATH` — `modules/bot/python/nnue.py` --- -_Back to [index.md](./index.md) · Generated 2026-04-12_ \ No newline at end of file +_Back to [index.md](./index.md) · Generated 2026-04-23_ \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index fde5ab0..7d3788b 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -15,6 +15,7 @@ diff --git a/.idea/scala_compiler.xml b/.idea/scala_compiler.xml index 369ce50..7e3ab9c 100644 --- a/.idea/scala_compiler.xml +++ b/.idea/scala_compiler.xml @@ -5,7 +5,7 @@