{ "swagger": "2.0", "info": { "title": "github.com/hhhapz/codequest/api/v1/all.proto", "version": "version not set" }, "tags": [ { "name": "AuthService" }, { "name": "QuestService" }, { "name": "UserService" } ], "consumes": [ "application/json" ], "produces": [ "application/json" ], "paths": { "/v1/admin/users": { "get": { "operationId": "UserService_AllUsers", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1AllUsersResponse" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "tags": [ "UserService" ] } }, "/v1/admin/users/{body.email}": { "patch": { "operationId": "UserService_AdminUpdateUser", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1User" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "parameters": [ { "name": "body.email", "in": "path", "required": true, "type": "string" }, { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1AdminUpdateFields" } } ], "tags": [ "UserService" ] } }, "/v1/admin/users/{email}": { "get": { "operationId": "UserService_UserByEmail", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1User" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "parameters": [ { "name": "email", "in": "path", "required": true, "type": "string" } ], "tags": [ "UserService" ] }, "delete": { "operationId": "UserService_DeleteUser", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1User" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "parameters": [ { "name": "email", "in": "path", "required": true, "type": "string" } ], "tags": [ "UserService" ] } }, "/v1/auth/code": { "get": { "operationId": "AuthService_OAuthCode", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1OAuthCodeResponse" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "tags": [ "AuthService" ] } }, "/v1/auth/token": { "get": { "operationId": "AuthService_Token", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1Token" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "parameters": [ { "name": "code", "in": "query", "required": false, "type": "string" }, { "name": "state", "in": "query", "required": false, "type": "string" } ], "tags": [ "AuthService" ] }, "delete": { "operationId": "AuthService_DeleteToken", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1DeleteTokenResponse" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "parameters": [ { "name": "all", "in": "query", "required": false, "type": "boolean" }, { "name": "token.token", "in": "query", "required": false, "type": "string" }, { "name": "token.expires", "in": "query", "required": false, "type": "string" } ], "tags": [ "AuthService" ] } }, "/v1/questions": { "get": { "summary": "Questions returns the list of available questions.\nEach question is also listed with whether it has been answered, and\nthe points awarded for answering it correctly.", "description": "The Text field will not be populated. To get the text, use QuestionByID.", "operationId": "QuestService_Questions", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1QuestionsResponse" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "tags": [ "QuestService" ] } }, "/v1/questions/leaderboard": { "get": { "summary": "Leaderboard returns the global ranking of all participatants.\nThe leaderboard is sorted by score, descending.", "operationId": "QuestService_Leaderboard", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1LeaderboardResponse" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "tags": [ "QuestService" ] } }, "/v1/questions/{id}": { "get": { "summary": "QuestionByID returns the question with the given ID.", "operationId": "QuestService_QuestionByID", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1Question" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string" } ], "tags": [ "QuestService" ] } }, "/v1/questions/{id}/input": { "get": { "summary": "QuestionInput returns the question input for the given question.\nThe input is the same for part 1 and part 2.", "operationId": "QuestService_QuestionInput", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1QuestionInput" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string" } ], "tags": [ "QuestService" ] } }, "/v1/questions/{id}/{part}": { "post": { "summary": "Submit submits the answer to the given question and part.", "operationId": "QuestService_Submit", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1SubmitResponse" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "parameters": [ { "name": "id", "in": "path", "required": true, "type": "string" }, { "name": "part", "in": "path", "required": true, "type": "integer", "format": "int32" }, { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1SubmitRequestData" } } ], "tags": [ "QuestService" ] } }, "/v1/users/me": { "get": { "operationId": "UserService_Info", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1Info" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "tags": [ "UserService" ] }, "patch": { "operationId": "UserService_UpdateUser", "responses": { "200": { "description": "A successful response.", "schema": { "$ref": "#/definitions/v1User" } }, "default": { "description": "An unexpected error response.", "schema": { "$ref": "#/definitions/rpcStatus" } } }, "parameters": [ { "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/v1UpdateFields" } } ], "tags": [ "UserService" ] } } }, "definitions": { "protobufAny": { "type": "object", "properties": { "@type": { "type": "string" } }, "additionalProperties": {} }, "rpcStatus": { "type": "object", "properties": { "code": { "type": "integer", "format": "int32" }, "message": { "type": "string" }, "details": { "type": "array", "items": { "$ref": "#/definitions/protobufAny" } } } }, "v1AdminUpdateFields": { "type": "object", "properties": { "email": { "type": "string" }, "name": { "type": "string" }, "gradeLevel": { "type": "integer", "format": "int32" }, "admin": { "type": "boolean" } } }, "v1AllUsersResponse": { "type": "object", "properties": { "users": { "type": "array", "items": { "$ref": "#/definitions/v1User" } } } }, "v1DeleteTokenResponse": { "type": "object" }, "v1Difficulty": { "type": "string", "enum": [ "Level1", "Level2" ], "default": "Level1" }, "v1Info": { "type": "object", "properties": { "currentUser": { "$ref": "#/definitions/v1User" }, "active": { "type": "boolean" }, "points": { "type": "integer", "format": "int32" }, "startTime": { "type": "string" }, "endTime": { "type": "string" } }, "description": "Info is the current information about the competition." }, "v1LeaderboardEntry": { "type": "object", "properties": { "username": { "type": "string" }, "points": { "type": "integer", "format": "int32" } } }, "v1LeaderboardResponse": { "type": "object", "properties": { "leaderboard": { "type": "array", "items": { "$ref": "#/definitions/v1LeaderboardEntry" } } } }, "v1OAuthCodeResponse": { "type": "object", "properties": { "redirectURI": { "type": "string" } } }, "v1PartData": { "type": "object", "properties": { "completed": { "type": "boolean" }, "pointsWorth": { "type": "integer", "format": "int32" } } }, "v1Question": { "type": "object", "properties": { "id": { "type": "string" }, "title": { "type": "string" }, "text": { "type": "string" }, "difficulty": { "$ref": "#/definitions/v1Difficulty" }, "part1": { "$ref": "#/definitions/v1PartData" }, "part2": { "$ref": "#/definitions/v1PartData" } } }, "v1QuestionInput": { "type": "object", "properties": { "id": { "type": "string" }, "input": { "type": "string" } } }, "v1QuestionsResponse": { "type": "object", "properties": { "questions": { "type": "array", "items": { "$ref": "#/definitions/v1Question" } } } }, "v1SubmitRequestData": { "type": "object", "properties": { "answer": { "type": "string" }, "code": { "type": "string" } } }, "v1SubmitResponse": { "type": "object", "properties": { "correct": { "type": "boolean" }, "points": { "type": "integer", "format": "int32" } } }, "v1Token": { "type": "object", "properties": { "token": { "type": "string" }, "expires": { "type": "string" } } }, "v1UpdateFields": { "type": "object", "properties": { "name": { "type": "string" }, "gradeLevel": { "type": "integer", "format": "int32" }, "admin": { "type": "boolean" } } }, "v1User": { "type": "object", "properties": { "id": { "type": "string", "description": "ID of the user. Received via Google's OAuth2 API." }, "name": { "type": "string", "description": "Name of the user." }, "email": { "type": "string", "description": "Email of the user." }, "picture": { "type": "string", "description": "Picture is the URL of the user's profile picture." }, "admin": { "type": "boolean", "description": "Admin is true if the user is an administrator." }, "createdAt": { "type": "string", "description": "CreatedAt is the time the user was created." } }, "description": "User is a contestant in the competition." } } }