437 lines
9.4 KiB
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: []
|