feat: implement battle replay module with database migrations, repository, and CRUD service endpoints
All checks were successful
Build and Release / release (push) Successful in 1m32s

This commit is contained in:
2026-05-17 22:25:48 +07:00
parent 94601dbe58
commit 374c3b4f47
19 changed files with 10169 additions and 26 deletions

View File

@@ -399,6 +399,82 @@ const docTemplate = `{
}
}
},
"/battle-replays/geometry/{geometryId}": {
"get": {
"description": "Get all battle replays associated with a specific geometry",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"BattleReplays"
],
"summary": "Get battle replays by geometry ID",
"parameters": [
{
"type": "string",
"description": "Geometry ID",
"name": "geometryId",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/history-api_internal_dtos_response.CommonResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/history-api_internal_dtos_response.CommonResponse"
}
}
}
}
},
"/battle-replays/{id}": {
"get": {
"description": "Get detailed information about a specific battle replay",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"BattleReplays"
],
"summary": "Get battle replay by ID",
"parameters": [
{
"type": "string",
"description": "Battle Replay ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/history-api_internal_dtos_response.CommonResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/history-api_internal_dtos_response.CommonResponse"
}
}
}
}
},
"/chatbot/chat": {
"post": {
"security": [
@@ -4241,6 +4317,33 @@ const docTemplate = `{
}
}
},
"history-api_internal_dtos_request.BattleReplaySnapshot": {
"type": "object",
"required": [
"geometry_id",
"id"
],
"properties": {
"detail": {
"type": "array",
"items": {
"type": "integer"
}
},
"geometry_id": {
"type": "string"
},
"id": {
"type": "string"
},
"target_geometry_ids": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"history-api_internal_dtos_request.ChangeOwnerDto": {
"type": "object",
"required": [
@@ -4329,6 +4432,12 @@ const docTemplate = `{
"$ref": "#/definitions/history-api_internal_dtos_request.GeometryEntitySnapshot"
}
},
"replays": {
"type": "array",
"items": {
"$ref": "#/definitions/history-api_internal_dtos_request.BattleReplaySnapshot"
}
},
"wikis": {
"type": "array",
"items": {

View File

@@ -392,6 +392,82 @@
}
}
},
"/battle-replays/geometry/{geometryId}": {
"get": {
"description": "Get all battle replays associated with a specific geometry",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"BattleReplays"
],
"summary": "Get battle replays by geometry ID",
"parameters": [
{
"type": "string",
"description": "Geometry ID",
"name": "geometryId",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/history-api_internal_dtos_response.CommonResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/history-api_internal_dtos_response.CommonResponse"
}
}
}
}
},
"/battle-replays/{id}": {
"get": {
"description": "Get detailed information about a specific battle replay",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"BattleReplays"
],
"summary": "Get battle replay by ID",
"parameters": [
{
"type": "string",
"description": "Battle Replay ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/history-api_internal_dtos_response.CommonResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/history-api_internal_dtos_response.CommonResponse"
}
}
}
}
},
"/chatbot/chat": {
"post": {
"security": [
@@ -4234,6 +4310,33 @@
}
}
},
"history-api_internal_dtos_request.BattleReplaySnapshot": {
"type": "object",
"required": [
"geometry_id",
"id"
],
"properties": {
"detail": {
"type": "array",
"items": {
"type": "integer"
}
},
"geometry_id": {
"type": "string"
},
"id": {
"type": "string"
},
"target_geometry_ids": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"history-api_internal_dtos_request.ChangeOwnerDto": {
"type": "object",
"required": [
@@ -4322,6 +4425,12 @@
"$ref": "#/definitions/history-api_internal_dtos_request.GeometryEntitySnapshot"
}
},
"replays": {
"type": "array",
"items": {
"$ref": "#/definitions/history-api_internal_dtos_request.BattleReplaySnapshot"
}
},
"wikis": {
"type": "array",
"items": {

View File

@@ -29,6 +29,24 @@ definitions:
- min_lat
- min_lng
type: object
history-api_internal_dtos_request.BattleReplaySnapshot:
properties:
detail:
items:
type: integer
type: array
geometry_id:
type: string
id:
type: string
target_geometry_ids:
items:
type: string
type: array
required:
- geometry_id
- id
type: object
history-api_internal_dtos_request.ChangeOwnerDto:
properties:
new_owner_id:
@@ -88,6 +106,10 @@ definitions:
items:
$ref: '#/definitions/history-api_internal_dtos_request.GeometryEntitySnapshot'
type: array
replays:
items:
$ref: '#/definitions/history-api_internal_dtos_request.BattleReplaySnapshot'
type: array
wikis:
items:
$ref: '#/definitions/history-api_internal_dtos_request.WikiSnapshot'
@@ -947,6 +969,56 @@ paths:
summary: Verify a security token
tags:
- Auth
/battle-replays/{id}:
get:
consumes:
- application/json
description: Get detailed information about a specific battle replay
parameters:
- description: Battle Replay ID
in: path
name: id
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/history-api_internal_dtos_response.CommonResponse'
"404":
description: Not Found
schema:
$ref: '#/definitions/history-api_internal_dtos_response.CommonResponse'
summary: Get battle replay by ID
tags:
- BattleReplays
/battle-replays/geometry/{geometryId}:
get:
consumes:
- application/json
description: Get all battle replays associated with a specific geometry
parameters:
- description: Geometry ID
in: path
name: geometryId
required: true
type: string
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/history-api_internal_dtos_response.CommonResponse'
"400":
description: Bad Request
schema:
$ref: '#/definitions/history-api_internal_dtos_response.CommonResponse'
summary: Get battle replays by geometry ID
tags:
- BattleReplays
/chatbot/chat:
post:
consumes: