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: []