feat: NCS-52 Rules as a microservice #36

Merged
Janis merged 14 commits from feat/NCS-52 into main 2026-04-22 09:29:16 +02:00
Owner

Implemented module rules as a microservice.

Summary

  • Adds Quarkus to the rule module, making it independently deployable as a standalone microservice on port 8081
  • Exposes all RuleSet methods via a REST API at /api/rules (candidate moves, legal moves, check/checkmate/stalemate/draw detection, apply
    move)
  • Introduces DTOs and a DtoMapper for serializing/deserializing chess types (board, moves, game context) as flat JSON strings
  • Adds JacksonConfig for Scala module registration and an application.yml for the rule service
  • Includes Dockerfiles for JVM, legacy-jar, native, and native-micro targets
  • Full test coverage: 17 @QuarkusTest HTTP-level tests + 29 DtoMapper unit tests (100% condition coverage)

Test plan

  • ./compile — all modules build successfully
  • ./test — all tests pass (rule module: 107 tests total)
  • ./coverage — 100% condition coverage in rule module
  • Rule service runs standalone: ./gradlew :modules:rule:quarkusDev starts on port 8081
  • GET /api/rules/candidate-moves returns valid moves for initial position
  • GET /api/rules/is-check returns false for initial position
Implemented module rules as a microservice. ## Summary - Adds Quarkus to the `rule` module, making it independently deployable as a standalone microservice on port 8081 - Exposes all `RuleSet` methods via a REST API at `/api/rules` (candidate moves, legal moves, check/checkmate/stalemate/draw detection, apply move) - Introduces DTOs and a `DtoMapper` for serializing/deserializing chess types (board, moves, game context) as flat JSON strings - Adds `JacksonConfig` for Scala module registration and an `application.yml` for the rule service - Includes Dockerfiles for JVM, legacy-jar, native, and native-micro targets - Full test coverage: 17 `@QuarkusTest` HTTP-level tests + 29 `DtoMapper` unit tests (100% condition coverage) ## Test plan - [ ] `./compile` — all modules build successfully - [ ] `./test` — all tests pass (rule module: 107 tests total) - [ ] `./coverage` — 100% condition coverage in `rule` module - [ ] Rule service runs standalone: `./gradlew :modules:rule:quarkusDev` starts on port 8081 - [ ] `GET /api/rules/candidate-moves` returns valid moves for initial position - [ ] `GET /api/rules/is-check` returns `false` for initial position
Janis requested changes 2026-04-21 13:33:14 +02:00
Janis left a comment
Member

Contains changes that revert last commit

Contains changes that revert last commit
Member

Recommend Cherry Picking a176f9e7ca

Recommend Cherry Picking a176f9e7ca4084ad65fc75ce71764c2edfe06a03
Author
Owner

Recommend Cherry Picking a176f9e7ca

Can you give me an example of where?

> Recommend Cherry Picking a176f9e7ca4084ad65fc75ce71764c2edfe06a03 Can you give me an example of where?
Janis requested changes 2026-04-21 19:25:36 +02:00
Janis left a comment
Member

Hauptsächlich die manuellen DTOs fixen

Hauptsächlich die manuellen DTOs fixen
@@ -0,0 +1,2 @@
greeting:
Member

Bidde nicht adden

Bidde nicht adden
@@ -0,0 +1,6 @@
-- This file allow to write SQL commands that will be emitted in test and dev.
Member

Das hier auch nicht

Das hier auch nicht
@@ -13,5 +13,5 @@ class JacksonConfig extends ObjectMapperCustomizer:
override def version(): Version =
// scalafix:off DisableSyntax.null
new Version(2, 21, 1, null, "com.fasterxml.jackson.module", "jackson-module-scala")
// scalafix:on DisableSyntax.null
Member

Die arme Datei

Die arme Datei
@@ -0,0 +16,4 @@
promotionPiece: Option[String],
)
case class GameContextDto(
Member

Warum wird der Context gemappt? Kann man doch direkt verwenden

Warum wird der Context gemappt? Kann man doch direkt verwenden
Member

Schau dir bitte das IO Modul an

Schau dir bitte das IO Modul an
lq64 added 5 commits 2026-04-21 19:43:36 +02:00
Added rules as a microservice
Added rules as a microservice
Added tests to rules
linter corrections
fix(rules): Code quality
Build & Test (NowChessSystems) TeamCity build finished
4a69198e3d
Fixed problem with dependency
lq64 force-pushed feat/NCS-52 from c0e2a21688 to 4a69198e3d 2026-04-21 19:43:36 +02:00 Compare
lq64 added 1 commit 2026-04-21 20:42:48 +02:00
fix(rules): Serializers
Build & Test (NowChessSystems) TeamCity build failed
74f846c95c
Added serializers like in IO
lq64 added 1 commit 2026-04-21 21:00:42 +02:00
fix(rules): Serializers
Build & Test (NowChessSystems) TeamCity build failed
d096ae4f18
Added serializers like in IO
lq64 added 1 commit 2026-04-21 21:05:15 +02:00
fix(rules): Serializers
Build & Test (NowChessSystems) TeamCity build failed
990caa5c96
Added Native Reflection Config
lq64 added 1 commit 2026-04-21 21:15:20 +02:00
fix(rules): Serializers
Build & Test (NowChessSystems) TeamCity build finished
74b7a174c2
Added small changes
lq64 added 1 commit 2026-04-21 23:34:46 +02:00
feat(core): core dependecy to rules
Build & Test (NowChessSystems) TeamCity build failed
fc720166bf
Added communication between core and rules via REST
lq64 added 1 commit 2026-04-22 00:03:17 +02:00
fix(core): core dependecy to rules
Build & Test (NowChessSystems) TeamCity build failed
26f3154cda
small fixes
lq64 added 1 commit 2026-04-22 00:23:42 +02:00
test(core): core dependecy to rules
Build & Test (NowChessSystems) TeamCity build failed
db25eaef2e
Added tests
lq64 added 1 commit 2026-04-22 09:08:11 +02:00
test(core): core dependecy to rules
Build & Test (NowChessSystems) TeamCity build failed
030469c820
Added Quarkus file into ignore list
Janis added 1 commit 2026-04-22 09:29:04 +02:00
chore: remote-tracking branch 'origin/main' into feat/NCS-52
Build & Test (NowChessSystems) TeamCity build failed
e9ccae6594
# Conflicts:
#	modules/core/build.gradle.kts
#	modules/core/src/main/scala/de/nowchess/chess/config/JacksonConfig.scala
#	modules/core/src/main/scala/de/nowchess/chess/engine/GameEngine.scala
#	modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineIntegrationTest.scala
#	modules/core/src/test/scala/de/nowchess/chess/engine/GameEngineLoadGameTest.scala
Janis merged commit e73b6a7514 into main 2026-04-22 09:29:16 +02:00
Janis deleted branch feat/NCS-52 2026-04-22 09:29:16 +02:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: NowChess/NowChessSystems#36