Server/api/api.yml

267 lines
7.7 KiB
YAML
Raw Normal View History

2025-02-01 14:18:34 +01:00
openapi: 3.0.0
info:
title: Tower Defence Server
description: An API for talking to the Tower Defence Server
version: 0.0.1
servers:
- url: /api/v1
- url: http://localhost:8080/api/v1
security:
- JWTAuth: [ ]
2025-02-01 14:18:34 +01:00
components:
securitySchemes:
JWTAuth:
type: http
scheme: bearer
bearerFormat: JWT
schemas:
#############################################
# UUID #
#############################################
UUID:
description: Unique identifier compatible with [RFC9562](https://datatracker.ietf.org/doc/html/rfc9562)
type: string
format: uuid
example: f0981749-f550-46cd-b9ce-b6ca7cd0251f
#############################################
2025-02-11 13:34:36 +01:00
# PlayerRegistrationData #
#############################################
PlayerRegistrationData:
description: Data needed to create a new player
type: object
properties:
username:
type: string
password:
type: string
required:
- username
- password
#############################################
# PlayerLoginData #
#############################################
PlayerLoginData:
description: Data needed to log a Player in
type: object
properties:
username:
type: string
password:
type: string
required:
- username
- password
#############################################
# PlayerLoginSession #
#############################################
PlayerLoginSession:
description: Data needed to log a Player in
type: object
properties:
username:
type: string
token:
type: string
required:
- username
- token
#############################################
2025-02-01 14:18:34 +01:00
# AdminAuthInfo #
#############################################
ServerHealth:
type: object
properties:
okay:
type: boolean
required:
- okay
#############################################
# AdminAuthInfo #
#############################################
AdminAuthInfo:
type: object
properties:
username:
type: string
required:
- username
#############################################
# AdministratablePlayer #
#############################################
AdministratablePlayer:
description: a Player
type: object
properties:
username:
type: string
2025-02-01 14:18:34 +01:00
required:
- username
#############################################
# PlayerFilter #
#############################################
PlayerFilter:
description: Configuration data for query for the getting all players endpoint
type: object
properties:
page:
type: integer
description: "Page number (zero-based index)."
pageSize:
type: integer
description: "Number of players per page."
sortBy:
type: string
description: "Field to sort by (default is username)."
order:
type: string
enum: [ ascending, descending ]
description: "Sorting order (asc or desc)."
username:
type: string
description: "Filter players by username (case-insensitive, partial match)."
required:
- page
- pageSize
- order
2025-02-01 14:18:34 +01:00
responses:
2025-02-11 13:34:36 +01:00
201PlayerCreated:
description: "201 - Player Created"
401PlayerNameOrPasswordWrong:
description: "401 - Player Name or Password is Wrong"
2025-02-01 14:18:34 +01:00
401Unauthorized:
description: "401 - Unauthorized"
404NotFound:
description: "Not Found"
content:
text/plain:
schema:
type: string
2025-02-11 13:34:36 +01:00
409UsernameTaken:
description: "409 - Username Taken"
content:
text/plain:
schema:
type: string
2025-02-01 14:18:34 +01:00
409Conflict:
description: "409 - Conflict"
content:
text/plain:
schema:
type: string
500InternalError:
description: "500 - Internal Server Error"
content:
text/plain:
schema:
type: string
503ServiceUnavailable:
description: "503 - Service Unavailable"
content:
text/plain:
schema:
type: string
paths:
2025-02-11 13:34:36 +01:00
/player/register:
post:
operationId: "PlayerRegister"
tags:
- server
description: "Endpoint for registering a new Player"
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PlayerRegistrationData"
responses:
201:
$ref: "#/components/responses/201PlayerCreated"
409:
$ref: "#/components/responses/409UsernameTaken"
500:
$ref: "#/components/responses/500InternalError"
/player/login:
post:
operationId: "PlayerLogin"
tags:
- server
description: "Endpoint for logging a Player in"
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PlayerLoginData"
responses:
200:
description: "A Login Session, which can be used in the Webhook"
content:
application/json:
schema:
$ref: "#/components/schemas/PlayerLoginSession"
401:
$ref: "#/components/responses/401PlayerNameOrPasswordWrong"
500:
$ref: "#/components/responses/500InternalError"
2025-02-01 14:18:34 +01:00
/server/health:
get:
operationId: "ServerGetHealthcheck"
tags:
- server
description: "Endpoint for doing a Healthcheck of the Server"
responses:
200:
description: "A Health-Report of the server"
content:
application/json:
schema:
$ref: "#/components/schemas/ServerHealth"
500:
$ref: "#/components/responses/500InternalError"
503:
$ref: "#/components/responses/503ServiceUnavailable"
/admin/authenticated:
get:
operationId: "AdminGetAuthenticated"
tags:
- admin
description: "Endpoint for Checking if you're authenticated as an admin"
responses:
200:
description: "A Minimal Admin Info for testing if the admin is logged in"
content:
application/json:
schema:
$ref: "#/components/schemas/AdminAuthInfo"
401:
$ref: "#/components/responses/401Unauthorized"
500:
$ref: "#/components/responses/500InternalError"
503:
$ref: "#/components/responses/503ServiceUnavailable"
/admin/players:
2025-03-05 11:09:08 +01:00
post:
operationId: "GetAllPlayers"
tags:
- admin
summary: "Retrieve a paginated list of players"
description: "Returns a paginat#ed list of players, optionally filtered by username."
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/PlayerFilter"
responses:
200:
description: "A List of all Player"
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/AdministratablePlayer"
401:
$ref: "#/components/responses/401Unauthorized"
500:
$ref: "#/components/responses/500InternalError"
2025-02-01 14:18:34 +01:00
503:
$ref: "#/components/responses/503ServiceUnavailable"