From 590924254e8a2754de661a57a03e43f89ceb6299 Mon Sep 17 00:00:00 2001 From: Janis Date: Wed, 29 Apr 2026 22:06:01 +0200 Subject: [PATCH] feat: true-microservices (#40) Reviewed-on: https://git.janis-eccarius.de/NowChess/NowChessSystems/pulls/40 --- .codesight/CODESIGHT.md | 455 ++++++++-- .codesight/graph.md | 58 +- .codesight/libs.md | 348 +++++++- .codesight/routes.md | 44 + .codesight/wiki/index.md | 6 +- .codesight/wiki/log.md | 2 + .codesight/wiki/overview.md | 22 +- .devcontainer/Dockerfile | 12 + .devcontainer/README.md | 18 + .devcontainer/devcontainer.json | 39 + .devcontainer/docker-compose.yml | 65 ++ .github/workflows/native-image.yml | 7 + .gitignore | 3 + .idea/copilotDiffState.xml | 18 + .idea/gradle.xml | 11 +- .idea/misc.xml | 3 +- .idea/scala_compiler.xml | 2 +- CLAUDE.md | 1 - CLAUDE.original.md | 1 - ...a-new-microservice-ethereal-marshmallow.md | 334 +++++++ bruno/board/game/01 Create Game.bru | 6 +- bruno/board/game/02 Get Game.bru | 7 +- bruno/board/game/03 Stream Game.bru | 29 +- bruno/board/import/01 Import FEN.bru | 6 +- bruno/board/move/01 Make Move.bru | 2 +- bruno/board/move/02 Get Legal Moves.bru | 2 +- bruno/environments/local.bru | 1 + build.gradle.kts | 14 +- docs/board-api-spec.yaml | 771 ---------------- gradle/wrapper/gradle-wrapper.properties | 2 +- jacoco-reporter/application.yml | 0 modules/account/build.gradle.kts | 117 +++ .../reachability-metadata.json | 27 + .../src/main/resources/application.yml | 64 ++ .../src/main/resources/keys/public.pem | 9 + .../account/client/CoreGameClient.scala | 27 + .../account/config/JacksonConfig.scala | 17 + .../config/NativeReflectionConfig.scala | 50 ++ .../nowchess/account/config/RedisConfig.scala | 12 + .../nowchess/account/domain/Challenge.scala | 56 ++ .../account/domain/ChallengeColor.scala | 4 + .../domain/ChallengeColorConverter.scala | 12 + .../account/domain/ChallengeStatus.scala | 4 + .../domain/ChallengeStatusConverter.scala | 12 + .../account/domain/DeclineReason.scala | 4 + .../domain/DeclineReasonConverter.scala | 12 + .../nowchess/account/domain/TimeControl.scala | 7 + .../nowchess/account/domain/UserAccount.scala | 78 ++ .../scala/de/nowchess/account/dto/Dtos.scala | 49 + .../nowchess/account/error/AccountError.scala | 23 + .../account/error/ChallengeError.scala | 25 + .../filter/AlreadyLoggedInFilter.scala | 43 + .../repository/AccountRepository.scala | 98 ++ .../repository/ChallengeRepository.scala | 62 ++ .../account/resource/AccountResource.scala | 202 +++++ .../account/resource/ChallengeResource.scala | 88 ++ .../resource/OfficialChallengeResource.scala | 91 ++ .../account/service/AccountService.scala | 165 ++++ .../account/service/ChallengeService.scala | 197 ++++ .../account/service/EventPublisher.scala | 31 + .../src/test/resources/application.yml | 36 + .../src/test/resources/keys/test-private.pem | 28 + .../src/test/resources/keys/test-public.pem | 9 + .../resource/AccountResourceTest.scala | 107 +++ .../resource/ChallengeResourceTest.scala | 179 ++++ .../main/scala/de/nowchess/api/bot/Bot.scala | 11 - .../scala/de/nowchess/api/dto/ClockDto.scala | 9 + .../api/dto/CreateGameRequestDto.scala | 4 + .../de/nowchess/api/dto/GameStateDto.scala | 2 + .../api/dto/GameWritebackEventDto.scala | 28 + .../api/dto/ImportFenRequestDto.scala | 1 + .../de/nowchess/api/dto/PlayerInfoDto.scala | 4 +- .../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/Participant.scala | 8 - .../de/nowchess/api/game/TimeControl.scala | 6 + .../nowchess/api/grpc/ProtoMapperBase.scala | 107 +++ .../nowchess/api/io/GameContextImport.scala | 3 +- .../de/nowchess/api/player/PlayerInfo.scala | 6 + .../nowchess/api/rules/PostMoveStatus.scala | 9 + .../scala/de/nowchess/api/rules/RuleSet.scala | 12 + .../de/nowchess/api/game/ClockStateTest.scala | 109 +++ .../nowchess/api/game/GameContextTest.scala | 5 +- modules/bot-platform/build.gradle.kts | 115 +++ .../src/main/resources/application.yml | 24 + .../botplatform/config/JacksonConfig.scala | 17 + .../botplatform/config/RedisConfig.scala | 12 + .../botplatform/registry/BotRegistry.scala | 41 + .../resource/BotEventResource.scala | 63 ++ .../de/nowchess/bot/bots/ClassicalBot.scala | 29 - .../de/nowchess/bot/bots/HybridBot.scala | 43 - .../scala/de/nowchess/bot/bots/NNUEBot.scala | 60 -- modules/coordinator/build.gradle.kts | 114 +++ .../src/main/proto/coordinator_service.proto | 60 ++ .../reachability-metadata.json | 27 + .../src/main/resources/application.yml | 52 ++ .../nowchess/coordinator/CoordinatorApp.scala | 7 + .../coordinator/config/BeansProducer.scala | 14 + .../config/CoordinatorConfig.scala | 55 ++ .../coordinator/config/JacksonConfig.scala | 17 + .../config/NativeReflectionConfig.scala | 13 + .../coordinator/dto/InstanceMetadata.scala | 23 + .../grpc/CoordinatorGrpcServer.scala | 101 +++ .../coordinator/grpc/CoreGrpcClient.scala | 63 ++ .../resource/CoordinatorResource.scala | 101 +++ .../coordinator/service/AutoScaler.scala | 135 +++ .../service/CacheEvictionManager.scala | 93 ++ .../coordinator/service/FailoverService.scala | 103 +++ .../coordinator/service/HealthMonitor.scala | 123 +++ .../service/InstanceRegistry.scala | 47 + .../coordinator/service/LoadBalancer.scala | 127 +++ modules/core/build.gradle.kts | 32 +- modules/core/src/main/proto/chess_types.proto | 87 ++ .../src/main/proto/coordinator_service.proto | 58 ++ modules/core/src/main/proto/io_service.proto | 31 + .../core/src/main/proto/rule_service.proto | 38 + .../core/src/main/resources/application.yml | 113 ++- .../core/src/main/resources/keys/public.pem | 9 + .../chess/adapter/RuleSetRestAdapter.scala | 5 +- .../nowchess/chess/client/GameRecordDto.scala | 24 + .../chess/client/IoServiceClient.scala | 11 + .../chess/client/RuleServiceClient.scala | 10 + .../chess/client/StoreServiceClient.scala | 16 + .../de/nowchess/chess/command/Command.scala | 60 -- .../chess/command/CommandInvoker.scala | 67 -- .../nowchess/chess/config/JacksonConfig.scala | 14 +- .../chess/config/NativeReflectionConfig.scala | 5 +- .../nowchess/chess/config/RedisConfig.scala | 12 + .../chess/config/SquareKeyDeserializer.scala | 8 - .../chess/config/SquareKeySerializer.scala | 9 - .../de/nowchess/chess/engine/GameEngine.scala | 355 +++++--- .../grpc/CoordinatorServiceHandler.scala | 66 ++ .../nowchess/chess/grpc/CoreProtoMapper.scala | 161 ++++ .../chess/grpc/IoGrpcClientWrapper.scala | 33 + .../chess/grpc/RuleSetGrpcAdapter.scala | 74 ++ .../chess/json/MoveTypeDeserializer.scala | 19 - .../chess/json/MoveTypeSerializer.scala | 23 - .../chess/json/SquareSerializer.scala | 9 - .../chess/observer/InvalidMoveReason.scala | 5 + .../de/nowchess/chess/observer/Observer.scala | 27 +- .../de/nowchess/chess/redis/C2sMessage.scala | 8 + .../chess/redis/GameRedisPublisher.scala | 79 ++ .../redis/GameRedisSubscriberManager.scala | 149 ++++ .../chess/registry/GameCacheDto.scala | 25 + .../nowchess/chess/registry/GameEntry.scala | 2 + .../chess/registry/GameRegistryImpl.scala | 23 - .../chess/registry/RedisGameRegistry.scala | 204 +++++ .../chess/resource/GameDtoMapper.scala | 73 ++ .../chess/resource/GameResource.scala | 232 ++--- .../service/InstanceHeartbeatService.scala | 206 +++++ .../core/src/test/resources/application.yml | 24 + .../command/CommandInvokerBranchTest.scala | 153 ---- .../chess/command/CommandInvokerTest.scala | 67 -- .../nowchess/chess/command/CommandTest.scala | 23 - .../chess/command/MoveCommandTest.scala | 70 -- .../config/MockRedisDataSourceProducer.scala | 17 + .../chess/engine/GameEngineClockTest.scala | 155 ++++ .../engine/GameEngineDrawOfferTest.scala | 4 +- .../engine/GameEngineIntegrationTest.scala | 40 +- .../chess/engine/GameEngineOutcomesTest.scala | 5 +- .../chess/engine/GameEngineResignTest.scala | 15 +- .../chess/engine/GameEngineWithBotTest.scala | 266 ------ .../chess/json/JsonSerializersTest.scala | 82 +- .../chess/registry/GameRegistryImplTest.scala | 31 +- .../GameResourceIntegrationTest.scala | 97 +- modules/io/build.gradle.kts | 15 + modules/io/src/main/proto/chess_types.proto | 87 ++ modules/io/src/main/proto/io_service.proto | 31 + .../reachability-metadata.json | 27 + modules/io/src/main/resources/application.yml | 7 + .../de/nowchess/io/GameFileService.scala | 13 +- .../scala/de/nowchess/io/fen/FenParser.scala | 32 +- .../io/fen/FenParserCombinators.scala | 7 +- .../nowchess/io/fen/FenParserFastParse.scala | 7 +- .../de/nowchess/io/grpc/IoGrpcService.scala | 60 ++ .../de/nowchess/io/grpc/IoProtoMapper.scala | 161 ++++ .../de/nowchess/io/json/JsonParser.scala | 13 +- .../scala/de/nowchess/io/pgn/PgnParser.scala | 11 +- .../io/service/config/JacksonConfig.scala | 9 +- .../service/dto/CombinedExportResponse.scala | 3 + .../io/service/resource/IoResource.scala | 23 +- modules/io/src/test/resources/application.yml | 5 + .../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 +- .../io/service/resource/IoResourceTest.scala | 2 +- modules/{bot => json}/build.gradle.kts | 47 +- .../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/official-bots/build.gradle.kts | 118 +++ modules/{bot => official-bots}/codekiddy.bin | Bin .../{bot => official-bots}/python/.gitignore | 0 .../{bot => official-bots}/python/DATASETS.md | 0 .../{bot => official-bots}/python/README.md | 0 modules/{bot => official-bots}/python/nnue.py | 0 .../python/requirements.txt | 0 .../python/run_pipeline.bat | 0 .../python/run_pipeline.sh | 0 .../python/src/dataset.py | 0 .../python/src/export.py | 0 .../python/src/generate.py | 0 .../python/src/label.py | 0 .../python/src/lichess_importer.py | 0 .../src/tactical_positions_extractor.py | 0 .../python/src/train.py | 0 .../{bot => official-bots}/python/start.ps1 | 0 .../{bot => official-bots}/python/start.sh | 0 .../weights/nnue_weights_best_snapshot.pt | Bin .../python/weights/nnue_weights_checkpoint.pt | Bin .../python/weights/nnue_weights_v1.pt | Bin .../python/weights/nnue_weights_v10.pt | Bin .../weights/nnue_weights_v10_metadata.json | 0 .../weights/nnue_weights_v1_metadata.json | 0 .../python/weights/nnue_weights_v2.pt | Bin .../weights/nnue_weights_v2_metadata.json | 0 .../python/weights/nnue_weights_v3.pt | Bin .../weights/nnue_weights_v3_metadata.json | 0 .../python/weights/nnue_weights_v4.pt | Bin .../weights/nnue_weights_v4_metadata.json | 0 .../python/weights/nnue_weights_v5.pt | Bin .../weights/nnue_weights_v5_metadata.json | 0 .../python/weights/nnue_weights_v6.pt | Bin .../weights/nnue_weights_v6_metadata.json | 0 .../python/weights/nnue_weights_v7.pt | Bin .../weights/nnue_weights_v7_metadata.json | 0 .../python/weights/nnue_weights_v8.pt | Bin .../weights/nnue_weights_v8_metadata.json | 0 .../python/weights/nnue_weights_v9.pt | Bin .../weights/nnue_weights_v9_metadata.json | 0 .../reachability-metadata.json | 27 + .../src/main/resources/application.yml | 24 + .../src/main/resources/nnue_weights.nbai | Bin .../src/main/scala/de/nowchess/bot/Bot.scala | 6 + .../scala/de/nowchess/bot/BotController.scala | 15 +- .../scala/de/nowchess/bot/BotDifficulty.scala | 0 .../de/nowchess/bot/BotMoveRepetition.scala | 0 .../main/scala/de/nowchess/bot/Config.scala | 0 .../scala/de/nowchess/bot/ai/Evaluation.scala | 0 .../de/nowchess/bot/bots/ClassicalBot.scala | 25 + .../de/nowchess/bot/bots/HybridBot.scala | 39 + .../scala/de/nowchess/bot/bots/NNUEBot.scala | 53 ++ .../bot/bots/classic/EvaluationClassic.scala | 0 .../bot/bots/nnue/EvaluationNNUE.scala | 0 .../de/nowchess/bot/bots/nnue/NNUE.scala | 0 .../nowchess/bot/bots/nnue/NbaiLoader.scala | 0 .../nowchess/bot/bots/nnue/NbaiMigrator.scala | 0 .../de/nowchess/bot/bots/nnue/NbaiModel.scala | 0 .../nowchess/bot/bots/nnue/NbaiWriter.scala | 0 .../nowchess/bot/config/JacksonConfig.scala | 17 + .../de/nowchess/bot/config/RedisConfig.scala | 12 + .../nowchess/bot/logic/AlphaBetaSearch.scala | 0 .../de/nowchess/bot/logic/MoveOrdering.scala | 0 .../bot/logic/TranspositionTable.scala | 0 .../OfficialBotChallengeResource.scala | 33 + .../bot/service/DifficultyMapper.scala | 12 + .../bot/service/OfficialBotService.scala | 109 +++ .../de/nowchess/bot/util/PolyglotBook.scala | 0 .../de/nowchess/bot/util/PolyglotHash.scala | 0 .../de/nowchess/bot/util/ZobristHash.scala | 0 .../de/nowchess/bot/AlphaBetaSearchTest.scala | 0 .../de/nowchess/bot/BotControllerTest.scala | 0 .../de/nowchess/bot/BotDifficultyTest.scala | 0 .../nowchess/bot/BotMoveRepetitionTest.scala | 0 .../de/nowchess/bot/ClassicalBotTest.scala | 18 +- .../de/nowchess/bot/EvaluationTest.scala | 0 .../scala/de/nowchess/bot/HybridBotTest.scala | 23 +- .../de/nowchess/bot/MoveOrderingTest.scala | 0 .../de/nowchess/bot/PolyglotBookTest.scala | 4 +- .../de/nowchess/bot/PolyglotHashTest.scala | 0 .../nowchess/bot/TranspositionTableTest.scala | 0 .../de/nowchess/bot/ZobristHashTest.scala | 0 modules/rule/build.gradle.kts | 23 + modules/rule/src/main/proto/chess_types.proto | 87 ++ .../rule/src/main/proto/rule_service.proto | 38 + .../reachability-metadata.json | 27 + .../rule/src/main/resources/application.yml | 7 + .../nowchess/rules/config/JacksonConfig.scala | 14 +- .../de/nowchess/rules/grpc/ProtoMapper.scala | 160 ++++ .../nowchess/rules/grpc/RuleGrpcService.scala | 93 ++ .../rules/json/SquareDeserializer.scala | 9 - .../rules/json/SquareKeyDeserializer.scala | 8 - .../rules/json/SquareKeySerializer.scala | 9 - .../rules/resource/RuleSetResource.scala | 10 + .../de/nowchess/rules/sets/DefaultRules.scala | 843 +++++++++++------- .../rule/src/test/resources/application.yml | 5 + .../DefaultRulesStateTransitionsTest.scala | 2 +- .../rules/json/JsonSerializersTest.scala | 97 +- modules/security/build.gradle.kts | 65 ++ .../de/nowchess/security/InternalOnly.java | 12 + .../security/InternalAuthFilter.scala | 27 + .../InternalGrpcAuthInterceptor.scala | 32 + .../InternalGrpcSecretClientInterceptor.scala | 28 + .../security/InternalSecretClientFilter.scala | 17 + modules/store/build.gradle.kts | 109 +++ .../reachability-metadata.json | 27 + .../store/src/main/resources/application.yml | 41 + .../nowchess/store/config/JacksonConfig.scala | 17 + .../store/config/NativeReflectionConfig.scala | 13 + .../nowchess/store/config/RedisConfig.scala | 12 + .../de/nowchess/store/domain/GameRecord.scala | 98 ++ .../redis/GameWritebackStreamListener.scala | 29 + .../repository/GameRecordRepository.scala | 46 + .../store/resource/StoreGameResource.scala | 45 + .../store/service/GameWritebackService.scala | 75 ++ modules/ws/build.gradle.kts | 95 ++ modules/ws/src/main/resources/application.yml | 39 + modules/ws/src/main/resources/keys/public.pem | 9 + .../de/nowchess/ws/config/JacksonConfig.scala | 17 + .../ws/config/NativeReflectionConfig.scala | 8 + .../de/nowchess/ws/config/RedisConfig.scala | 12 + .../nowchess/ws/resource/ConnectionMeta.scala | 9 + .../ws/resource/GameWebSocketResource.scala | 69 ++ .../ws/resource/UserWebSocketResource.scala | 53 ++ modules/ws/src/test/resources/application.yml | 11 + settings.gradle.kts | 9 +- 328 files changed, 10672 insertions(+), 2939 deletions(-) create mode 100644 .codesight/routes.md create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/README.md create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/docker-compose.yml create mode 100644 .idea/copilotDiffState.xml create mode 100644 add-a-new-microservice-ethereal-marshmallow.md delete mode 100644 docs/board-api-spec.yaml create mode 100644 jacoco-reporter/application.yml create mode 100644 modules/account/build.gradle.kts 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/resources/application.yml create mode 100644 modules/account/src/main/resources/keys/public.pem 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/config/JacksonConfig.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/config/NativeReflectionConfig.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/config/RedisConfig.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/domain/Challenge.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/domain/ChallengeColor.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/domain/ChallengeColorConverter.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/domain/ChallengeStatus.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/domain/ChallengeStatusConverter.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/domain/DeclineReason.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/domain/DeclineReasonConverter.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/domain/TimeControl.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/domain/UserAccount.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/dto/Dtos.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/account/src/main/scala/de/nowchess/account/filter/AlreadyLoggedInFilter.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/repository/AccountRepository.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/repository/ChallengeRepository.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/resource/AccountResource.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/resource/ChallengeResource.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/resource/OfficialChallengeResource.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/service/AccountService.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/service/ChallengeService.scala create mode 100644 modules/account/src/main/scala/de/nowchess/account/service/EventPublisher.scala create mode 100644 modules/account/src/test/resources/application.yml create mode 100644 modules/account/src/test/resources/keys/test-private.pem create mode 100644 modules/account/src/test/resources/keys/test-public.pem create mode 100644 modules/account/src/test/scala/de/nowchess/account/resource/AccountResourceTest.scala create mode 100644 modules/account/src/test/scala/de/nowchess/account/resource/ChallengeResourceTest.scala delete mode 100644 modules/api/src/main/scala/de/nowchess/api/bot/Bot.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/GameWritebackEventDto.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 delete mode 100644 modules/api/src/main/scala/de/nowchess/api/game/Participant.scala create mode 100644 modules/api/src/main/scala/de/nowchess/api/game/TimeControl.scala create mode 100644 modules/api/src/main/scala/de/nowchess/api/grpc/ProtoMapperBase.scala create mode 100644 modules/api/src/main/scala/de/nowchess/api/rules/PostMoveStatus.scala create mode 100644 modules/api/src/test/scala/de/nowchess/api/game/ClockStateTest.scala create mode 100644 modules/bot-platform/build.gradle.kts create mode 100644 modules/bot-platform/src/main/resources/application.yml create mode 100644 modules/bot-platform/src/main/scala/de/nowchess/botplatform/config/JacksonConfig.scala create mode 100644 modules/bot-platform/src/main/scala/de/nowchess/botplatform/config/RedisConfig.scala create mode 100644 modules/bot-platform/src/main/scala/de/nowchess/botplatform/registry/BotRegistry.scala create mode 100644 modules/bot-platform/src/main/scala/de/nowchess/botplatform/resource/BotEventResource.scala delete mode 100644 modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala delete mode 100644 modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala delete mode 100644 modules/bot/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala create mode 100644 modules/coordinator/build.gradle.kts create mode 100644 modules/coordinator/src/main/proto/coordinator_service.proto create mode 100644 modules/coordinator/src/main/resources/META-INF.native-image.de.nowchess.coordinator/reachability-metadata.json create mode 100644 modules/coordinator/src/main/resources/application.yml create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/CoordinatorApp.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/config/JacksonConfig.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/config/NativeReflectionConfig.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/dto/InstanceMetadata.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoordinatorGrpcServer.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoreGrpcClient.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/resource/CoordinatorResource.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/service/AutoScaler.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/service/CacheEvictionManager.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/service/FailoverService.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/service/HealthMonitor.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/service/InstanceRegistry.scala create mode 100644 modules/coordinator/src/main/scala/de/nowchess/coordinator/service/LoadBalancer.scala create mode 100644 modules/core/src/main/proto/chess_types.proto create mode 100644 modules/core/src/main/proto/coordinator_service.proto create mode 100644 modules/core/src/main/proto/io_service.proto create mode 100644 modules/core/src/main/proto/rule_service.proto create mode 100644 modules/core/src/main/resources/keys/public.pem create mode 100644 modules/core/src/main/scala/de/nowchess/chess/client/GameRecordDto.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/client/StoreServiceClient.scala delete mode 100644 modules/core/src/main/scala/de/nowchess/chess/command/Command.scala delete mode 100644 modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/config/RedisConfig.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 create mode 100644 modules/core/src/main/scala/de/nowchess/chess/grpc/CoordinatorServiceHandler.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/grpc/RuleSetGrpcAdapter.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/redis/C2sMessage.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisPublisher.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisSubscriberManager.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/registry/GameCacheDto.scala delete mode 100644 modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistryImpl.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/registry/RedisGameRegistry.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/resource/GameDtoMapper.scala create mode 100644 modules/core/src/main/scala/de/nowchess/chess/service/InstanceHeartbeatService.scala create mode 100644 modules/core/src/test/resources/application.yml delete mode 100644 modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerBranchTest.scala delete mode 100644 modules/core/src/test/scala/de/nowchess/chess/command/CommandInvokerTest.scala delete mode 100644 modules/core/src/test/scala/de/nowchess/chess/command/CommandTest.scala delete mode 100644 modules/core/src/test/scala/de/nowchess/chess/command/MoveCommandTest.scala create mode 100644 modules/core/src/test/scala/de/nowchess/chess/config/MockRedisDataSourceProducer.scala create mode 100644 modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineClockTest.scala delete mode 100644 modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineWithBotTest.scala create mode 100644 modules/io/src/main/proto/chess_types.proto create mode 100644 modules/io/src/main/proto/io_service.proto create mode 100644 modules/io/src/main/resources/META-INF.native-image.de.nowchess.io/reachability-metadata.json create mode 100644 modules/io/src/main/scala/de/nowchess/io/grpc/IoGrpcService.scala create mode 100644 modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala create mode 100644 modules/io/src/main/scala/de/nowchess/io/service/dto/CombinedExportResponse.scala create mode 100644 modules/io/src/test/resources/application.yml rename modules/{bot => json}/build.gradle.kts (54%) 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/official-bots/build.gradle.kts rename modules/{bot => official-bots}/codekiddy.bin (100%) rename modules/{bot => official-bots}/python/.gitignore (100%) rename modules/{bot => official-bots}/python/DATASETS.md (100%) rename modules/{bot => official-bots}/python/README.md (100%) rename modules/{bot => official-bots}/python/nnue.py (100%) rename modules/{bot => official-bots}/python/requirements.txt (100%) rename modules/{bot => official-bots}/python/run_pipeline.bat (100%) rename modules/{bot => official-bots}/python/run_pipeline.sh (100%) rename modules/{bot => official-bots}/python/src/dataset.py (100%) rename modules/{bot => official-bots}/python/src/export.py (100%) rename modules/{bot => official-bots}/python/src/generate.py (100%) rename modules/{bot => official-bots}/python/src/label.py (100%) rename modules/{bot => official-bots}/python/src/lichess_importer.py (100%) rename modules/{bot => official-bots}/python/src/tactical_positions_extractor.py (100%) rename modules/{bot => official-bots}/python/src/train.py (100%) rename modules/{bot => official-bots}/python/start.ps1 (100%) rename modules/{bot => official-bots}/python/start.sh (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_best_snapshot.pt (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_checkpoint.pt (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v1.pt (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v10.pt (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v10_metadata.json (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v1_metadata.json (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v2.pt (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v2_metadata.json (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v3.pt (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v3_metadata.json (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v4.pt (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v4_metadata.json (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v5.pt (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v5_metadata.json (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v6.pt (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v6_metadata.json (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v7.pt (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v7_metadata.json (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v8.pt (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v8_metadata.json (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v9.pt (100%) rename modules/{bot => official-bots}/python/weights/nnue_weights_v9_metadata.json (100%) create mode 100644 modules/official-bots/src/main/resources/META-INF.native-image.de.nowchess.bot/reachability-metadata.json create mode 100644 modules/official-bots/src/main/resources/application.yml rename modules/{bot => official-bots}/src/main/resources/nnue_weights.nbai (100%) create mode 100644 modules/official-bots/src/main/scala/de/nowchess/bot/Bot.scala rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/BotController.scala (55%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/BotDifficulty.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/Config.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/ai/Evaluation.scala (100%) create mode 100644 modules/official-bots/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala create mode 100644 modules/official-bots/src/main/scala/de/nowchess/bot/bots/HybridBot.scala create mode 100644 modules/official-bots/src/main/scala/de/nowchess/bot/bots/NNUEBot.scala rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/bots/nnue/EvaluationNNUE.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/bots/nnue/NNUE.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/bots/nnue/NbaiLoader.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/bots/nnue/NbaiMigrator.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/bots/nnue/NbaiModel.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/bots/nnue/NbaiWriter.scala (100%) create mode 100644 modules/official-bots/src/main/scala/de/nowchess/bot/config/JacksonConfig.scala create mode 100644 modules/official-bots/src/main/scala/de/nowchess/bot/config/RedisConfig.scala rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/logic/AlphaBetaSearch.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/logic/MoveOrdering.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/logic/TranspositionTable.scala (100%) create mode 100644 modules/official-bots/src/main/scala/de/nowchess/bot/resource/OfficialBotChallengeResource.scala create mode 100644 modules/official-bots/src/main/scala/de/nowchess/bot/service/DifficultyMapper.scala create mode 100644 modules/official-bots/src/main/scala/de/nowchess/bot/service/OfficialBotService.scala rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/util/PolyglotHash.scala (100%) rename modules/{bot => official-bots}/src/main/scala/de/nowchess/bot/util/ZobristHash.scala (100%) rename modules/{bot => official-bots}/src/test/scala/de/nowchess/bot/AlphaBetaSearchTest.scala (100%) rename modules/{bot => official-bots}/src/test/scala/de/nowchess/bot/BotControllerTest.scala (100%) rename modules/{bot => official-bots}/src/test/scala/de/nowchess/bot/BotDifficultyTest.scala (100%) rename modules/{bot => official-bots}/src/test/scala/de/nowchess/bot/BotMoveRepetitionTest.scala (100%) rename modules/{bot => official-bots}/src/test/scala/de/nowchess/bot/ClassicalBotTest.scala (89%) rename modules/{bot => official-bots}/src/test/scala/de/nowchess/bot/EvaluationTest.scala (100%) rename modules/{bot => official-bots}/src/test/scala/de/nowchess/bot/HybridBotTest.scala (91%) rename modules/{bot => official-bots}/src/test/scala/de/nowchess/bot/MoveOrderingTest.scala (100%) rename modules/{bot => official-bots}/src/test/scala/de/nowchess/bot/PolyglotBookTest.scala (98%) rename modules/{bot => official-bots}/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala (100%) rename modules/{bot => official-bots}/src/test/scala/de/nowchess/bot/TranspositionTableTest.scala (100%) rename modules/{bot => official-bots}/src/test/scala/de/nowchess/bot/ZobristHashTest.scala (100%) create mode 100644 modules/rule/src/main/proto/chess_types.proto create mode 100644 modules/rule/src/main/proto/rule_service.proto create mode 100644 modules/rule/src/main/resources/META-INF.native-image.de.nowchess.rule/reachability-metadata.json create mode 100644 modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala create mode 100644 modules/rule/src/main/scala/de/nowchess/rules/grpc/RuleGrpcService.scala 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 create mode 100644 modules/rule/src/test/resources/application.yml create mode 100644 modules/security/build.gradle.kts create mode 100644 modules/security/src/main/java/de/nowchess/security/InternalOnly.java create mode 100644 modules/security/src/main/scala/de/nowchess/security/InternalAuthFilter.scala create mode 100644 modules/security/src/main/scala/de/nowchess/security/InternalGrpcAuthInterceptor.scala create mode 100644 modules/security/src/main/scala/de/nowchess/security/InternalGrpcSecretClientInterceptor.scala create mode 100644 modules/security/src/main/scala/de/nowchess/security/InternalSecretClientFilter.scala create mode 100644 modules/store/build.gradle.kts create mode 100644 modules/store/src/main/resources/META-INF.native-image.de.nowchess.store/reachability-metadata.json create mode 100644 modules/store/src/main/resources/application.yml create mode 100644 modules/store/src/main/scala/de/nowchess/store/config/JacksonConfig.scala create mode 100644 modules/store/src/main/scala/de/nowchess/store/config/NativeReflectionConfig.scala create mode 100644 modules/store/src/main/scala/de/nowchess/store/config/RedisConfig.scala create mode 100644 modules/store/src/main/scala/de/nowchess/store/domain/GameRecord.scala create mode 100644 modules/store/src/main/scala/de/nowchess/store/redis/GameWritebackStreamListener.scala create mode 100644 modules/store/src/main/scala/de/nowchess/store/repository/GameRecordRepository.scala create mode 100644 modules/store/src/main/scala/de/nowchess/store/resource/StoreGameResource.scala create mode 100644 modules/store/src/main/scala/de/nowchess/store/service/GameWritebackService.scala create mode 100644 modules/ws/build.gradle.kts create mode 100644 modules/ws/src/main/resources/application.yml create mode 100644 modules/ws/src/main/resources/keys/public.pem create mode 100644 modules/ws/src/main/scala/de/nowchess/ws/config/JacksonConfig.scala create mode 100644 modules/ws/src/main/scala/de/nowchess/ws/config/NativeReflectionConfig.scala create mode 100644 modules/ws/src/main/scala/de/nowchess/ws/config/RedisConfig.scala create mode 100644 modules/ws/src/main/scala/de/nowchess/ws/resource/ConnectionMeta.scala create mode 100644 modules/ws/src/main/scala/de/nowchess/ws/resource/GameWebSocketResource.scala create mode 100644 modules/ws/src/main/scala/de/nowchess/ws/resource/UserWebSocketResource.scala create mode 100644 modules/ws/src/test/resources/application.yml diff --git a/.codesight/CODESIGHT.md b/.codesight/CODESIGHT.md index e84c141..1b80df2 100644 --- a/.codesight/CODESIGHT.md +++ b/.codesight/CODESIGHT.md @@ -2,11 +2,58 @@ > **Stack:** raw-http | none | unknown | scala -> 0 routes | 0 models | 0 components | 63 lib files | 1 env vars | 1 middleware +> 0 routes + 40 rpc | 0 models | 0 components | 146 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.** --- +# Routes + +## gRPC + +- `/CoordinatorService/BatchResubscribeGames` (BatchResubscribeRequest) → BatchResubscribeResponse +- `/CoordinatorService/UnsubscribeGames` (UnsubscribeGamesRequest) → UnsubscribeGamesResponse +- `/CoordinatorService/EvictGames` (EvictGamesRequest) → EvictGamesResponse +- `/CoordinatorService/DrainInstance` (DrainInstanceRequest) → DrainInstanceResponse +- `/CoordinatorService/BatchResubscribeGames` (BatchResubscribeRequest) → BatchResubscribeResponse +- `/CoordinatorService/UnsubscribeGames` (UnsubscribeGamesRequest) → UnsubscribeGamesResponse +- `/CoordinatorService/EvictGames` (EvictGamesRequest) → EvictGamesResponse +- `/CoordinatorService/DrainInstance` (DrainInstanceRequest) → DrainInstanceResponse +- `/IoService/ImportFen` (ProtoImportFenRequest) → ProtoGameContext +- `/IoService/ImportPgn` (ProtoImportPgnRequest) → ProtoGameContext +- `/IoService/ExportCombined` (ProtoGameContext) → ProtoCombinedExport +- `/IoService/ExportFen` (ProtoGameContext) → ProtoStringResult +- `/IoService/ExportPgn` (ProtoGameContext) → ProtoStringResult +- `/RuleService/CandidateMoves` (ProtoSquareRequest) → ProtoMoveList +- `/RuleService/LegalMoves` (ProtoSquareRequest) → ProtoMoveList +- `/RuleService/AllLegalMoves` (ProtoGameContext) → ProtoMoveList +- `/RuleService/IsCheck` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsCheckmate` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsStalemate` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsInsufficientMaterial` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsFiftyMoveRule` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsThreefoldRepetition` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/ApplyMove` (ProtoMoveRequest) → ProtoGameContext +- `/RuleService/PostMoveStatus` (ProtoGameContext) → ProtoPostMoveStatus +- `/IoService/ImportFen` (ProtoImportFenRequest) → ProtoGameContext +- `/IoService/ImportPgn` (ProtoImportPgnRequest) → ProtoGameContext +- `/IoService/ExportCombined` (ProtoGameContext) → ProtoCombinedExport +- `/IoService/ExportFen` (ProtoGameContext) → ProtoStringResult +- `/IoService/ExportPgn` (ProtoGameContext) → ProtoStringResult +- `/RuleService/CandidateMoves` (ProtoSquareRequest) → ProtoMoveList +- `/RuleService/LegalMoves` (ProtoSquareRequest) → ProtoMoveList +- `/RuleService/AllLegalMoves` (ProtoGameContext) → ProtoMoveList +- `/RuleService/IsCheck` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsCheckmate` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsStalemate` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsInsufficientMaterial` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsFiftyMoveRule` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsThreefoldRepetition` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/ApplyMove` (ProtoMoveRequest) → ProtoGameContext +- `/RuleService/PostMoveStatus` (ProtoGameContext) → ProtoPostMoveStatus + +--- + # Libraries - `jacoco-reporter/scoverage_coverage_gaps.py` @@ -25,6 +72,74 @@ - function main: () -> None - class TestCase - _...2 more_ +- `modules/account/src/main/scala/de/nowchess/account/client/CoreGameClient.scala` — class CoreGameClient, function createGame +- `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/Challenge.scala` + - class Challenge + - function gameIdOpt + - 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/domain/UserAccount.scala` + - class UserAccount + - function getBotAccounts + - class BotAccount + - class OfficialBotAccount +- `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/filter/AlreadyLoggedInFilter.scala` — class AlreadyLoggedInFilter +- `modules/account/src/main/scala/de/nowchess/account/repository/AccountRepository.scala` + - class UserAccountRepository + - function findByUsername + - function findById + - function persist + - function findByEmail + - function findAll + - _...12 more_ +- `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 + - function banUser + - _...10 more_ +- `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 + - function createBotAccount + - _...11 more_ +- `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 +169,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 @@ -62,11 +186,21 @@ - function withEnPassantSquare - function withHalfMoveClock - _...4 more_ +- `modules/api/src/main/scala/de/nowchess/api/io/GameContextExport.scala` — class GameContextExport, function exportGameContext +- `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — class GameContextImport, function importGameContext - `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — class PlayerId, function apply - `modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala` - class ApiResponse - function error - function totalPages +- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` + - class RuleSet + - function candidateMoves + - function legalMoves + - function allLegalMoves + - function isCheck + - function isCheckmate + - _...6 more_ - `modules/bot/python/nnue.py` - function get_weights_dir: () - function get_data_dir: () @@ -171,30 +305,136 @@ - class ZobristHash - function hash - function nextHash -- `modules/core/src/main/scala/de/nowchess/chess/command/Command.scala` - - class Command - - function execute - - function undo - - function description - - class MoveResult -- `modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala` - - class CommandInvoker - - function execute - - function undo - - function redo - - function history - - function getCurrentIndex - - _...3 more_ +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/CoordinatorApp.scala` — class CoordinatorApp +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala` + - class BeansProducer + - function redissonClient + - function kubernetesClient +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala` + - class CoordinatorConfig + - function maxGamesPerCore + - function maxDeviationPercent + - function rebalanceInterval + - function rebalanceMinInterval + - function heartbeatTtl + - _...11 more_ +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoordinatorGrpcServer.scala` — class CoordinatorGrpcServer +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoreGrpcClient.scala` + - class CoreGrpcClient + - function shutdown + - function batchResubscribeGames + - function unsubscribeGames + - function evictGames +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/resource/CoordinatorResource.scala` + - class CoordinatorResource + - function listInstances + - function getMetrics + - function triggerRebalance + - function triggerFailover + - function triggerScaleUp + - _...1 more_ +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/AutoScaler.scala` + - class AutoScaler + - function checkAndScale + - function scaleUp + - function scaleDown +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/CacheEvictionManager.scala` + - class CacheEvictionManager + - function setRedisPrefix + - function evictStaleGames +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/FailoverService.scala` + - class FailoverService + - function setRedisPrefix + - function onInstanceStreamDropped +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/HealthMonitor.scala` + - class HealthMonitor + - function setRedisPrefix + - function checkInstanceHealth + - function watchK8sPods +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/InstanceRegistry.scala` + - class InstanceRegistry + - function setRedisPrefix + - function getInstance + - function getAllInstances + - function updateInstanceFromRedis + - function markInstanceDead + - _...1 more_ +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/LoadBalancer.scala` + - class LoadBalancer + - function setRedisPrefix + - function shouldRebalance + - function rebalance +- `modules/core/src/main/scala/de/nowchess/chess/adapter/RuleSetRestAdapter.scala` + - class RuleSetRestAdapter + - function candidateMoves + - function legalMoves + - function allLegalMoves + - function isCheck + - function isCheckmate + - _...5 more_ +- `modules/core/src/main/scala/de/nowchess/chess/client/IoServiceClient.scala` + - class IoServiceClient + - function importFen + - function importPgn + - function exportFen + - function exportPgn + - function exportCombined +- `modules/core/src/main/scala/de/nowchess/chess/client/RuleServiceClient.scala` + - class RuleServiceClient + - function candidateMoves + - function legalMoves + - function allLegalMoves + - function isCheck + - function isCheckmate + - _...6 more_ +- `modules/core/src/main/scala/de/nowchess/chess/client/StoreServiceClient.scala` — class StoreServiceClient, function getGame - `modules/core/src/main/scala/de/nowchess/chess/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/core/src/main/scala/de/nowchess/chess/config/RedisConfig.scala` — class RedisConfig +- `modules/core/src/main/scala/de/nowchess/chess/config/RedissonProducer.scala` + - class RedissonProducer + - function produceRedissonClient + - function shutdown - `modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala` — class Parser, function parseMove - `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala` - class GameEngine - function board - function turn - function context - - function canUndo - - function canRedo - - _...11 more_ + - function pendingDrawOfferBy + - function currentClockState + - _...22 more_ +- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiException.scala` + - class ApiException + - class GameNotFoundException + - class BadRequestException +- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiExceptionMapper.scala` — class ApiExceptionMapper, function toResponse +- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoordinatorServiceHandler.scala` — class CoordinatorServiceHandler +- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala` + - class CoreProtoMapper + - function toProtoColor + - function fromProtoColor + - function toProtoPieceType + - function fromProtoPieceType + - function toProtoMoveKind + - _...9 more_ +- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala` + - class IoGrpcClientWrapper + - function exportCombined + - function importFen + - function importPgn + - function exportFen + - function exportPgn +- `modules/core/src/main/scala/de/nowchess/chess/grpc/RuleSetGrpcAdapter.scala` + - class RuleSetGrpcAdapter + - function candidateMoves + - function legalMoves + - function allLegalMoves + - function isCheck + - function isCheckmate + - _...5 more_ - `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` - function context - class Observer @@ -203,28 +443,52 @@ - function subscribe - function unsubscribe - _...1 more_ +- `modules/core/src/main/scala/de/nowchess/chess/redis/C2sMessage.scala` — class C2sMessage +- `modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisPublisher.scala` — class GameRedisPublisher, function onGameEvent +- `modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisSubscriberManager.scala` + - class GameRedisSubscriberManager + - function subscribeGame + - function onMessage + - function unsubscribeGame + - function batchResubscribeGames + - function unsubscribeGames + - _...3 more_ - `modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistry.scala` - class GameRegistry - function store - function get - function update - function generateId -- `modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistryImpl.scala` - - class GameRegistryImpl +- `modules/core/src/main/scala/de/nowchess/chess/registry/RedisGameRegistry.scala` + - class RedisGameRegistry + - function generateId - function store - function get - function update - - function generateId +- `modules/core/src/main/scala/de/nowchess/chess/resource/GameDtoMapper.scala` + - class GameDtoMapper + - function statusOf + - function moveToUci + - function toPlayerDto + - function toClockDto + - function toGameStateDto + - _...1 more_ - `modules/core/src/main/scala/de/nowchess/chess/resource/GameResource.scala` + - class GameResource - function onGameEvent - function createGame - function getGame - - function streamGame - - function onGameEvent - function resignGame + - function makeMove - _...9 more_ -- `modules/io/src/main/scala/de/nowchess/io/GameContextExport.scala` — class GameContextExport, function exportGameContext -- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala` — class GameContextImport, function importGameContext +- `modules/core/src/main/scala/de/nowchess/chess/service/InstanceHeartbeatService.scala` + - class InstanceHeartbeatService + - function onStart + - function onShutdown + - function setRedisPrefix + - function setSubscriptionCount + - function setLocalCacheSize + - _...2 more_ - `modules/io/src/main/scala/de/nowchess/io/GameFileService.scala` - class GameFileService - function saveGameToFile @@ -253,6 +517,15 @@ - function parseBoard - function importGameContext - `modules/io/src/main/scala/de/nowchess/io/fen/FenParserSupport.scala` — function buildSquares +- `modules/io/src/main/scala/de/nowchess/io/grpc/IoGrpcService.scala` — class IoGrpcService +- `modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala` + - class IoProtoMapper + - function toProtoColor + - function fromProtoColor + - function toProtoPieceType + - function fromProtoPieceType + - function toProtoMoveKind + - _...9 more_ - `modules/io/src/main/scala/de/nowchess/io/json/JsonExporter.scala` — class JsonExporter, function exportGameContext - `modules/io/src/main/scala/de/nowchess/io/json/JsonParser.scala` — class JsonParser, function importGameContext - `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala` @@ -265,20 +538,76 @@ - function importGameContext - function parsePgn - function parseAlgebraicMove -- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala` - - class RuleSet +- `modules/io/src/main/scala/de/nowchess/io/service/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/io/src/main/scala/de/nowchess/io/service/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/io/src/main/scala/de/nowchess/io/service/resource/IoResource.scala` + - class IoResource + - function importFen + - function importPgn + - function exportFen + - function exportPgn + - function exportCombined +- `modules/json/src/main/scala/de/nowchess/json/ChessJacksonModule.scala` — class ChessJacksonModule +- `modules/json/src/main/scala/de/nowchess/json/GameResultDeserializer.scala` — class GameResultDeserializer +- `modules/json/src/main/scala/de/nowchess/json/GameResultSerializer.scala` — class GameResultSerializer +- `modules/json/src/main/scala/de/nowchess/json/MoveTypeDeserializer.scala` — class MoveTypeDeserializer +- `modules/json/src/main/scala/de/nowchess/json/MoveTypeSerializer.scala` — class MoveTypeSerializer +- `modules/json/src/main/scala/de/nowchess/json/SquareDeserializer.scala` — class SquareDeserializer +- `modules/json/src/main/scala/de/nowchess/json/SquareKeyDeserializer.scala` — class SquareKeyDeserializer +- `modules/json/src/main/scala/de/nowchess/json/SquareKeySerializer.scala` — class SquareKeySerializer +- `modules/json/src/main/scala/de/nowchess/json/SquareSerializer.scala` — class SquareSerializer +- `modules/rule/src/main/scala/de/nowchess/rules/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/rule/src/main/scala/de/nowchess/rules/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala` + - class ProtoMapper + - function toProtoColor + - function fromProtoColor + - function toProtoPieceType + - function fromProtoPieceType + - function toProtoMoveKind + - _...9 more_ +- `modules/rule/src/main/scala/de/nowchess/rules/grpc/RuleGrpcService.scala` — class RuleGrpcService +- `modules/rule/src/main/scala/de/nowchess/rules/resource/RuleSetResource.scala` + - class RuleSetResource - function candidateMoves - function legalMoves - function allLegalMoves - function isCheck - function isCheckmate - - _...5 more_ -- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` - - class DefaultRules - - function positionOf - - function loop - - function toMoves - - function loop + - _...6 more_ +- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — class DefaultRules, function positionOf +- `modules/store/src/main/scala/de/nowchess/store/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/store/src/main/scala/de/nowchess/store/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/store/src/main/scala/de/nowchess/store/config/RedisConfig.scala` — class RedisConfig +- `modules/store/src/main/scala/de/nowchess/store/config/RedissonProducer.scala` + - class RedissonProducer + - function redissonClient + - function close +- `modules/store/src/main/scala/de/nowchess/store/domain/GameRecord.scala` — class GameRecord +- `modules/store/src/main/scala/de/nowchess/store/redis/GameWritebackStreamListener.scala` + - class GameWritebackStreamListener + - function startListening + - function onMessage +- `modules/store/src/main/scala/de/nowchess/store/repository/GameRecordRepository.scala` + - class GameRecordRepository + - function findByGameId + - function persist + - function merge +- `modules/store/src/main/scala/de/nowchess/store/resource/StoreGameResource.scala` — class StoreGameResource, function getGame +- `modules/store/src/main/scala/de/nowchess/store/service/GameWritebackService.scala` — class GameWritebackService, function writeBack +- `modules/ws/src/main/scala/de/nowchess/ws/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/ws/src/main/scala/de/nowchess/ws/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/ws/src/main/scala/de/nowchess/ws/config/RedisConfig.scala` — class RedisConfig +- `modules/ws/src/main/scala/de/nowchess/ws/config/RedissonProducer.scala` + - class RedissonProducer + - function produceRedissonClient + - function shutdown +- `modules/ws/src/main/scala/de/nowchess/ws/resource/GameWebSocketResource.scala` + - class GameWebSocketResource + - function onOpen + - function onMessage + - function onTextMessage + - function onClose --- @@ -301,39 +630,39 @@ ## Most Imported Files (change these carefully) -- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **64** files -- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **44** files -- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **40** files -- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **35** files -- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **19** files -- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **18** files -- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — imported by **17** files -- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **17** files -- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala` — imported by **11** files -- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **10** files -- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **9** files -- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **7** files -- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala` — imported by **7** files +- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **76** files +- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **57** files +- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **55** files +- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **47** files +- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **28** 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/Piece.scala` — imported by **20** files +- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **18** files +- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **18** files +- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` — imported by **14** files +- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **13** files +- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **11** files +- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **9** files +- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — imported by **9** files +- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **9** files +- `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — imported by **8** files +- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala` — imported by **7** files +- `modules/api/src/main/scala/de/nowchess/api/game/GameMode.scala` — imported by **6** files - `modules/api/src/main/scala/de/nowchess/api/bot/Bot.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/player/PlayerInfo.scala` — imported by **5** files -- `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala` — imported by **5** files -- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **4** files -- `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala` — imported by **4** files -- `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala` — imported by **4** 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/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala`, `modules/bot/src/main/scala/de/nowchess/bot/ai/Evaluation.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala` +59 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/test/scala/de/nowchess/api/board/BoardTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala` +39 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/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/api/src/test/scala/de/nowchess/api/move/MoveTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala` +35 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` +30 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` +14 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` +13 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` +12 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` +12 more -- `modules/rule/src/main/scala/de/nowchess/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` +6 more -- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` ← `modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/resource/GameResource.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala` +5 more +- `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` +71 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` +52 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` +50 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` +42 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` +23 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/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` +15 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/grpc/CoreProtoMapper.scala`, `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` +13 more +- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.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/grpc/CoreProtoMapper.scala`, `modules/core/src/main/scala/de/nowchess/chess/resource/GameDtoMapper.scala` +13 more --- diff --git a/.codesight/graph.md b/.codesight/graph.md index 57ba7eb..e6975ab 100644 --- a/.codesight/graph.md +++ b/.codesight/graph.md @@ -2,36 +2,36 @@ ## Most Imported Files (change these carefully) -- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **64** files -- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **44** files -- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **40** files -- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **35** files -- `modules/api/src/main/scala/de/nowchess/api/board/Board.scala` — imported by **19** files -- `modules/api/src/main/scala/de/nowchess/api/board/Piece.scala` — imported by **18** files -- `modules/api/src/main/scala/de/nowchess/api/board/PieceType.scala` — imported by **17** files -- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **17** files -- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala` — imported by **11** files -- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **10** files -- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **9** files -- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **7** files -- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala` — imported by **7** files +- `modules/api/src/main/scala/de/nowchess/api/game/GameContext.scala` — imported by **76** files +- `modules/api/src/main/scala/de/nowchess/api/board/Square.scala` — imported by **57** files +- `modules/api/src/main/scala/de/nowchess/api/move/Move.scala` — imported by **55** files +- `modules/api/src/main/scala/de/nowchess/api/board/Color.scala` — imported by **47** files +- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — imported by **28** 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/Piece.scala` — imported by **20** files +- `modules/api/src/main/scala/de/nowchess/api/game/DrawReason.scala` — imported by **18** files +- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **18** files +- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` — imported by **14** files +- `modules/api/src/main/scala/de/nowchess/api/board/CastlingRights.scala` — imported by **13** files +- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` — imported by **11** files +- `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — imported by **9** files +- `modules/api/src/main/scala/de/nowchess/api/error/GameError.scala` — imported by **9** files +- `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` — imported by **9** files +- `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — imported by **8** files +- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala` — imported by **7** files +- `modules/api/src/main/scala/de/nowchess/api/game/GameMode.scala` — imported by **6** files - `modules/api/src/main/scala/de/nowchess/api/bot/Bot.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/player/PlayerInfo.scala` — imported by **5** files -- `modules/bot/src/main/scala/de/nowchess/bot/util/PolyglotBook.scala` — imported by **5** files -- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.scala` — imported by **4** files -- `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala` — imported by **4** files -- `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala` — imported by **4** 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/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala`, `modules/bot/src/main/scala/de/nowchess/bot/ai/Evaluation.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/ClassicalBot.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/HybridBot.scala` +59 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/test/scala/de/nowchess/api/board/BoardTest.scala`, `modules/api/src/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/BotMoveRepetition.scala` +39 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/test/scala/de/nowchess/api/game/GameContextTest.scala`, `modules/api/src/test/scala/de/nowchess/api/move/MoveTest.scala`, `modules/bot/src/main/scala/de/nowchess/bot/bots/classic/EvaluationClassic.scala` +35 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` +30 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` +14 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` +13 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` +12 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` +12 more -- `modules/rule/src/main/scala/de/nowchess/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` +6 more -- `modules/io/src/main/scala/de/nowchess/io/fen/FenParser.scala` ← `modules/bot/src/test/scala/de/nowchess/bot/PolyglotHashTest.scala`, `modules/core/src/main/scala/de/nowchess/chess/resource/GameResource.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/EngineTestHelpers.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala`, `modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineNotationTest.scala` +5 more +- `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` +71 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` +52 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` +50 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` +42 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` +23 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/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` +15 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/grpc/CoreProtoMapper.scala`, `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` +13 more +- `modules/api/src/main/scala/de/nowchess/api/game/GameResult.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/grpc/CoreProtoMapper.scala`, `modules/core/src/main/scala/de/nowchess/chess/resource/GameDtoMapper.scala` +13 more diff --git a/.codesight/libs.md b/.codesight/libs.md index c7da5a2..f8a9e41 100644 --- a/.codesight/libs.md +++ b/.codesight/libs.md @@ -16,6 +16,74 @@ - function main: () -> None - class TestCase - _...2 more_ +- `modules/account/src/main/scala/de/nowchess/account/client/CoreGameClient.scala` — class CoreGameClient, function createGame +- `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/Challenge.scala` + - class Challenge + - function gameIdOpt + - 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/domain/UserAccount.scala` + - class UserAccount + - function getBotAccounts + - class BotAccount + - class OfficialBotAccount +- `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/filter/AlreadyLoggedInFilter.scala` — class AlreadyLoggedInFilter +- `modules/account/src/main/scala/de/nowchess/account/repository/AccountRepository.scala` + - class UserAccountRepository + - function findByUsername + - function findById + - function persist + - function findByEmail + - function findAll + - _...12 more_ +- `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 + - function banUser + - _...10 more_ +- `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 + - function createBotAccount + - _...11 more_ +- `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 +113,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 @@ -53,11 +130,21 @@ - function withEnPassantSquare - function withHalfMoveClock - _...4 more_ +- `modules/api/src/main/scala/de/nowchess/api/io/GameContextExport.scala` — class GameContextExport, function exportGameContext +- `modules/api/src/main/scala/de/nowchess/api/io/GameContextImport.scala` — class GameContextImport, function importGameContext - `modules/api/src/main/scala/de/nowchess/api/player/PlayerInfo.scala` — class PlayerId, function apply - `modules/api/src/main/scala/de/nowchess/api/response/ApiResponse.scala` - class ApiResponse - function error - function totalPages +- `modules/api/src/main/scala/de/nowchess/api/rules/RuleSet.scala` + - class RuleSet + - function candidateMoves + - function legalMoves + - function allLegalMoves + - function isCheck + - function isCheckmate + - _...6 more_ - `modules/bot/python/nnue.py` - function get_weights_dir: () - function get_data_dir: () @@ -162,30 +249,136 @@ - class ZobristHash - function hash - function nextHash -- `modules/core/src/main/scala/de/nowchess/chess/command/Command.scala` - - class Command - - function execute - - function undo - - function description - - class MoveResult -- `modules/core/src/main/scala/de/nowchess/chess/command/CommandInvoker.scala` - - class CommandInvoker - - function execute - - function undo - - function redo - - function history - - function getCurrentIndex - - _...3 more_ +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/CoordinatorApp.scala` — class CoordinatorApp +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/BeansProducer.scala` + - class BeansProducer + - function redissonClient + - function kubernetesClient +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/CoordinatorConfig.scala` + - class CoordinatorConfig + - function maxGamesPerCore + - function maxDeviationPercent + - function rebalanceInterval + - function rebalanceMinInterval + - function heartbeatTtl + - _...11 more_ +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoordinatorGrpcServer.scala` — class CoordinatorGrpcServer +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/grpc/CoreGrpcClient.scala` + - class CoreGrpcClient + - function shutdown + - function batchResubscribeGames + - function unsubscribeGames + - function evictGames +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/resource/CoordinatorResource.scala` + - class CoordinatorResource + - function listInstances + - function getMetrics + - function triggerRebalance + - function triggerFailover + - function triggerScaleUp + - _...1 more_ +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/AutoScaler.scala` + - class AutoScaler + - function checkAndScale + - function scaleUp + - function scaleDown +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/CacheEvictionManager.scala` + - class CacheEvictionManager + - function setRedisPrefix + - function evictStaleGames +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/FailoverService.scala` + - class FailoverService + - function setRedisPrefix + - function onInstanceStreamDropped +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/HealthMonitor.scala` + - class HealthMonitor + - function setRedisPrefix + - function checkInstanceHealth + - function watchK8sPods +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/InstanceRegistry.scala` + - class InstanceRegistry + - function setRedisPrefix + - function getInstance + - function getAllInstances + - function updateInstanceFromRedis + - function markInstanceDead + - _...1 more_ +- `modules/coordinator/src/main/scala/de/nowchess/coordinator/service/LoadBalancer.scala` + - class LoadBalancer + - function setRedisPrefix + - function shouldRebalance + - function rebalance +- `modules/core/src/main/scala/de/nowchess/chess/adapter/RuleSetRestAdapter.scala` + - class RuleSetRestAdapter + - function candidateMoves + - function legalMoves + - function allLegalMoves + - function isCheck + - function isCheckmate + - _...5 more_ +- `modules/core/src/main/scala/de/nowchess/chess/client/IoServiceClient.scala` + - class IoServiceClient + - function importFen + - function importPgn + - function exportFen + - function exportPgn + - function exportCombined +- `modules/core/src/main/scala/de/nowchess/chess/client/RuleServiceClient.scala` + - class RuleServiceClient + - function candidateMoves + - function legalMoves + - function allLegalMoves + - function isCheck + - function isCheckmate + - _...6 more_ +- `modules/core/src/main/scala/de/nowchess/chess/client/StoreServiceClient.scala` — class StoreServiceClient, function getGame - `modules/core/src/main/scala/de/nowchess/chess/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/core/src/main/scala/de/nowchess/chess/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/core/src/main/scala/de/nowchess/chess/config/RedisConfig.scala` — class RedisConfig +- `modules/core/src/main/scala/de/nowchess/chess/config/RedissonProducer.scala` + - class RedissonProducer + - function produceRedissonClient + - function shutdown - `modules/core/src/main/scala/de/nowchess/chess/controller/Parser.scala` — class Parser, function parseMove - `modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala` - class GameEngine - function board - function turn - function context - - function canUndo - - function canRedo - - _...11 more_ + - function pendingDrawOfferBy + - function currentClockState + - _...22 more_ +- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiException.scala` + - class ApiException + - class GameNotFoundException + - class BadRequestException +- `modules/core/src/main/scala/de/nowchess/chess/exception/ApiExceptionMapper.scala` — class ApiExceptionMapper, function toResponse +- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoordinatorServiceHandler.scala` — class CoordinatorServiceHandler +- `modules/core/src/main/scala/de/nowchess/chess/grpc/CoreProtoMapper.scala` + - class CoreProtoMapper + - function toProtoColor + - function fromProtoColor + - function toProtoPieceType + - function fromProtoPieceType + - function toProtoMoveKind + - _...9 more_ +- `modules/core/src/main/scala/de/nowchess/chess/grpc/IoGrpcClientWrapper.scala` + - class IoGrpcClientWrapper + - function exportCombined + - function importFen + - function importPgn + - function exportFen + - function exportPgn +- `modules/core/src/main/scala/de/nowchess/chess/grpc/RuleSetGrpcAdapter.scala` + - class RuleSetGrpcAdapter + - function candidateMoves + - function legalMoves + - function allLegalMoves + - function isCheck + - function isCheckmate + - _...5 more_ - `modules/core/src/main/scala/de/nowchess/chess/observer/Observer.scala` - function context - class Observer @@ -194,28 +387,52 @@ - function subscribe - function unsubscribe - _...1 more_ +- `modules/core/src/main/scala/de/nowchess/chess/redis/C2sMessage.scala` — class C2sMessage +- `modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisPublisher.scala` — class GameRedisPublisher, function onGameEvent +- `modules/core/src/main/scala/de/nowchess/chess/redis/GameRedisSubscriberManager.scala` + - class GameRedisSubscriberManager + - function subscribeGame + - function onMessage + - function unsubscribeGame + - function batchResubscribeGames + - function unsubscribeGames + - _...3 more_ - `modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistry.scala` - class GameRegistry - function store - function get - function update - function generateId -- `modules/core/src/main/scala/de/nowchess/chess/registry/GameRegistryImpl.scala` - - class GameRegistryImpl +- `modules/core/src/main/scala/de/nowchess/chess/registry/RedisGameRegistry.scala` + - class RedisGameRegistry + - function generateId - function store - function get - function update - - function generateId +- `modules/core/src/main/scala/de/nowchess/chess/resource/GameDtoMapper.scala` + - class GameDtoMapper + - function statusOf + - function moveToUci + - function toPlayerDto + - function toClockDto + - function toGameStateDto + - _...1 more_ - `modules/core/src/main/scala/de/nowchess/chess/resource/GameResource.scala` + - class GameResource - function onGameEvent - function createGame - function getGame - - function streamGame - - function onGameEvent - function resignGame + - function makeMove - _...9 more_ -- `modules/io/src/main/scala/de/nowchess/io/GameContextExport.scala` — class GameContextExport, function exportGameContext -- `modules/io/src/main/scala/de/nowchess/io/GameContextImport.scala` — class GameContextImport, function importGameContext +- `modules/core/src/main/scala/de/nowchess/chess/service/InstanceHeartbeatService.scala` + - class InstanceHeartbeatService + - function onStart + - function onShutdown + - function setRedisPrefix + - function setSubscriptionCount + - function setLocalCacheSize + - _...2 more_ - `modules/io/src/main/scala/de/nowchess/io/GameFileService.scala` - class GameFileService - function saveGameToFile @@ -244,6 +461,15 @@ - function parseBoard - function importGameContext - `modules/io/src/main/scala/de/nowchess/io/fen/FenParserSupport.scala` — function buildSquares +- `modules/io/src/main/scala/de/nowchess/io/grpc/IoGrpcService.scala` — class IoGrpcService +- `modules/io/src/main/scala/de/nowchess/io/grpc/IoProtoMapper.scala` + - class IoProtoMapper + - function toProtoColor + - function fromProtoColor + - function toProtoPieceType + - function fromProtoPieceType + - function toProtoMoveKind + - _...9 more_ - `modules/io/src/main/scala/de/nowchess/io/json/JsonExporter.scala` — class JsonExporter, function exportGameContext - `modules/io/src/main/scala/de/nowchess/io/json/JsonParser.scala` — class JsonParser, function importGameContext - `modules/io/src/main/scala/de/nowchess/io/pgn/PgnExporter.scala` @@ -256,17 +482,73 @@ - function importGameContext - function parsePgn - function parseAlgebraicMove -- `modules/rule/src/main/scala/de/nowchess/rules/RuleSet.scala` - - class RuleSet +- `modules/io/src/main/scala/de/nowchess/io/service/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/io/src/main/scala/de/nowchess/io/service/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/io/src/main/scala/de/nowchess/io/service/resource/IoResource.scala` + - class IoResource + - function importFen + - function importPgn + - function exportFen + - function exportPgn + - function exportCombined +- `modules/json/src/main/scala/de/nowchess/json/ChessJacksonModule.scala` — class ChessJacksonModule +- `modules/json/src/main/scala/de/nowchess/json/GameResultDeserializer.scala` — class GameResultDeserializer +- `modules/json/src/main/scala/de/nowchess/json/GameResultSerializer.scala` — class GameResultSerializer +- `modules/json/src/main/scala/de/nowchess/json/MoveTypeDeserializer.scala` — class MoveTypeDeserializer +- `modules/json/src/main/scala/de/nowchess/json/MoveTypeSerializer.scala` — class MoveTypeSerializer +- `modules/json/src/main/scala/de/nowchess/json/SquareDeserializer.scala` — class SquareDeserializer +- `modules/json/src/main/scala/de/nowchess/json/SquareKeyDeserializer.scala` — class SquareKeyDeserializer +- `modules/json/src/main/scala/de/nowchess/json/SquareKeySerializer.scala` — class SquareKeySerializer +- `modules/json/src/main/scala/de/nowchess/json/SquareSerializer.scala` — class SquareSerializer +- `modules/rule/src/main/scala/de/nowchess/rules/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/rule/src/main/scala/de/nowchess/rules/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/rule/src/main/scala/de/nowchess/rules/grpc/ProtoMapper.scala` + - class ProtoMapper + - function toProtoColor + - function fromProtoColor + - function toProtoPieceType + - function fromProtoPieceType + - function toProtoMoveKind + - _...9 more_ +- `modules/rule/src/main/scala/de/nowchess/rules/grpc/RuleGrpcService.scala` — class RuleGrpcService +- `modules/rule/src/main/scala/de/nowchess/rules/resource/RuleSetResource.scala` + - class RuleSetResource - function candidateMoves - function legalMoves - function allLegalMoves - function isCheck - function isCheckmate - - _...5 more_ -- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` - - class DefaultRules - - function positionOf - - function loop - - function toMoves - - function loop + - _...6 more_ +- `modules/rule/src/main/scala/de/nowchess/rules/sets/DefaultRules.scala` — class DefaultRules, function positionOf +- `modules/store/src/main/scala/de/nowchess/store/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/store/src/main/scala/de/nowchess/store/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/store/src/main/scala/de/nowchess/store/config/RedisConfig.scala` — class RedisConfig +- `modules/store/src/main/scala/de/nowchess/store/config/RedissonProducer.scala` + - class RedissonProducer + - function redissonClient + - function close +- `modules/store/src/main/scala/de/nowchess/store/domain/GameRecord.scala` — class GameRecord +- `modules/store/src/main/scala/de/nowchess/store/redis/GameWritebackStreamListener.scala` + - class GameWritebackStreamListener + - function startListening + - function onMessage +- `modules/store/src/main/scala/de/nowchess/store/repository/GameRecordRepository.scala` + - class GameRecordRepository + - function findByGameId + - function persist + - function merge +- `modules/store/src/main/scala/de/nowchess/store/resource/StoreGameResource.scala` — class StoreGameResource, function getGame +- `modules/store/src/main/scala/de/nowchess/store/service/GameWritebackService.scala` — class GameWritebackService, function writeBack +- `modules/ws/src/main/scala/de/nowchess/ws/config/JacksonConfig.scala` — class JacksonConfig, function customize +- `modules/ws/src/main/scala/de/nowchess/ws/config/NativeReflectionConfig.scala` — class NativeReflectionConfig +- `modules/ws/src/main/scala/de/nowchess/ws/config/RedisConfig.scala` — class RedisConfig +- `modules/ws/src/main/scala/de/nowchess/ws/config/RedissonProducer.scala` + - class RedissonProducer + - function produceRedissonClient + - function shutdown +- `modules/ws/src/main/scala/de/nowchess/ws/resource/GameWebSocketResource.scala` + - class GameWebSocketResource + - function onOpen + - function onMessage + - function onTextMessage + - function onClose diff --git a/.codesight/routes.md b/.codesight/routes.md new file mode 100644 index 0000000..cd5f7e4 --- /dev/null +++ b/.codesight/routes.md @@ -0,0 +1,44 @@ +# Routes + +## gRPC + +- `/CoordinatorService/BatchResubscribeGames` (BatchResubscribeRequest) → BatchResubscribeResponse +- `/CoordinatorService/UnsubscribeGames` (UnsubscribeGamesRequest) → UnsubscribeGamesResponse +- `/CoordinatorService/EvictGames` (EvictGamesRequest) → EvictGamesResponse +- `/CoordinatorService/DrainInstance` (DrainInstanceRequest) → DrainInstanceResponse +- `/CoordinatorService/BatchResubscribeGames` (BatchResubscribeRequest) → BatchResubscribeResponse +- `/CoordinatorService/UnsubscribeGames` (UnsubscribeGamesRequest) → UnsubscribeGamesResponse +- `/CoordinatorService/EvictGames` (EvictGamesRequest) → EvictGamesResponse +- `/CoordinatorService/DrainInstance` (DrainInstanceRequest) → DrainInstanceResponse +- `/IoService/ImportFen` (ProtoImportFenRequest) → ProtoGameContext +- `/IoService/ImportPgn` (ProtoImportPgnRequest) → ProtoGameContext +- `/IoService/ExportCombined` (ProtoGameContext) → ProtoCombinedExport +- `/IoService/ExportFen` (ProtoGameContext) → ProtoStringResult +- `/IoService/ExportPgn` (ProtoGameContext) → ProtoStringResult +- `/RuleService/CandidateMoves` (ProtoSquareRequest) → ProtoMoveList +- `/RuleService/LegalMoves` (ProtoSquareRequest) → ProtoMoveList +- `/RuleService/AllLegalMoves` (ProtoGameContext) → ProtoMoveList +- `/RuleService/IsCheck` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsCheckmate` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsStalemate` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsInsufficientMaterial` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsFiftyMoveRule` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsThreefoldRepetition` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/ApplyMove` (ProtoMoveRequest) → ProtoGameContext +- `/RuleService/PostMoveStatus` (ProtoGameContext) → ProtoPostMoveStatus +- `/IoService/ImportFen` (ProtoImportFenRequest) → ProtoGameContext +- `/IoService/ImportPgn` (ProtoImportPgnRequest) → ProtoGameContext +- `/IoService/ExportCombined` (ProtoGameContext) → ProtoCombinedExport +- `/IoService/ExportFen` (ProtoGameContext) → ProtoStringResult +- `/IoService/ExportPgn` (ProtoGameContext) → ProtoStringResult +- `/RuleService/CandidateMoves` (ProtoSquareRequest) → ProtoMoveList +- `/RuleService/LegalMoves` (ProtoSquareRequest) → ProtoMoveList +- `/RuleService/AllLegalMoves` (ProtoGameContext) → ProtoMoveList +- `/RuleService/IsCheck` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsCheckmate` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsStalemate` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsInsufficientMaterial` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsFiftyMoveRule` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/IsThreefoldRepetition` (ProtoGameContext) → ProtoBoolResult +- `/RuleService/ApplyMove` (ProtoMoveRequest) → ProtoGameContext +- `/RuleService/PostMoveStatus` (ProtoGameContext) → ProtoPostMoveStatus 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/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..8065503 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,12 @@ +FROM mcr.microsoft.com/devcontainers/java:21-bookworm + +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + postgresql-client \ + redis-tools \ + stockfish \ + && rm -rf /var/lib/apt/lists/* + +RUN mkdir -p /home/vscode/.gradle/wrapper/dists \ + && chown -R vscode:vscode /home/vscode/.gradle + diff --git a/.devcontainer/README.md b/.devcontainer/README.md new file mode 100644 index 0000000..60f7a5c --- /dev/null +++ b/.devcontainer/README.md @@ -0,0 +1,18 @@ +# Devcontainer + +Dieses Setup startet den NowChess-Workspace zusammen mit Redis und PostgreSQL. + +## Enthaltene Services +- `workspace` – Scala/Gradle-Entwicklungscontainer +- `redis` – Redis 7.4 +- `postgres` – PostgreSQL 16 + +## Wichtige Ports +- App-Services: `8080`, `8081`, `8082`, `8083`, `8084`, `8085`, `8086`, `9086` +- Redis auf dem Host: `16379` +- PostgreSQL auf dem Host: `15432` + +## Einstieg +- VS Code: Ordner in einem Dev Container öffnen +- IntelliJ: Dev Container / Docker-Compose-Workspace öffnen und den `workspace`-Dienst nutzen + diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..1de19ea --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,39 @@ +{ + "name": "NowChessSystems", + "dockerComposeFile": ["docker-compose.yml"], + "service": "workspace", + "workspaceFolder": "/workspaces/NowChessSystems", + "shutdownAction": "stopCompose", + "overrideCommand": false, + "remoteUser": "vscode", + "forwardPorts": [8080, 8081, 8082, 8083, 8084, 8085, 8086, 9086], + "portsAttributes": { + "8080": {"label": "NowChess Core", "onAutoForward": "notify"}, + "8081": {"label": "NowChess Io", "onAutoForward": "notify"}, + "8082": {"label": "NowChess Rule", "onAutoForward": "notify"}, + "8083": {"label": "NowChess Account", "onAutoForward": "notify"}, + "8084": {"label": "NowChess WebSocket", "onAutoForward": "notify"}, + "8085": {"label": "NowChess Store", "onAutoForward": "notify"}, + "8086": {"label": "NowChess Coordinator HTTP", "onAutoForward": "notify"}, + "9086": {"label": "NowChess Coordinator gRPC", "onAutoForward": "notify"} + }, + "customizations": { + "vscode": { + "settings": { + "java.configuration.updateBuildConfiguration": "automatic", + "java.import.gradle.wrapper.enabled": true, + "files.watcherExclude": { + "**/build/**": true, + "**/.gradle/**": true + } + }, + "extensions": [ + "scala-lang.scala", + "redhat.java", + "vscjava.vscode-java-pack" + ] + } + }, + "postCreateCommand": "bash -lc './gradlew --no-daemon help >/dev/null'" +} + diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 0000000..3cad48f --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,65 @@ +services: + workspace: + build: + context: .. + dockerfile: .devcontainer/Dockerfile + command: sleep infinity + init: true + volumes: + - gradle-cache:/home/vscode/.gradle + environment: + REDIS_HOST: redis + REDIS_PORT: 6379 + REDIS_PREFIX: nowchess + DB_URL: jdbc:postgresql://postgres:5432/nowchess + DB_USER: nowchess + DB_PASSWORD: nowchess + CORE_SERVICE_URL: http://localhost:8080 + INTERNAL_SECRET: dev-internal-secret + STOCKFISH_PATH: /usr/games/stockfish + NOWCHESS_COORDINATOR_ENABLED: "true" + dns: + - 8.8.8.8 + - 1.1.1.1 + depends_on: + redis: + condition: service_healthy + postgres: + condition: service_healthy + + redis: + image: docker.io/redis:7.4-alpine + command: ["redis-server", "--appendonly", "yes", "--save", "60", "1"] + ports: + - "16379:6379" + volumes: + - redis-data:/data + healthcheck: + test: ["CMD", "redis-cli", "ping"] + interval: 5s + timeout: 3s + retries: 20 + start_period: 5s + + postgres: + image: docker.io/postgres:16-alpine + environment: + POSTGRES_DB: nowchess + POSTGRES_USER: nowchess + POSTGRES_PASSWORD: nowchess + ports: + - "15432:5432" + volumes: + - postgres-data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"] + interval: 5s + timeout: 3s + retries: 20 + start_period: 10s + +volumes: + gradle-cache: + redis-data: + postgres-data: + diff --git a/.github/workflows/native-image.yml b/.github/workflows/native-image.yml index 9ace760..8c77b50 100644 --- a/.github/workflows/native-image.yml +++ b/.github/workflows/native-image.yml @@ -31,8 +31,15 @@ jobs: strategy: matrix: module: + - account + - bot-platform + - coordinator - core - io + - official-bots + - rule + - store + - ws steps: - uses: actions/checkout@v4 diff --git a/.gitignore b/.gitignore index 50e5622..8113cf5 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,9 @@ bin/ graphify-out/ .graphify_*.json +### Keys ### +**/keys/private.pem + ### Mac OS ### .DS_Store /jacoco-reporter/.venv/ diff --git a/.idea/copilotDiffState.xml b/.idea/copilotDiffState.xml new file mode 100644 index 0000000..89a8a93 --- /dev/null +++ b/.idea/copilotDiffState.xml @@ -0,0 +1,18 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 08b68c3..475e81c 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -5,16 +5,23 @@