openapi: 3.0.0 info: title: Albatross internal web API version: 0.3.0 tags: [] paths: /games: get: operationId: getGames parameters: [] responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: games: type: array items: $ref: '#/components/schemas/Game' required: - games '401': description: Access is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Access is forbidden. content: application/json: schema: $ref: '#/components/schemas/Error' /games/{game_id}: get: operationId: getGame parameters: - name: game_id in: path required: true schema: type: integer responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: game: $ref: '#/components/schemas/Game' required: - game '401': description: Access is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Access is forbidden. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: The server cannot find the requested resource. content: application/json: schema: $ref: '#/components/schemas/Error' /games/{game_id}/play/code: post: operationId: postGamePlayCode parameters: - name: game_id in: path required: true schema: type: integer responses: '200': description: The request has succeeded. '401': description: Access is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Access is forbidden. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: The server cannot find the requested resource. content: application/json: schema: $ref: '#/components/schemas/Error' requestBody: required: true content: application/json: schema: type: object properties: code: type: string required: - code /games/{game_id}/play/latest_state: get: operationId: getGamePlayLatestState parameters: - name: game_id in: path required: true schema: type: integer responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: state: $ref: '#/components/schemas/LatestGameState' required: - state '401': description: Access is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Access is forbidden. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: The server cannot find the requested resource. content: application/json: schema: $ref: '#/components/schemas/Error' /games/{game_id}/play/submit: post: operationId: postGamePlaySubmit parameters: - name: game_id in: path required: true schema: type: integer responses: '200': description: The request has succeeded. '401': description: Access is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Access is forbidden. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: The server cannot find the requested resource. content: application/json: schema: $ref: '#/components/schemas/Error' requestBody: required: true content: application/json: schema: type: object properties: code: type: string required: - code /games/{game_id}/watch/latest_states: get: operationId: getGameWatchLatestStates parameters: - name: game_id in: path required: true schema: type: integer responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: states: type: object additionalProperties: $ref: '#/components/schemas/LatestGameState' required: - states '401': description: Access is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Access is forbidden. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: The server cannot find the requested resource. content: application/json: schema: $ref: '#/components/schemas/Error' /games/{game_id}/watch/ranking: get: operationId: getGameWatchRanking parameters: - name: game_id in: path required: true schema: type: integer responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: ranking: type: array items: $ref: '#/components/schemas/RankingEntry' required: - ranking '401': description: Access is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Access is forbidden. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: The server cannot find the requested resource. content: application/json: schema: $ref: '#/components/schemas/Error' /login: post: operationId: postLogin parameters: [] responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: user: $ref: '#/components/schemas/User' required: - user '401': description: Access is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' requestBody: required: true content: application/json: schema: type: object properties: username: type: string password: type: string required: - username - password /logout: post: operationId: postLogout parameters: [] responses: '200': description: The request has succeeded. '401': description: Access is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' /me: get: operationId: getMe parameters: [] responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: user: $ref: '#/components/schemas/User' required: - user '401': description: Access is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' /tournament: get: operationId: getTournament parameters: - name: game1 in: query required: true schema: type: integer explode: false - name: game2 in: query required: true schema: type: integer explode: false - name: game3 in: query required: true schema: type: integer explode: false - name: game4 in: query required: true schema: type: integer explode: false - name: game5 in: query required: true schema: type: integer explode: false responses: '200': description: The request has succeeded. content: application/json: schema: type: object properties: tournament: $ref: '#/components/schemas/Tournament' required: - tournament '401': description: Access is unauthorized. content: application/json: schema: $ref: '#/components/schemas/Error' '403': description: Access is forbidden. content: application/json: schema: $ref: '#/components/schemas/Error' '404': description: The server cannot find the requested resource. content: application/json: schema: $ref: '#/components/schemas/Error' components: schemas: Error: type: object required: - message properties: message: type: string ExecutionStatus: type: string enum: - none - running - success - wrong_answer - timeout - compile_error - runtime_error - internal_error Game: type: object required: - game_id - game_type - is_public - display_name - duration_seconds - problem - main_players properties: game_id: type: integer game_type: $ref: '#/components/schemas/GameType' is_public: type: boolean display_name: type: string duration_seconds: type: integer started_at: type: integer x-go-type: int64 problem: $ref: '#/components/schemas/Problem' main_players: type: array items: $ref: '#/components/schemas/User' GameType: type: string enum: - 1v1 - multiplayer LatestGameState: type: object required: - code - score - best_score_submitted_at - status properties: code: type: string score: type: integer nullable: true best_score_submitted_at: type: integer nullable: true x-go-type: int64 status: $ref: '#/components/schemas/ExecutionStatus' Problem: type: object required: - problem_id - title - description - language - sample_code properties: problem_id: type: integer title: type: string description: type: string language: $ref: '#/components/schemas/ProblemLanguage' sample_code: type: string ProblemLanguage: type: string enum: - php - swift RankingEntry: type: object required: - player - score - submitted_at - code properties: player: $ref: '#/components/schemas/User' score: type: integer submitted_at: type: integer x-go-type: int64 code: type: string nullable: true Tournament: type: object required: - matches properties: matches: type: array items: $ref: '#/components/schemas/TournamentMatch' TournamentMatch: type: object required: - game_id properties: game_id: type: integer player1: $ref: '#/components/schemas/User' player2: $ref: '#/components/schemas/User' player1_score: type: integer player2_score: type: integer winner: type: integer User: type: object required: - user_id - username - display_name - is_admin - label properties: user_id: type: integer username: type: string display_name: type: string icon_path: type: string is_admin: type: boolean label: type: string nullable: true