867 lines
17 KiB
JSON
867 lines
17 KiB
JSON
{
|
|
"openapi": "3.1.1",
|
|
"info": {
|
|
"title": "GameList | v1",
|
|
"version": "1.0.0"
|
|
},
|
|
"paths": {
|
|
"/health": {
|
|
"get": {
|
|
"tags": [
|
|
"GameList"
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/options": {
|
|
"get": {
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"operationId": "GetAuthOptions",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/register": {
|
|
"post": {
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"operationId": "Register",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RegisterRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/login": {
|
|
"post": {
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"operationId": "Login",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LoginRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/auth/logout": {
|
|
"post": {
|
|
"tags": [
|
|
"Auth"
|
|
],
|
|
"operationId": "Logout",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/state": {
|
|
"get": {
|
|
"tags": [
|
|
"State"
|
|
],
|
|
"operationId": "GetState",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/events/state": {
|
|
"get": {
|
|
"tags": [
|
|
"State"
|
|
],
|
|
"operationId": "GetStateEvents",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/me": {
|
|
"get": {
|
|
"tags": [
|
|
"State"
|
|
],
|
|
"operationId": "GetMe",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/me/phase/next": {
|
|
"post": {
|
|
"tags": [
|
|
"State"
|
|
],
|
|
"operationId": "NextPhase",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/me/phase/prev": {
|
|
"post": {
|
|
"tags": [
|
|
"State"
|
|
],
|
|
"operationId": "PrevPhase",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/suggestions/mine": {
|
|
"get": {
|
|
"tags": [
|
|
"Suggestions"
|
|
],
|
|
"operationId": "GetMySuggestions",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/suggestions": {
|
|
"post": {
|
|
"tags": [
|
|
"Suggestions"
|
|
],
|
|
"operationId": "CreateSuggestion",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SuggestionRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/suggestions/{id}": {
|
|
"delete": {
|
|
"tags": [
|
|
"Suggestions"
|
|
],
|
|
"operationId": "DeleteSuggestion",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": "integer",
|
|
"format": "int32"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
},
|
|
"put": {
|
|
"tags": [
|
|
"Suggestions"
|
|
],
|
|
"operationId": "UpdateSuggestion",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": "integer",
|
|
"format": "int32"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SuggestionRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/suggestions/all": {
|
|
"get": {
|
|
"tags": [
|
|
"Suggestions"
|
|
],
|
|
"operationId": "GetAllSuggestions",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/votes/mine": {
|
|
"get": {
|
|
"tags": [
|
|
"Votes"
|
|
],
|
|
"operationId": "GetMyVotes",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/votes": {
|
|
"post": {
|
|
"tags": [
|
|
"Votes"
|
|
],
|
|
"operationId": "UpsertVote",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/VoteRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/votes/finalize": {
|
|
"post": {
|
|
"tags": [
|
|
"Votes"
|
|
],
|
|
"operationId": "SetVotesFinalized",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/VoteFinalizeRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/results": {
|
|
"get": {
|
|
"tags": [
|
|
"Results"
|
|
],
|
|
"operationId": "GetResults",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/results": {
|
|
"post": {
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"operationId": "SetResultsOpen",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ResultsOpenRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/vote-status": {
|
|
"get": {
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"operationId": "GetVoteStatus",
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/joker": {
|
|
"post": {
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"operationId": "GrantJoker",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GrantJokerRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/player-phase": {
|
|
"post": {
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"operationId": "SetPlayerPhase",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SetPlayerPhaseRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/player-admin": {
|
|
"post": {
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"operationId": "SetPlayerAdmin",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SetPlayerAdminRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/players/{playerId}": {
|
|
"delete": {
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"operationId": "DeletePlayer",
|
|
"parameters": [
|
|
{
|
|
"name": "playerId",
|
|
"in": "path",
|
|
"required": true,
|
|
"schema": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AdminPasswordRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/link-suggestions": {
|
|
"post": {
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"operationId": "LinkSuggestions",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LinkSuggestionsRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/unlink-suggestions": {
|
|
"post": {
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"operationId": "UnlinkSuggestions",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UnlinkSuggestionsRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/reset": {
|
|
"post": {
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"operationId": "Reset",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AdminPasswordRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"/api/admin/factory-reset": {
|
|
"post": {
|
|
"tags": [
|
|
"Admin"
|
|
],
|
|
"operationId": "FactoryReset",
|
|
"requestBody": {
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AdminPasswordRequest"
|
|
}
|
|
}
|
|
},
|
|
"required": true
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "OK"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"components": {
|
|
"schemas": {
|
|
"AdminPasswordRequest": {
|
|
"required": [
|
|
"password"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"password": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"GrantJokerRequest": {
|
|
"required": [
|
|
"playerId"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"playerId": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
}
|
|
}
|
|
},
|
|
"LinkSuggestionsRequest": {
|
|
"required": [
|
|
"sourceSuggestionId",
|
|
"targetSuggestionId"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"sourceSuggestionId": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"targetSuggestionId": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
}
|
|
},
|
|
"LoginRequest": {
|
|
"required": [
|
|
"username",
|
|
"password"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"username": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"password": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"Phase": {
|
|
"enum": [
|
|
"Suggest",
|
|
"Vote",
|
|
"Results"
|
|
]
|
|
},
|
|
"RegisterRequest": {
|
|
"required": [
|
|
"username",
|
|
"password",
|
|
"displayName",
|
|
"adminKey"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"username": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"password": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"displayName": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"adminKey": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"ResultsOpenRequest": {
|
|
"required": [
|
|
"resultsOpen"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"resultsOpen": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"SetPlayerAdminRequest": {
|
|
"required": [
|
|
"playerId",
|
|
"isAdmin"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"playerId": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
"isAdmin": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"SetPlayerPhaseRequest": {
|
|
"required": [
|
|
"playerId",
|
|
"phase"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"playerId": {
|
|
"type": "string",
|
|
"format": "uuid"
|
|
},
|
|
"phase": {
|
|
"$ref": "#/components/schemas/Phase"
|
|
}
|
|
}
|
|
},
|
|
"SuggestionRequest": {
|
|
"required": [
|
|
"name",
|
|
"genre",
|
|
"description",
|
|
"screenshotUrl",
|
|
"youtubeUrl",
|
|
"gameUrl",
|
|
"minPlayers",
|
|
"maxPlayers"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"genre": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"description": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"screenshotUrl": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"youtubeUrl": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"gameUrl": {
|
|
"type": [
|
|
"null",
|
|
"string"
|
|
]
|
|
},
|
|
"minPlayers": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"maxPlayers": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"null",
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
}
|
|
},
|
|
"UnlinkSuggestionsRequest": {
|
|
"required": [
|
|
"suggestionId"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"suggestionId": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
}
|
|
},
|
|
"VoteFinalizeRequest": {
|
|
"required": [
|
|
"final"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"final": {
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
},
|
|
"VoteRequest": {
|
|
"required": [
|
|
"suggestionId",
|
|
"score"
|
|
],
|
|
"type": "object",
|
|
"properties": {
|
|
"suggestionId": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
},
|
|
"score": {
|
|
"pattern": "^-?(?:0|[1-9]\\d*)$",
|
|
"type": [
|
|
"integer",
|
|
"string"
|
|
],
|
|
"format": "int32"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
{
|
|
"name": "GameList"
|
|
},
|
|
{
|
|
"name": "Auth"
|
|
},
|
|
{
|
|
"name": "State"
|
|
},
|
|
{
|
|
"name": "Suggestions"
|
|
},
|
|
{
|
|
"name": "Votes"
|
|
},
|
|
{
|
|
"name": "Results"
|
|
},
|
|
{
|
|
"name": "Admin"
|
|
}
|
|
]
|
|
} |