nquest/api/openapi.yaml

423 lines
8.9 KiB
YAML
Raw Normal View History

2023-11-01 23:21:12 +03:00
openapi: "3.1.0"
2023-11-01 23:21:12 +03:00
info:
version: 1.0.0
title: nQuest
2023-11-01 23:21:12 +03:00
servers:
- url: /api
2023-11-01 23:21:12 +03:00
paths:
# User routes
/user:
get:
responses:
200:
$ref: '#/components/responses/userResponse'
403:
$ref: '#/components/responses/errorResponse'
/user/login:
post:
security: []
requestBody:
$ref: '#/components/requestBodies/login'
responses:
200:
$ref: '#/components/responses/userResponse'
400:
$ref: '#/components/responses/errorResponse'
/user/register:
post:
security: []
requestBody:
$ref: '#/components/requestBodies/register'
responses:
200:
$ref: '#/components/responses/userResponse'
400:
$ref: '#/components/responses/errorResponse'
/user/logout:
post:
responses:
204:
description: "success logout"
400:
$ref: '#/components/responses/errorResponse'
2024-01-05 03:50:33 +03:00
# Game routes
/games:
2023-11-01 23:21:12 +03:00
get:
responses:
200:
2024-01-05 03:50:33 +03:00
$ref: '#/components/responses/gameListResponse'
2023-11-02 23:38:50 +03:00
post:
2024-01-05 03:50:33 +03:00
operationId: createGame
security:
- cookieAuth: [creator, admin]
2023-11-02 23:38:50 +03:00
requestBody:
2024-01-05 03:50:33 +03:00
$ref: "#/components/requestBodies/gameEditRequest"
2023-11-02 23:38:50 +03:00
responses:
200:
2024-01-05 03:50:33 +03:00
$ref: "#/components/responses/gameResponse"
/engine/{uid}:
2023-11-01 23:21:12 +03:00
get:
2024-01-05 03:50:33 +03:00
operationId: gameEngine
2023-11-01 23:21:12 +03:00
parameters:
2024-01-05 03:50:33 +03:00
- name: uid
in: path
2023-11-01 23:21:12 +03:00
required: true
schema:
type: string
format: uuid
responses:
200:
2024-01-05 03:50:33 +03:00
$ref: '#/components/responses/taskResponse'
/engine/{uid}/code:
post:
2024-01-05 03:50:33 +03:00
operationId: enterCode
parameters:
2024-01-05 03:50:33 +03:00
- name: uid
in: path
required: true
schema:
type: string
format: uuid
2023-11-01 23:21:12 +03:00
requestBody:
2024-01-05 03:50:33 +03:00
$ref: "#/components/requestBodies/enterCodeRequest"
responses:
200:
2024-01-05 03:50:33 +03:00
$ref: '#/components/responses/taskResponse'
2024-01-20 21:37:49 +03:00
/file/upload:
post:
operationId: uploadFile
2024-01-21 02:20:59 +03:00
security:
- cookieAuth: [creator, admin]
2024-01-20 21:37:49 +03:00
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
file:
type: string
format: binary
responses:
200:
$ref: '#/components/responses/uploadResponse'
/file/{uid}:
get:
operationId: getFile
parameters:
- name: uid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
description: file
content:
'application/octet-stream':
schema:
type: string
format: binary
2023-11-01 23:21:12 +03:00
components:
schemas:
2024-01-05 03:50:33 +03:00
userView:
2023-11-01 23:21:12 +03:00
type: object
properties:
id:
type: string
format: uuid
2024-01-05 03:50:33 +03:00
username:
2023-11-01 23:21:12 +03:00
type: string
2024-01-21 02:20:59 +03:00
email:
type: string
experience:
type: integer
level:
type: integer
expToCurrentLevel:
type: integer
expToNextLevel:
type: integer
games:
type: array
items:
$ref: "#/components/schemas/gameView"
role:
type: string
enum:
- user
- creator
- admin
required:
- id
- username
- email
- experience
- level
- expToCurrentLevel
- expToNextLevel
- games
- role
2024-01-05 03:50:33 +03:00
gameView:
2023-11-01 23:21:12 +03:00
type: object
properties:
2024-01-05 03:50:33 +03:00
id:
type: string
format: uuid
2024-01-05 03:50:33 +03:00
title:
type: string
description:
2023-11-01 23:21:12 +03:00
type: string
2024-01-05 03:50:33 +03:00
type:
$ref: "#/components/schemas/gameType"
points:
type: integer
taskCount:
type: integer
createdAt:
type: string
authors:
type: array
items:
$ref: "#/components/schemas/userView"
2024-01-20 21:37:49 +03:00
icon:
type: string
format: uuid
2024-01-05 03:50:33 +03:00
required:
- id
- title
- description
- type
- points
- taskCount
- createdAt
- authors
2024-01-20 21:37:49 +03:00
- icon
2024-01-05 03:50:33 +03:00
taskView:
2023-11-01 23:21:12 +03:00
type: object
properties:
message:
type: string
enum:
- ok_code
- invalid_code
- old_code
- next_level
- game_complete
2024-01-05 03:50:33 +03:00
title:
2023-11-01 23:21:12 +03:00
type: string
2024-01-05 03:50:33 +03:00
text:
type: string
codes:
type: array
items:
$ref: '#/components/schemas/codeView'
solutions:
type: array
items:
$ref: '#/components/schemas/solutionView'
required:
- title
- text
- codes
- solutions
codeView:
2023-11-01 23:21:12 +03:00
type: object
properties:
2024-01-05 03:50:33 +03:00
description:
2023-11-01 23:21:12 +03:00
type: string
2024-01-05 03:50:33 +03:00
code:
type: string
required:
- description
solutionView:
type: object
properties:
2024-01-05 03:50:33 +03:00
text:
type: string
2024-01-05 03:50:33 +03:00
after:
type: integer
2024-01-05 03:50:33 +03:00
required:
- after
gameEdit:
type: object
properties:
title:
type: string
description:
type: string
2024-01-05 03:50:33 +03:00
type:
$ref: "#/components/schemas/gameType"
tasks:
type: array
items:
2024-01-05 03:50:33 +03:00
$ref: "#/components/schemas/taskEdit"
points:
type: integer
2024-01-20 21:37:49 +03:00
icon:
type: string
format: uuid
required:
- title
- description
2024-01-05 03:50:33 +03:00
- type
- tasks
- points
2024-01-20 21:37:49 +03:00
- icon
2024-01-05 03:50:33 +03:00
taskEdit:
2023-11-19 22:54:54 +03:00
type: object
properties:
title:
type: string
2024-01-05 03:50:33 +03:00
text:
type: string
codes:
type: array
items:
$ref: '#/components/schemas/codeEdit'
solutions:
type: array
items:
$ref: '#/components/schemas/solutionEdit'
required:
- title
- text
- codes
- solutions
codeEdit:
type: object
properties:
description:
type: string
code:
2023-11-19 22:54:54 +03:00
type: string
2024-01-05 03:50:33 +03:00
required:
- description
- code
solutionEdit:
type: object
properties:
text:
type: string
after:
type: integer
required:
- after
- text
gameType:
type: string
enum:
- virtual
- city
2023-11-01 23:21:12 +03:00
requestBodies:
login:
required: true
content:
'application/json':
schema:
type: object
properties:
email:
type: string
password:
type: string
required: [ email, password ]
register:
required: true
content:
'application/json':
schema:
type: object
properties:
username:
type: string
email:
type: string
password:
type: string
password2:
type: string
required: [ username, email, password, password2 ]
2024-01-05 03:50:33 +03:00
gameEditRequest:
required: true
content:
'application/json':
schema:
$ref: '#/components/schemas/gameEdit'
enterCodeRequest:
required: true
content:
'application/json':
schema:
type: object
properties:
code:
type: string
required:
- code
2023-11-01 23:21:12 +03:00
responses:
userResponse:
description: ''
content:
'application/json':
schema:
2024-01-21 02:20:59 +03:00
$ref: "#/components/schemas/userView"
2023-11-01 23:21:12 +03:00
errorResponse:
description: ''
content:
'application/json':
schema:
type: object
properties:
code:
type: integer
message:
type: string
required: [ code, message ]
gameListResponse:
description: ''
content:
'application/json':
schema:
type: array
items:
$ref: "#/components/schemas/gameView"
gameResponse:
description: ''
content:
'application/json':
schema:
$ref: "#/components/schemas/gameView"
2024-01-05 03:50:33 +03:00
taskResponse:
2023-11-19 22:54:54 +03:00
description: ''
content:
'application/json':
schema:
2024-01-05 03:50:33 +03:00
$ref: "#/components/schemas/taskView"
2024-01-20 21:37:49 +03:00
uploadResponse:
description: ''
content:
'application/json':
schema:
type: object
properties:
uuid:
type: string
format: uuid
required:
- uuid
2023-11-01 23:21:12 +03:00
securitySchemes:
cookieAuth:
type: apiKey
in: cookie
name: session
security:
- cookieAuth: []