nquest/api/openapi.yaml

437 lines
9.4 KiB
YAML

openapi: "3.1.0"
info:
version: 1.0.0
title: nQuest
servers:
- url: /api
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'
# Game routes
/games:
get:
responses:
200:
$ref: '#/components/responses/gameListResponse'
post:
operationId: createGame
security:
- cookieAuth: [creator, admin]
requestBody:
$ref: "#/components/requestBodies/gameEditRequest"
responses:
200:
$ref: "#/components/responses/gameResponse"
/engine/{uid}:
get:
operationId: gameEngine
parameters:
- name: uid
in: path
required: true
schema:
type: string
format: uuid
responses:
200:
$ref: '#/components/responses/taskResponse'
/engine/{uid}/code:
post:
operationId: enterCode
parameters:
- name: uid
in: path
required: true
schema:
type: string
format: uuid
requestBody:
$ref: "#/components/requestBodies/enterCodeRequest"
responses:
200:
$ref: '#/components/responses/taskResponse'
/file/upload:
post:
operationId: uploadFile
security:
- cookieAuth: [creator, admin]
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
/games/{uid}:
post:
operationId: editGame
parameters:
- name: uid
in: path
required: true
schema:
type: string
format: uuid
security:
- cookieAuth: [creator, admin]
requestBody:
$ref: "#/components/requestBodies/gameEditRequest"
responses:
200:
$ref: "#/components/responses/gameResponse"
components:
schemas:
userView:
type: object
properties:
id:
type: string
format: uuid
username:
type: string
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
gameView:
type: object
properties:
id:
type: string
format: uuid
title:
type: string
description:
type: string
type:
$ref: "#/components/schemas/gameType"
points:
type: integer
taskCount:
type: integer
createdAt:
type: string
authors:
type: array
items:
$ref: "#/components/schemas/userView"
icon:
type: string
format: uuid
required:
- id
- title
- description
- type
- points
- taskCount
- createdAt
- authors
- icon
taskView:
type: object
properties:
message:
type: string
enum:
- ok_code
- invalid_code
- old_code
- next_level
- game_complete
title:
type: string
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:
type: object
properties:
description:
type: string
code:
type: string
required:
- description
solutionView:
type: object
properties:
text:
type: string
after:
type: integer
required:
- after
gameEdit:
type: object
properties:
title:
type: string
description:
type: string
type:
$ref: "#/components/schemas/gameType"
tasks:
type: array
items:
$ref: "#/components/schemas/taskEdit"
points:
type: integer
icon:
type: string
format: uuid
required:
- title
- description
- type
- tasks
- points
- icon
taskEdit:
type: object
properties:
title:
type: string
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:
type: string
required:
- description
- code
# solutionEdit:
# type: object
# properties:
# text:
# type: string
# after:
# type: integer
# required:
# - after
# - text
gameType:
type: string
enum:
- virtual
- city
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 ]
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
responses:
userResponse:
description: ''
content:
'application/json':
schema:
$ref: "#/components/schemas/userView"
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"
taskResponse:
description: ''
content:
'application/json':
schema:
$ref: "#/components/schemas/taskView"
uploadResponse:
description: ''
content:
'application/json':
schema:
type: object
properties:
uuid:
type: string
format: uuid
required:
- uuid
securitySchemes:
cookieAuth:
type: apiKey
in: cookie
name: session
security:
- cookieAuth: []