From 83f84371be07ea64995798a8420bf050f82b1897 Mon Sep 17 00:00:00 2001 From: Janis Date: Sun, 26 Apr 2026 00:13:35 +0200 Subject: [PATCH] feat(redis): implement Redis integration for game state management and websocket communication --- .idea/gradle.xml | 1 + .idea/scala_compiler.xml | 2 +- bruno/board/game/02 Get Game.bru | 2 +- bruno/board/game/03 Stream Game.bru | 18 +- bruno/environments/local.bru | 2 +- build.gradle.kts | 9 +- .../filter/AlreadyLoggedInFilter.scala | 2 + .../de/nowchess/api/dto/GameStateDto.scala | 1 + modules/core/build.gradle.kts | 17 +- .../core/src/main/resources/application.yml | 15 ++ .../nowchess/chess/client/GameRecordDto.scala | 24 +++ .../chess/client/StoreServiceClient.scala | 13 ++ .../de/nowchess/chess/command/Command.scala | 60 ------ .../chess/command/CommandInvoker.scala | 67 ------ .../nowchess/chess/config/RedisConfig.scala | 18 ++ .../chess/config/RedissonProducer.scala | 35 +++ .../de/nowchess/chess/engine/GameEngine.scala | 162 +++++++++----- .../chess/observer/InvalidMoveReason.scala | 5 + .../de/nowchess/chess/observer/Observer.scala | 21 +- .../de/nowchess/chess/redis/C2sMessage.scala | 8 + .../chess/redis/GameRedisPublisher.scala | 56 +++++ .../redis/GameRedisSubscriberManager.scala | 102 +++++++++ .../chess/redis/GameWritebackEventDto.scala | 26 +++ .../chess/registry/GameCacheDto.scala | 25 +++ .../chess/registry/GameRegistryImpl.scala | 23 -- .../chess/registry/RedisGameRegistry.scala | 202 ++++++++++++++++++ .../chess/resource/GameDtoMapper.scala | 73 +++++++ .../chess/resource/GameResource.scala | 109 ++++------ .../resource/GameWebSocketResource.scala | 132 ------------ .../core/src/test/resources/application.yml | 6 + modules/io/build.gradle.kts | 12 ++ modules/rule/build.gradle.kts | 12 ++ modules/store/build.gradle.kts | 108 ++++++++++ .../nowchess/store/config/RedisConfig.scala | 16 ++ .../store/config/RedissonProducer.scala | 29 +++ .../de/nowchess/store/domain/GameRecord.scala | 82 +++++++ .../store/redis/GameWritebackEventDto.scala | 24 +++ .../redis/GameWritebackStreamListener.scala | 30 +++ .../repository/GameRecordRepository.scala | 23 ++ .../store/resource/StoreGameResource.scala | 23 ++ .../store/service/GameWritebackService.scala | 69 ++++++ modules/ws/build.gradle.kts | 92 ++++++++ modules/ws/src/main/resources/application.yml | 28 +++ .../de/nowchess/ws/config/RedisConfig.scala | 18 ++ .../nowchess/ws/config/RedissonProducer.scala | 35 +++ .../ws/resource/GameWebSocketResource.scala | 52 +++++ modules/ws/src/test/resources/application.yml | 11 + settings.gradle.kts | 2 + 48 files changed, 1475 insertions(+), 427 deletions(-) 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 create mode 100644 modules/core/src/main/scala/de/nowchess/chess/config/RedissonProducer.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/redis/GameWritebackEventDto.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 delete mode 100644 modules/core/src/main/scala/de/nowchess/chess/resource/GameWebSocketResource.scala create mode 100644 modules/store/build.gradle.kts 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/config/RedissonProducer.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/GameWritebackEventDto.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/scala/de/nowchess/ws/config/RedisConfig.scala create mode 100644 modules/ws/src/main/scala/de/nowchess/ws/config/RedissonProducer.scala create mode 100644 modules/ws/src/main/scala/de/nowchess/ws/resource/GameWebSocketResource.scala create mode 100644 modules/ws/src/test/resources/application.yml diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 7d3788b..92c218c 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -17,6 +17,7 @@ diff --git a/.idea/scala_compiler.xml b/.idea/scala_compiler.xml index 7e3ab9c..238131e 100644 --- a/.idea/scala_compiler.xml +++ b/.idea/scala_compiler.xml @@ -5,7 +5,7 @@