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' /tournaments/{tournament_id}: get: operationId: getTournament parameters: - name: tournament_id in: path required: true schema: type: integer 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: - tournament_id - display_name - bracket_size - num_rounds - entries - matches properties: tournament_id: type: integer display_name: type: string bracket_size: type: integer num_rounds: type: integer entries: type: array items: $ref: '#/components/schemas/TournamentEntry' matches: type: array items: $ref: '#/components/schemas/TournamentMatch' TournamentEntry: type: object required: - user - seed properties: user: $ref: '#/components/schemas/User' seed: type: integer TournamentMatch: type: object required: - tournament_match_id - round - position - is_bye properties: tournament_match_id: type: integer round: type: integer position: type: integer game_id: type: integer player1: $ref: '#/components/schemas/User' player2: $ref: '#/components/schemas/User' player1_score: type: integer player2_score: type: integer winner_user_id: type: integer is_bye: type: boolean 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