feat: add API endpoints for game creation, draw offers, FEN/PGN import/export, and move actions
Build & Test (NowChessSystems) TeamCity build failed

This commit is contained in:
2026-04-15 10:14:29 +02:00
parent 52197125f7
commit 3bad8c64d3
19 changed files with 317 additions and 0 deletions
+16
View File
@@ -0,0 +1,16 @@
meta {
name: Draw offer
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/offer
body: none
auth: none
}
headers {
Accept: application/json
}
+16
View File
@@ -0,0 +1,16 @@
meta {
name: Draw accept
type: http
seq: 2
}
post {
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/accept
body: none
auth: none
}
headers {
Accept: application/json
}
+16
View File
@@ -0,0 +1,16 @@
meta {
name: Draw decline
type: http
seq: 3
}
post {
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/decline
body: none
auth: none
}
headers {
Accept: application/json
}
+16
View File
@@ -0,0 +1,16 @@
meta {
name: Draw claim fifty move
type: http
seq: 4
}
post {
url: {{baseUrl}}/api/board/game/{{gameId}}/draw/claim
body: none
auth: none
}
headers {
Accept: application/json
}
+16
View File
@@ -0,0 +1,16 @@
meta {
name: Export FEN
type: http
seq: 1
}
get {
url: {{baseUrl}}/api/board/game/{{gameId}}/export/fen
body: none
auth: none
}
headers {
Accept: text/plain
}
+16
View File
@@ -0,0 +1,16 @@
meta {
name: Export PGN
type: http
seq: 2
}
get {
url: {{baseUrl}}/api/board/game/{{gameId}}/export/pgn
body: none
auth: none
}
headers {
Accept: application/x-chess-pgn
}
+30
View File
@@ -0,0 +1,30 @@
meta {
name: Create game
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/board/game
body: json
auth: none
}
headers {
Accept: application/json
Content-Type: application/json
}
body:json {
{
"white": {
"id": "player1",
"displayName": "Alice"
},
"black": {
"id": "player2",
"displayName": "Bob"
}
}
}
+16
View File
@@ -0,0 +1,16 @@
meta {
name: Get game
type: http
seq: 2
}
get {
url: {{baseUrl}}/api/board/game/{{gameId}}
body: none
auth: none
}
headers {
Accept: application/json
}
+16
View File
@@ -0,0 +1,16 @@
meta {
name: Stream game (NDJSON)
type: http
seq: 3
}
get {
url: {{baseUrl}}/api/board/game/{{gameId}}/stream
body: none
auth: none
}
headers {
Accept: application/x-ndjson
}
+16
View File
@@ -0,0 +1,16 @@
meta {
name: Resign game
type: http
seq: 4
}
post {
url: {{baseUrl}}/api/board/game/{{gameId}}/resign
body: none
auth: none
}
headers {
Accept: application/json
}
+31
View File
@@ -0,0 +1,31 @@
meta {
name: Import FEN
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/board/game/import/fen
body: json
auth: none
}
headers {
Accept: application/json
Content-Type: application/json
}
body:json {
{
"fen": "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1",
"white": {
"id": "player1",
"displayName": "Alice"
},
"black": {
"id": "player2",
"displayName": "Bob"
}
}
}
+23
View File
@@ -0,0 +1,23 @@
meta {
name: Import PGN
type: http
seq: 2
}
post {
url: {{baseUrl}}/api/board/game/import/pgn
body: json
auth: none
}
headers {
Accept: application/json
Content-Type: application/json
}
body:json {
{
"pgn": "1. e4 e5 2. Nf3 Nc6 *"
}
}
+16
View File
@@ -0,0 +1,16 @@
meta {
name: Make move
type: http
seq: 1
}
post {
url: {{baseUrl}}/api/board/game/{{gameId}}/move/{{uci}}
body: none
auth: none
}
headers {
Accept: application/json
}
@@ -0,0 +1,20 @@
meta {
name: Get legal moves
type: http
seq: 2
}
get {
url: {{baseUrl}}/api/board/game/{{gameId}}/moves
body: none
auth: none
}
params:query {
square: {{square}}
}
headers {
Accept: application/json
}
+16
View File
@@ -0,0 +1,16 @@
meta {
name: Undo move
type: http
seq: 3
}
post {
url: {{baseUrl}}/api/board/game/{{gameId}}/undo
body: none
auth: none
}
headers {
Accept: application/json
}
+16
View File
@@ -0,0 +1,16 @@
meta {
name: Redo move
type: http
seq: 4
}
post {
url: {{baseUrl}}/api/board/game/{{gameId}}/redo
body: none
auth: none
}
headers {
Accept: application/json
}
+6
View File
@@ -0,0 +1,6 @@
{
"version": "1",
"name": "NowChessSystems",
"type": "collection"
}
+3
View File
@@ -0,0 +1,3 @@
vars {
baseUrl: http://localhost:8080
}
+12
View File
@@ -21,6 +21,14 @@ scoverage {
scoverageVersion.set(versions["SCOVERAGE"]!!)
}
configurations.scoverage {
resolutionStrategy.eachDependency {
if (requested.group == "org.scoverage" && requested.name.startsWith("scalac-scoverage-plugin_")) {
useTarget("${requested.group}:scalac-scoverage-plugin_2.13.16:2.3.0")
}
}
}
tasks.withType<ScalaCompile> {
scalaCompileOptions.additionalParameters = listOf("-encoding", "UTF-8")
}
@@ -131,4 +139,8 @@ tasks.jacocoTestReport {
)
html.required.set(false)
}
finalizedBy(tasks.reportScoverage)
}
tasks.reportScoverage {
dependsOn(tasks.test)
}