Files
evening_detective_server/cmd/evening_detective_server/main.swagger.json
T
2026-10-17 16:00:21 +07:00

6600 lines
182 KiB
JSON

{
"swagger": "2.0",
"info": {
"title": "Документация сервиса \"Вечерний детектив\"",
"version": "v0.1.0"
},
"tags": [
{
"name": "EveningDetectiveServer"
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {
"/api/admin/game-reviews": {
"get": {
"summary": "Получить общую очередь отзывов",
"operationId": "EveningDetectiveServer_GetReviewsForModeration",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetGameReviewsRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Отзывы"
]
}
},
"/api/admin/game-reviews/{ID}": {
"put": {
"summary": "Модерировать отзыв",
"operationId": "EveningDetectiveServer_ModerateGameReview",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverModerateGameReviewRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerModerateGameReviewBody"
}
}
],
"tags": [
"Отзывы"
]
}
},
"/api/admin/games/{gameID}/reviews": {
"get": {
"summary": "Получить отзывы игры для модерации",
"operationId": "EveningDetectiveServer_GetGameReviewsForModeration",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetGameReviewsRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Отзывы"
]
}
},
"/api/auth/delete-account": {
"delete": {
"summary": "Удалить учётную запись и персональные данные",
"description": "Удаляет учётную запись и персональные данные текущего пользователя (ст. 21 152-ФЗ). Требует заголовок X-Password с паролем учётной записи (подтверждение владельца; пароль не передаётся в URL).",
"operationId": "EveningDetectiveServer_DeleteAccount",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeleteAccountRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Регистрация и вход"
]
}
},
"/api/auth/login": {
"post": {
"summary": "Войти и получить токена доступа",
"operationId": "EveningDetectiveServer_Login",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverLoginRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverLoginReq"
}
}
],
"tags": [
"Регистрация и вход"
],
"security": [
{
"": []
}
]
}
},
"/api/auth/refresh": {
"post": {
"summary": "Обновить токена доступа",
"operationId": "EveningDetectiveServer_Refresh",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverRefreshRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverRefreshReq"
}
}
],
"tags": [
"Регистрация и вход"
],
"security": [
{
"": []
}
]
}
},
"/api/auth/refresh-password": {
"post": {
"summary": "Обновить пароль",
"operationId": "EveningDetectiveServer_RefreshPassword",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverRefreshPasswordRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverRefreshPasswordReq"
}
}
],
"tags": [
"Регистрация и вход"
],
"security": [
{
"": []
}
]
}
},
"/api/auth/signup": {
"post": {
"summary": "Зарегистрироваться",
"operationId": "EveningDetectiveServer_Signup",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverSignupRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverSignupReq"
}
}
],
"tags": [
"Регистрация и вход"
],
"security": [
{
"": []
}
]
}
},
"/api/catalog": {
"get": {
"summary": "Получить каталог сценариев",
"operationId": "EveningDetectiveServer_GetScenariosCatalog",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetScenariosCatalogRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Сценарии"
]
}
},
"/api/consent": {
"get": {
"summary": "Получить текст Согласия на обработку персональных данных",
"operationId": "EveningDetectiveServer_GetConsent",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetConsentRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Документы"
]
}
},
"/api/devices": {
"get": {
"summary": "Получить устройства площадки",
"description": "Только venue; организатор, администратор или разработчик. Связь актуальна менее 60 секунд; подключения удаляются через 15 минут. Фильтр gameID оставляет только подключения указанной игры.",
"operationId": "EveningDetectiveServer_GetDevices",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetDevicesRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "query",
"required": false,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Устройства"
]
}
},
"/api/devices/heartbeat": {
"post": {
"summary": "Обновить присутствие подключения браузера",
"description": "Публичный endpoint. Контексты взаимоисключающие и проверяются сервером. В prod enabled=false без регистрации. UUID обозначает браузерный профиль, не физический телефон.",
"operationId": "EveningDetectiveServer_DeviceHeartbeat",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeviceHeartbeatRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverDeviceHeartbeatReq"
}
}
],
"tags": [
"Устройства"
],
"security": []
}
},
"/api/files/upload": {
"post": {
"summary": "Загрузить файл",
"operationId": "EveningDetectiveServer_UploadFile",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUploadFileRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverUploadFileReq"
}
}
],
"tags": [
"Файлы"
]
}
},
"/api/files/{filename}": {
"get": {
"summary": "Получить файл",
"operationId": "EveningDetectiveServer_DownloadFile",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/apiHttpBody"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "filename",
"in": "path",
"required": true,
"type": "string"
}
],
"tags": [
"Файлы"
]
}
},
"/api/games": {
"get": {
"summary": "Получить игры",
"operationId": "EveningDetectiveServer_GetGames",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetGamesRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Игры"
]
},
"post": {
"summary": "Создать игру",
"operationId": "EveningDetectiveServer_AddGame",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverAddGameRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverAddGameReq"
}
}
],
"tags": [
"Игры"
]
}
},
"/api/games/import": {
"post": {
"summary": "HTTP uploads are streamed by a dedicated handler, bypassing gRPC message limits.",
"operationId": "EveningDetectiveServer_ImportGame",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGameImportRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged.",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/apiHttpBody"
}
}
],
"tags": [
"EveningDetectiveServer"
]
}
},
"/api/games/{ID}": {
"get": {
"summary": "Получить игру",
"operationId": "EveningDetectiveServer_GetGame",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetGameRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Игры"
]
},
"delete": {
"summary": "Удалить игру",
"operationId": "EveningDetectiveServer_DeleteGame",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeleteGameRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Игры"
]
},
"put": {
"summary": "Обновить игру",
"operationId": "EveningDetectiveServer_UpdateGame",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUpdateGameRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUpdateGameBody"
}
}
],
"tags": [
"Игры"
]
}
},
"/api/games/{ID}/export": {
"get": {
"operationId": "EveningDetectiveServer_GetGameExport",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGameExportRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"EveningDetectiveServer"
]
},
"post": {
"summary": "Each request creates a fresh setup package, replacing any unfinished preparation.",
"operationId": "EveningDetectiveServer_StartGameExport",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGameExportRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerStartGameExportBody"
}
}
],
"tags": [
"EveningDetectiveServer"
]
}
},
"/api/games/{ID}/finish": {
"put": {
"summary": "Закончить игру",
"operationId": "EveningDetectiveServer_FinishGame",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverFinishGameRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerFinishGameBody"
}
}
],
"tags": [
"Игры"
]
}
},
"/api/games/{ID}/local-mode/reset": {
"post": {
"summary": "Release the transfer without discarding ready packages or their future results.",
"operationId": "EveningDetectiveServer_ResetGameLocalMode",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverResetGameLocalModeRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerResetGameLocalModeBody"
}
}
],
"tags": [
"EveningDetectiveServer"
]
}
},
"/api/games/{ID}/pause": {
"put": {
"summary": "Остановить игру",
"operationId": "EveningDetectiveServer_PauseGame",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverPauseGameRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerPauseGameBody"
}
}
],
"tags": [
"Игры"
]
}
},
"/api/games/{ID}/play": {
"put": {
"summary": "Продолжить игру",
"operationId": "EveningDetectiveServer_PlayGame",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverPlayGameRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerPlayGameBody"
}
}
],
"tags": [
"Игры"
]
}
},
"/api/games/{ID}/print-materials": {
"get": {
"summary": "Скачать материалы игры для печати ZIP-архивом",
"operationId": "EveningDetectiveServer_DownloadGamePrintMaterials",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/apiHttpBody"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Игры"
]
}
},
"/api/games/{ID}/reset": {
"put": {
"summary": "Сбросить игру",
"operationId": "EveningDetectiveServer_ResetGame",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverResetGameRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerResetGameBody"
}
}
],
"tags": [
"Игры"
]
}
},
"/api/games/{ID}/results-package/apply": {
"post": {
"summary": "Применить ZIP результатов на исходной prod-игре",
"description": "HTTP принимает сырой ZIP до 1 ГиБ, включая поток без Content-Length. Ошибки: 400 неверный пакет/игра, 413 размер, 409 конфликт, 503 временный отказ.",
"operationId": "EveningDetectiveServer_ApplyGameResultsPackage",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGameResultsPackageRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "package",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/apiHttpBody"
}
}
],
"tags": [
"Игры"
],
"consumes": [
"application/zip"
],
"produces": [
"application/json"
]
}
},
"/api/games/{ID}/results-package/download": {
"get": {
"summary": "Скачать свежий ZIP результатов завершённой venue-игры",
"operationId": "EveningDetectiveServer_DownloadGameResultsPackage",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/apiHttpBody"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Игры"
],
"produces": [
"application/zip"
]
}
},
"/api/games/{ID}/start": {
"put": {
"summary": "Начать игру",
"operationId": "EveningDetectiveServer_StartGame",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverStartGameRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerStartGameBody"
}
}
],
"tags": [
"Игры"
]
}
},
"/api/games/{ID}/teams/qr.pdf": {
"get": {
"summary": "Скачать PDF с QR-кодами всех команд игры",
"operationId": "EveningDetectiveServer_DownloadTeamQR",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/apiHttpBody"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Игры"
]
}
},
"/api/games/{gameID}/answers": {
"get": {
"summary": "Получить ответы команд на вопросы дела (для оценки организатором)",
"operationId": "EveningDetectiveServer_GetGameAnswers",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetGameAnswersRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Игры"
]
}
},
"/api/games/{gameID}/map": {
"get": {
"summary": "Получить карту игры",
"operationId": "EveningDetectiveServer_GetGameMap",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetGameMapRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Экраны"
]
}
},
"/api/games/{gameID}/map/items/{kind}/{itemID}": {
"post": {
"summary": "Изменить объект карты игры",
"operationId": "EveningDetectiveServer_UpdateGameMapItem",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUpdateGameMapItemRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "kind",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "itemID",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUpdateGameMapItemBody"
}
}
],
"tags": [
"Экраны"
]
}
},
"/api/games/{gameID}/music": {
"get": {
"summary": "Получить музыку игры",
"operationId": "EveningDetectiveServer_GetGameMusic",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetGameMusicRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Музыка"
]
},
"post": {
"summary": "Изменить музыку игры",
"operationId": "EveningDetectiveServer_SetGameMusic",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverSetGameMusicRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerSetGameMusicBody"
}
}
],
"tags": [
"Музыка"
]
}
},
"/api/games/{gameID}/results": {
"get": {
"summary": "Получить итоговую таблицу игры (после завершения)",
"operationId": "EveningDetectiveServer_GetGameResults",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetGameResultsRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Игры"
]
}
},
"/api/games/{gameID}/reviews": {
"get": {
"summary": "Получить отзывы об игре",
"operationId": "EveningDetectiveServer_GetGameReviews",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetGameReviewsRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Отзывы"
],
"security": [
{
"": []
}
]
},
"post": {
"summary": "Оставить отзыв об игре",
"operationId": "EveningDetectiveServer_CreateGameReview",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverCreateGameReviewRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerCreateGameReviewBody"
}
}
],
"tags": [
"Отзывы"
],
"security": [
{
"": []
}
]
}
},
"/api/games/{gameID}/screen-plan": {
"get": {
"summary": "Получить план экранов",
"operationId": "EveningDetectiveServer_GetScreenPlan",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetScreenPlanRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Экраны"
]
},
"put": {
"summary": "Сохранить план экранов",
"operationId": "EveningDetectiveServer_SaveScreenPlan",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverSaveScreenPlanRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerSaveScreenPlanBody"
}
}
],
"tags": [
"Экраны"
]
}
},
"/api/games/{gameID}/screen-plan/step": {
"post": {
"summary": "Перейти на шаг плана экранов",
"operationId": "EveningDetectiveServer_SetScreenPlanStep",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverSetScreenPlanStepRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerSetScreenPlanStepBody"
}
}
],
"tags": [
"Экраны"
]
}
},
"/api/games/{gameID}/screens": {
"get": {
"summary": "Получить экраны игры",
"operationId": "EveningDetectiveServer_GetGameScreens",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetGameScreensRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Экраны"
]
}
},
"/api/games/{gameID}/screens/command": {
"post": {
"summary": "Отправить команду экранам",
"operationId": "EveningDetectiveServer_SendScreenCommand",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverSendScreenCommandRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerSendScreenCommandBody"
}
}
],
"tags": [
"Экраны"
]
}
},
"/api/games/{gameID}/screens/mode": {
"post": {
"summary": "Изменить режим показа экранов",
"operationId": "EveningDetectiveServer_SetScreenMode",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverSetScreenModeRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerSetScreenModeBody"
}
}
],
"tags": [
"Экраны"
]
}
},
"/api/games/{gameID}/screens/timer": {
"post": {
"summary": "Настроить таймер экранов",
"operationId": "EveningDetectiveServer_SetScreenTimer",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverSetScreenTimerRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerSetScreenTimerBody"
}
}
],
"tags": [
"Экраны"
]
}
},
"/api/games/{gameID}/teams/{teamID}/receipt.png": {
"get": {
"summary": "Предпросмотр чека команды на локальной площадке",
"operationId": "EveningDetectiveServer_PreviewTeamReceipt",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/apiHttpBody"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "teamID",
"in": "path",
"required": true,
"type": "string"
}
],
"tags": [
"Игры"
]
}
},
"/api/games/{gameID}/teams/{teamID}/receipt/print": {
"post": {
"summary": "Напечатать один чек команды на MXW01 локальной площадки",
"operationId": "EveningDetectiveServer_PrintTeamReceipt",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverPrintTeamReceiptRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "teamID",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerPrintTeamReceiptBody"
}
}
],
"tags": [
"Игры"
]
}
},
"/api/games/{gameID}/tickets": {
"post": {
"summary": "Выпустить билеты на игру",
"operationId": "EveningDetectiveServer_IssueGameTickets",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverIssueGameTicketsRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "gameID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerIssueGameTicketsBody"
}
}
],
"tags": [
"Билеты"
],
"security": [
{
"": []
}
]
}
},
"/api/my-scenarios": {
"get": {
"summary": "Получить свои сценарии",
"operationId": "EveningDetectiveServer_GetMyScenarios",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetMyScenariosRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Сценарии"
]
}
},
"/api/participation/answer": {
"post": {
"summary": "Подтвердить или отменить участие",
"description": "Принимает окончательный ответ капитана: confirmed или cancelled. Авторизация JWT не требуется; доступ определяется персональным токеном. Первый ответ сохраняется, повтор того же ответа успешен, противоположный ответ отклоняется. Новый ответ принимается только до планового начала игры и пока игра имеет статус draft. Ошибки ссылки, значения answer, закрытого приёма или изменения решения возвращаются стандартным gRPC status error; при уже принятом решении возвращается его текущее состояние.",
"operationId": "EveningDetectiveServer_AnswerParticipation",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverParticipationRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverAnswerParticipationReq"
}
}
],
"tags": [
"Подтверждение участия"
],
"security": []
}
},
"/api/participation/get": {
"post": {
"summary": "Получить состояние участия",
"description": "Возвращает команду, игру и текущее решение по персональному токену из письма. Авторизация JWT не требуется. Чтение не меняет статус участия. Токен передаётся в теле запроса. Недействительная ссылка и ошибки обработки возвращаются стандартным gRPC status error.",
"operationId": "EveningDetectiveServer_GetParticipation",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverParticipationRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverGetParticipationReq"
}
}
],
"tags": [
"Подтверждение участия"
],
"security": []
}
},
"/api/playlists": {
"get": {
"summary": "Получить плейлисты",
"operationId": "EveningDetectiveServer_GetPlaylists",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetPlaylistsRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Музыка"
]
},
"post": {
"summary": "Создать плейлист",
"operationId": "EveningDetectiveServer_CreatePlaylist",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverCreatePlaylistRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverCreatePlaylistReq"
}
}
],
"tags": [
"Музыка"
]
}
},
"/api/playlists/{ID}": {
"delete": {
"summary": "Удалить плейлист",
"operationId": "EveningDetectiveServer_DeletePlaylist",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeletePlaylistRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Музыка"
]
},
"put": {
"summary": "Изменить плейлист",
"operationId": "EveningDetectiveServer_UpdatePlaylist",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUpdatePlaylistRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUpdatePlaylistBody"
}
}
],
"tags": [
"Музыка"
]
}
},
"/api/playlists/{playlistID}/tracks": {
"post": {
"summary": "Загрузить MP3 в плейлист",
"operationId": "EveningDetectiveServer_UploadPlaylistTrack",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUploadPlaylistTrackRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "playlistID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUploadPlaylistTrackBody"
}
}
],
"tags": [
"Музыка"
]
}
},
"/api/playlists/{playlistID}/tracks/{trackID}": {
"delete": {
"summary": "Удалить MP3 из плейлиста",
"operationId": "EveningDetectiveServer_DeletePlaylistTrack",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeletePlaylistTrackRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "playlistID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "trackID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Музыка"
]
}
},
"/api/privacy": {
"get": {
"summary": "Получить текст Политики конфиденциальности",
"operationId": "EveningDetectiveServer_GetPrivacy",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetPrivacyRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Документы"
]
}
},
"/api/scenario": {
"post": {
"summary": "Создать сценарий",
"operationId": "EveningDetectiveServer_AddScenario",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverAddScenarioRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverAddScenarioReq"
}
}
],
"tags": [
"Сценарии"
]
}
},
"/api/scenarios/archive": {
"post": {
"summary": "Создать сценарий из архива",
"operationId": "EveningDetectiveServer_UploadScenarioArchive",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUploadScenarioArchiveRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged.",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/apiHttpBody"
}
}
],
"tags": [
"Сценарии"
]
}
},
"/api/scenarios/{ID}": {
"get": {
"summary": "Получить сценарий по id",
"operationId": "EveningDetectiveServer_GetScenario",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetScenarioRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Сценарии"
]
},
"delete": {
"summary": "Удалить сценарий",
"operationId": "EveningDetectiveServer_DeleteScenario",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeleteScenarioRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Сценарии"
]
},
"put": {
"summary": "Редактировать сценарий",
"operationId": "EveningDetectiveServer_UpdateScenario",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUpdateScenarioRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUpdateScenarioBody"
}
}
],
"tags": [
"Сценарии"
]
}
},
"/api/scenarios/{ID}/archive": {
"get": {
"summary": "Скачать сценарий архивом (со всеми материалами и картинками)",
"operationId": "EveningDetectiveServer_DownloadScenarioArchive",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/apiHttpBody"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Сценарии"
]
}
},
"/api/scenarios/{ID}/background": {
"put": {
"summary": "Установить или удалить фон дела",
"operationId": "EveningDetectiveServer_UpdateScenarioBackground",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUpdateScenarioBackgroundRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUpdateScenarioBackgroundBody"
}
}
],
"tags": [
"Сценарии"
]
}
},
"/api/scenarios/{ID}/conclusion": {
"put": {
"summary": "Обновить закрывашку сценария (игрокам не передаётся)",
"operationId": "EveningDetectiveServer_UpdateScenarioConclusion",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUpdateScenarioConclusionRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUpdateScenarioConclusionBody"
}
}
],
"tags": [
"Сценарии"
]
}
},
"/api/scenarios/{ID}/draft": {
"put": {
"summary": "Снять с публикации сценарий",
"operationId": "EveningDetectiveServer_DraftScenario",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDraftScenarioRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerDraftScenarioBody"
}
}
],
"tags": [
"Сценарии"
]
}
},
"/api/scenarios/{ID}/full": {
"get": {
"summary": "Получить сценарий со всеми деталями по id",
"operationId": "EveningDetectiveServer_GetFullScenario",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetScenarioRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Сценарии"
]
}
},
"/api/scenarios/{ID}/introduction": {
"put": {
"summary": "Обновить введение сценария",
"operationId": "EveningDetectiveServer_UpdateScenarioIntro",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUpdateScenarioIntroRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUpdateScenarioIntroBody"
}
}
],
"tags": [
"Сценарии"
]
}
},
"/api/scenarios/{ID}/places": {
"post": {
"summary": "Создать точку сценария",
"operationId": "EveningDetectiveServer_AddScenarioPlace",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverAddScenarioPlaceRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerAddScenarioPlaceBody"
}
}
],
"tags": [
"Точки сценария"
]
}
},
"/api/scenarios/{ID}/places/{code}": {
"delete": {
"summary": "Удалить точку сценария",
"operationId": "EveningDetectiveServer_DeleteScenarioPlace",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeleteScenarioPlaceRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "code",
"in": "path",
"required": true,
"type": "string"
}
],
"tags": [
"Точки сценария"
]
},
"put": {
"summary": "Обновить точку сценария",
"operationId": "EveningDetectiveServer_UpdateScenarioPlace",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUpdateScenarioPlaceRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "code",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUpdateScenarioPlaceBody"
}
}
],
"tags": [
"Точки сценария"
]
}
},
"/api/scenarios/{ID}/playlist": {
"put": {
"summary": "Назначить плейлист сценарию",
"operationId": "EveningDetectiveServer_SetScenarioPlaylist",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverSetScenarioPlaylistRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerSetScenarioPlaylistBody"
}
}
],
"tags": [
"Музыка"
]
}
},
"/api/scenarios/{ID}/public": {
"put": {
"summary": "Опубликовать сценарий",
"operationId": "EveningDetectiveServer_PublicScenario",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverPublicScenarioRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerPublicScenarioBody"
}
}
],
"tags": [
"Сценарии"
]
}
},
"/api/scenarios/{ID}/questions": {
"post": {
"summary": "Создать вопрос дела",
"operationId": "EveningDetectiveServer_AddScenarioQuestion",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverAddScenarioQuestionRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerAddScenarioQuestionBody"
}
}
],
"tags": [
"Вопросы сценария"
]
}
},
"/api/scenarios/{ID}/questions/{code}": {
"delete": {
"summary": "Удалить вопрос дела",
"operationId": "EveningDetectiveServer_DeleteScenarioQuestion",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeleteScenarioQuestionRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "code",
"in": "path",
"required": true,
"type": "string"
}
],
"tags": [
"Вопросы сценария"
]
},
"put": {
"summary": "Обновить вопрос дела",
"operationId": "EveningDetectiveServer_UpdateScenarioQuestion",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUpdateScenarioQuestionRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "code",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUpdateScenarioQuestionBody"
}
}
],
"tags": [
"Вопросы сценария"
]
}
},
"/api/scenarios/{scenarioID}/reviews": {
"get": {
"summary": "Получить отзывы сценария",
"operationId": "EveningDetectiveServer_GetScenarioReviews",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetGameReviewsRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "scenarioID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Отзывы"
],
"security": [
{
"": []
}
]
}
},
"/api/screens": {
"post": {
"summary": "Создать сессию экрана",
"operationId": "EveningDetectiveServer_CreateScreenSession",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverCreateScreenSessionRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverCreateScreenSessionReq"
}
}
],
"tags": [
"Экраны"
],
"security": [
{
"": []
}
]
}
},
"/api/screens/music/advance": {
"post": {
"summary": "Перейти к следующему треку экрана",
"operationId": "EveningDetectiveServer_AdvanceScreenMusic",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverAdvanceScreenMusicRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverAdvanceScreenMusicReq"
}
}
],
"tags": [
"Музыка"
],
"security": [
{
"": []
}
]
}
},
"/api/screens/results": {
"post": {
"summary": "Получить результаты для экрана",
"operationId": "EveningDetectiveServer_GetScreenResults",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetScreenResultsRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverGetScreenResultsReq"
}
}
],
"tags": [
"Экраны"
]
}
},
"/api/screens/state": {
"post": {
"summary": "Получить состояние экрана",
"operationId": "EveningDetectiveServer_GetScreenState",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetScreenStateRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverGetScreenStateReq"
}
}
],
"tags": [
"Экраны"
],
"security": [
{
"": []
}
]
}
},
"/api/screens/{screenID}/bind": {
"post": {
"summary": "Привязать экран к игре",
"operationId": "EveningDetectiveServer_BindScreen",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverBindScreenRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "screenID",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerBindScreenBody"
}
}
],
"tags": [
"Экраны"
]
}
},
"/api/screens/{screenID}/sound": {
"post": {
"summary": "Назначить экран со звуком",
"operationId": "EveningDetectiveServer_SetScreenSound",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverSetScreenSoundRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "screenID",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerSetScreenSoundBody"
}
}
],
"tags": [
"Экраны"
]
}
},
"/api/screens/{screenID}/unbind": {
"post": {
"summary": "Отвязать экран от игры",
"operationId": "EveningDetectiveServer_UnbindScreen",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUnbindScreenRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "screenID",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUnbindScreenBody"
}
}
],
"tags": [
"Экраны"
]
}
},
"/api/tasks": {
"get": {
"summary": "Получить общую доску задач",
"description": "Доступно разработчикам и администратору.",
"operationId": "EveningDetectiveServer_GetTasks",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetTasksRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Задачи"
]
},
"post": {
"summary": "Создать задачу",
"description": "Доступно разработчикам и администратору.",
"operationId": "EveningDetectiveServer_CreateTask",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverTaskRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverCreateTaskReq"
}
}
],
"tags": [
"Задачи"
]
}
},
"/api/tasks/assignees": {
"get": {
"summary": "Получить разработчиков для назначения",
"description": "Доступно разработчикам и администратору.",
"operationId": "EveningDetectiveServer_GetTaskAssignees",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetTaskAssigneesRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Задачи"
]
}
},
"/api/tasks/{ID}": {
"put": {
"summary": "Редактировать задачу",
"description": "Доступно разработчикам и администратору.",
"operationId": "EveningDetectiveServer_UpdateTask",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverTaskRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUpdateTaskBody"
}
}
],
"tags": [
"Задачи"
]
}
},
"/api/tasks/{ID}/delete": {
"post": {
"summary": "Удалить задачу",
"description": "Доступно разработчикам и администратору.",
"operationId": "EveningDetectiveServer_DeleteTask",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeleteTaskRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerDeleteTaskBody"
}
}
],
"tags": [
"Задачи"
]
}
},
"/api/tasks/{ID}/status": {
"post": {
"summary": "Изменить статус задачи",
"description": "Доступно разработчикам и администратору.",
"operationId": "EveningDetectiveServer_SetTaskStatus",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverTaskRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerSetTaskStatusBody"
}
}
],
"tags": [
"Задачи"
]
}
},
"/api/teams": {
"post": {
"summary": "Создать команду",
"operationId": "EveningDetectiveServer_AddTeam",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverAddTeamRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/evening_detective_serverAddTeamReq"
}
}
],
"tags": [
"Команда"
]
}
},
"/api/teams/{ID}": {
"delete": {
"summary": "Удалить команду",
"operationId": "EveningDetectiveServer_DeleteTeam",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeleteTeamRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "string"
}
],
"tags": [
"Команда"
]
},
"put": {
"summary": "Обновить команду",
"operationId": "EveningDetectiveServer_UpdateTeam",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverUpdateTeamRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerUpdateTeamBody"
}
}
],
"tags": [
"Команда"
]
}
},
"/api/teams/{ID}/actions": {
"post": {
"summary": "Сделать ход",
"operationId": "EveningDetectiveServer_AddTeamAction",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverAddTeamActionRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerAddTeamActionBody"
}
}
],
"tags": [
"Ходы"
],
"security": [
{
"": []
}
]
}
},
"/api/teams/{ID}/answers": {
"get": {
"summary": "Получить ответы команды на вопросы дела",
"operationId": "EveningDetectiveServer_GetTeamAnswers",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetTeamAnswersRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "password",
"in": "query",
"required": false,
"type": "string"
}
],
"tags": [
"Ходы"
],
"security": [
{
"": []
}
]
},
"post": {
"summary": "Отправить ответы команды на вопросы дела",
"operationId": "EveningDetectiveServer_SubmitTeamAnswers",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverSubmitTeamAnswersRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerSubmitTeamAnswersBody"
}
}
],
"tags": [
"Ходы"
],
"security": [
{
"": []
}
]
}
},
"/api/teams/{ID}/answers/{questionCode}/score": {
"put": {
"summary": "Выставить балл команде за ответ на вопрос дела",
"operationId": "EveningDetectiveServer_SetTeamAnswerScore",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverSetTeamAnswerScoreRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "questionCode",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerSetTeamAnswerScoreBody"
}
}
],
"tags": [
"Игры"
]
}
},
"/api/teams/{ID}/applications": {
"post": {
"summary": "Выдать улику",
"operationId": "EveningDetectiveServer_GiveTeamApplications",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGiveTeamApplicationsRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerGiveTeamApplicationsBody"
}
}
],
"tags": [
"Команда"
]
}
},
"/api/teams/{ID}/last-actions": {
"delete": {
"summary": "Удалить последний ход",
"operationId": "EveningDetectiveServer_DeleteLastTeamAction",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeleteLastTeamActionRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "string"
}
],
"tags": [
"Ходы"
]
}
},
"/api/teams/{ID}/story": {
"get": {
"summary": "Получить ходы",
"operationId": "EveningDetectiveServer_GetTeamStory",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetTeamStoryRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "password",
"in": "query",
"required": false,
"type": "string"
}
],
"tags": [
"Ходы"
],
"security": [
{
"": []
}
]
}
},
"/api/terms": {
"get": {
"summary": "Получить текст Пользовательского соглашения (оферты)",
"operationId": "EveningDetectiveServer_GetTerms",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetTermsRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Документы"
]
}
},
"/api/test/echo": {
"post": {
"summary": "Проверить обработку данных",
"operationId": "EveningDetectiveServer_Echo",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverEchoRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "text",
"in": "query",
"required": false,
"type": "string"
}
],
"tags": [
"EveningDetectiveServer"
],
"security": [
{
"": []
}
]
}
},
"/api/test/ping": {
"get": {
"summary": "Проверить доступность",
"operationId": "EveningDetectiveServer_Ping",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverPingRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"EveningDetectiveServer"
],
"security": [
{
"": []
}
]
}
},
"/api/tickets/{token}": {
"get": {
"summary": "Получить данные билета",
"operationId": "EveningDetectiveServer_GetTicket",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetTicketRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "token",
"in": "path",
"required": true,
"type": "string"
}
],
"tags": [
"Билеты"
],
"security": [
{
"": []
}
]
}
},
"/api/tickets/{token}/accept": {
"post": {
"summary": "Принять билет",
"operationId": "EveningDetectiveServer_AcceptTicket",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverAcceptTicketRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "token",
"in": "path",
"required": true,
"type": "string"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerAcceptTicketBody"
}
}
],
"tags": [
"Билеты"
]
}
},
"/api/ui/permissions": {
"get": {
"summary": "Получить список доступных элементов интерфейса",
"operationId": "EveningDetectiveServer_GetPermissions",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetPermissionsRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Доступы"
]
}
},
"/api/users": {
"get": {
"summary": "Получить всех пользователей",
"operationId": "EveningDetectiveServer_GetUsers",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetUsersRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Пользователи"
]
}
},
"/api/users/me": {
"get": {
"summary": "Получить информацию о себе",
"operationId": "EveningDetectiveServer_GetMe",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetMeRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"tags": [
"Пользователи"
]
}
},
"/api/users/{ID}": {
"get": {
"summary": "Получить пользователя по id",
"operationId": "EveningDetectiveServer_GetUserByID",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverGetUserByIDRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
}
],
"tags": [
"Пользователи"
]
}
},
"/api/users/{ID}/password": {
"post": {
"summary": "Изменить чужой пароль (только администратор)",
"description": "Пароль вводится вручную: минимум 12 символов, максимум 72 байта. Сеансы сохраняются. Ошибки: 401 — нет авторизации, 403 — нет прав, 400 — неверные данные или собственный ID, 404 — пользователь не найден, 500 — ошибка сохранения.",
"operationId": "EveningDetectiveServer_ChangeUserPassword",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverChangeUserPasswordRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerChangeUserPasswordBody"
}
}
],
"tags": [
"Пользователи"
]
}
},
"/api/users/{ID}/role/add": {
"post": {
"summary": "Добавить пользователю роль",
"operationId": "EveningDetectiveServer_AddUserRole",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverAddUserRoleRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerAddUserRoleBody"
}
}
],
"tags": [
"Пользователи"
]
}
},
"/api/users/{ID}/role/delete": {
"post": {
"summary": "Забрать у пользователя роль",
"operationId": "EveningDetectiveServer_DeleteUserRole",
"responses": {
"200": {
"description": "A successful response.",
"schema": {
"$ref": "#/definitions/evening_detective_serverDeleteUserRoleRsp"
}
},
"default": {
"description": "An unexpected error response.",
"schema": {
"$ref": "#/definitions/rpcStatus"
}
}
},
"parameters": [
{
"name": "ID",
"in": "path",
"required": true,
"type": "integer",
"format": "int32"
},
{
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/EveningDetectiveServerDeleteUserRoleBody"
}
}
],
"tags": [
"Пользователи"
]
}
}
},
"definitions": {
"EveningDetectiveServerAcceptTicketBody": {
"type": "object"
},
"EveningDetectiveServerAddScenarioPlaceBody": {
"type": "object",
"properties": {
"place": {
"$ref": "#/definitions/evening_detective_serverPlace"
}
}
},
"EveningDetectiveServerAddScenarioQuestionBody": {
"type": "object",
"properties": {
"question": {
"$ref": "#/definitions/evening_detective_serverQuestion"
}
}
},
"EveningDetectiveServerAddTeamActionBody": {
"type": "object",
"properties": {
"password": {
"type": "string"
},
"code": {
"type": "string"
}
}
},
"EveningDetectiveServerAddUserRoleBody": {
"type": "object",
"properties": {
"role": {
"type": "string"
}
}
},
"EveningDetectiveServerBindScreenBody": {
"type": "object",
"properties": {
"accessToken": {
"type": "string"
},
"gameID": {
"type": "integer",
"format": "int32"
}
}
},
"EveningDetectiveServerChangeUserPasswordBody": {
"type": "object",
"properties": {
"newPassword": {
"type": "string"
}
}
},
"EveningDetectiveServerCreateGameReviewBody": {
"type": "object",
"properties": {
"teamID": {
"type": "string"
},
"password": {
"type": "string"
},
"rating": {
"type": "integer",
"format": "int32"
},
"text": {
"type": "string"
},
"difficulty": {
"type": "integer",
"format": "int32"
}
}
},
"EveningDetectiveServerDeleteTaskBody": {
"type": "object",
"properties": {
"version": {
"type": "integer",
"format": "int32"
}
}
},
"EveningDetectiveServerDeleteUserRoleBody": {
"type": "object",
"properties": {
"role": {
"type": "string"
}
}
},
"EveningDetectiveServerDraftScenarioBody": {
"type": "object"
},
"EveningDetectiveServerFinishGameBody": {
"type": "object"
},
"EveningDetectiveServerGiveTeamApplicationsBody": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
}
},
"EveningDetectiveServerIssueGameTicketsBody": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"format": "int32"
}
}
},
"EveningDetectiveServerModerateGameReviewBody": {
"type": "object",
"properties": {
"status": {
"type": "string"
}
}
},
"EveningDetectiveServerPauseGameBody": {
"type": "object"
},
"EveningDetectiveServerPlayGameBody": {
"type": "object"
},
"EveningDetectiveServerPrintTeamReceiptBody": {
"type": "object"
},
"EveningDetectiveServerPublicScenarioBody": {
"type": "object"
},
"EveningDetectiveServerResetGameBody": {
"type": "object"
},
"EveningDetectiveServerResetGameLocalModeBody": {
"type": "object",
"properties": {
"exportID": {
"type": "string",
"description": "Expected latest export, protecting against stale confirmations."
}
}
},
"EveningDetectiveServerSaveScreenPlanBody": {
"type": "object",
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverScreenPlanStep"
}
},
"currentStep": {
"type": "integer",
"format": "int32"
}
}
},
"EveningDetectiveServerSendScreenCommandBody": {
"type": "object",
"properties": {
"command": {
"$ref": "#/definitions/evening_detective_serverScreenCommand"
},
"positionMs": {
"type": "string",
"format": "int64"
},
"volume": {
"type": "integer",
"format": "int32"
}
}
},
"EveningDetectiveServerSetGameMusicBody": {
"type": "object",
"properties": {
"playlistID": {
"type": "integer",
"format": "int32"
},
"trackIndex": {
"type": "integer",
"format": "int32"
},
"positionMs": {
"type": "string",
"format": "int64"
},
"volume": {
"type": "integer",
"format": "int32"
},
"loop": {
"type": "boolean"
},
"playback": {
"$ref": "#/definitions/evening_detective_serverMusicPlaybackState"
}
}
},
"EveningDetectiveServerSetScenarioPlaylistBody": {
"type": "object",
"properties": {
"playlistID": {
"type": "integer",
"format": "int32"
}
}
},
"EveningDetectiveServerSetScreenModeBody": {
"type": "object",
"properties": {
"mode": {
"$ref": "#/definitions/evening_detective_serverScreenMode"
}
}
},
"EveningDetectiveServerSetScreenPlanStepBody": {
"type": "object",
"properties": {
"currentStep": {
"type": "integer",
"format": "int32"
}
}
},
"EveningDetectiveServerSetScreenSoundBody": {
"type": "object",
"properties": {
"soundEnabled": {
"type": "boolean"
}
}
},
"EveningDetectiveServerSetScreenTimerBody": {
"type": "object",
"properties": {
"durationSeconds": {
"type": "string",
"format": "int64"
},
"label": {
"type": "string"
}
}
},
"EveningDetectiveServerSetTaskStatusBody": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"version": {
"type": "integer",
"format": "int32"
}
}
},
"EveningDetectiveServerSetTeamAnswerScoreBody": {
"type": "object",
"properties": {
"score": {
"type": "integer",
"format": "int32",
"title": "Балл; отсутствует — сбросить выставленный балл"
}
}
},
"EveningDetectiveServerStartGameBody": {
"type": "object"
},
"EveningDetectiveServerStartGameExportBody": {
"type": "object"
},
"EveningDetectiveServerSubmitTeamAnswersBody": {
"type": "object",
"properties": {
"password": {
"type": "string"
},
"answers": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverAnswer"
}
}
}
},
"EveningDetectiveServerUnbindScreenBody": {
"type": "object"
},
"EveningDetectiveServerUpdateGameBody": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"startAt": {
"type": "string",
"format": "date-time"
},
"scenarioID": {
"type": "integer",
"format": "int32"
},
"format": {
"type": "string"
},
"location": {
"type": "string"
}
}
},
"EveningDetectiveServerUpdateGameMapItemBody": {
"type": "object",
"properties": {
"x": {
"type": "integer",
"format": "int32"
},
"y": {
"type": "integer",
"format": "int32"
},
"hidden": {
"type": "boolean"
}
}
},
"EveningDetectiveServerUpdatePlaylistBody": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
}
},
"EveningDetectiveServerUpdateScenarioBackgroundBody": {
"type": "object",
"properties": {
"background": {
"type": "string"
}
}
},
"EveningDetectiveServerUpdateScenarioBody": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"image": {
"type": "string"
}
}
},
"EveningDetectiveServerUpdateScenarioConclusionBody": {
"type": "object",
"properties": {
"conclusion": {
"$ref": "#/definitions/evening_detective_serverConclusion"
}
}
},
"EveningDetectiveServerUpdateScenarioIntroBody": {
"type": "object",
"properties": {
"introduction": {
"$ref": "#/definitions/evening_detective_serverIntroduction"
}
}
},
"EveningDetectiveServerUpdateScenarioPlaceBody": {
"type": "object",
"properties": {
"place": {
"$ref": "#/definitions/evening_detective_serverPlace"
}
}
},
"EveningDetectiveServerUpdateScenarioQuestionBody": {
"type": "object",
"properties": {
"question": {
"$ref": "#/definitions/evening_detective_serverQuestion"
}
}
},
"EveningDetectiveServerUpdateTaskBody": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"status": {
"type": "string"
},
"assigneeID": {
"type": "integer",
"format": "int32"
},
"dueDate": {
"type": "string"
},
"version": {
"type": "integer",
"format": "int32"
}
}
},
"EveningDetectiveServerUpdateTeamBody": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
}
},
"EveningDetectiveServerUploadPlaylistTrackBody": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"filename": {
"type": "string"
},
"data": {
"type": "string",
"format": "byte"
}
}
},
"apiHttpBody": {
"type": "object",
"properties": {
"contentType": {
"type": "string",
"description": "The HTTP Content-Type header value specifying the content type of the body."
},
"data": {
"type": "string",
"format": "byte",
"description": "The HTTP request/response body as raw binary."
},
"extensions": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/protobufAny"
},
"description": "Application specific response metadata. Must be set in the first response\nfor streaming APIs."
}
},
"description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged."
},
"evening_detective_serverAcceptTicketRsp": {
"type": "object",
"properties": {
"ticket": {
"$ref": "#/definitions/evening_detective_serverTicketPage"
}
}
},
"evening_detective_serverAddGameReq": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"startAt": {
"type": "string",
"format": "date-time"
},
"scenarioID": {
"type": "integer",
"format": "int32"
},
"format": {
"type": "string"
},
"location": {
"type": "string"
}
}
},
"evening_detective_serverAddGameRsp": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
}
}
},
"evening_detective_serverAddScenarioPlaceRsp": {
"type": "object"
},
"evening_detective_serverAddScenarioQuestionRsp": {
"type": "object"
},
"evening_detective_serverAddScenarioReq": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
}
},
"evening_detective_serverAddScenarioRsp": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
}
}
},
"evening_detective_serverAddTeamActionRsp": {
"type": "object"
},
"evening_detective_serverAddTeamReq": {
"type": "object",
"properties": {
"gameID": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"captainEmail": {
"type": "string"
},
"participantsCount": {
"type": "integer",
"format": "int32"
}
}
},
"evening_detective_serverAddTeamRsp": {
"type": "object",
"properties": {
"ID": {
"type": "string"
},
"password": {
"type": "string"
}
}
},
"evening_detective_serverAddUserRoleRsp": {
"type": "object"
},
"evening_detective_serverAdvanceScreenMusicReq": {
"type": "object",
"properties": {
"screenID": {
"type": "string"
},
"accessToken": {
"type": "string"
}
}
},
"evening_detective_serverAdvanceScreenMusicRsp": {
"type": "object",
"properties": {
"state": {
"$ref": "#/definitions/evening_detective_serverMusicState"
}
}
},
"evening_detective_serverAnswer": {
"type": "object",
"properties": {
"questionCode": {
"type": "string",
"title": "Код вопроса"
},
"answer": {
"type": "string",
"title": "Текст ответа команды"
}
},
"title": "Ответ команды на вопрос дела"
},
"evening_detective_serverAnswerParticipationReq": {
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Персональный токен из письма: 64 шестнадцатеричных символа. Не является JWT."
},
"answer": {
"type": "string",
"description": "Окончательное решение: confirmed — участвуем, cancelled — отменяем запись."
}
}
},
"evening_detective_serverAnswerScore": {
"type": "object",
"properties": {
"questionCode": {
"type": "string"
},
"answer": {
"type": "string"
},
"score": {
"type": "integer",
"format": "int32",
"title": "Балл, выставленный организатором; отсутствует, если ещё не оценено"
}
},
"title": "Ответ команды с баллом (для панели организатора)"
},
"evening_detective_serverApplication": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"image": {
"type": "string"
},
"file_type": {
"type": "string",
"description": "Тип файла улики: image | pdf | audio. Значение выводится сервером из\nрасширения файла (см. file_storage.FileType); пустое значение возможно\nтолько для legacy-строк без расширения."
}
}
},
"evening_detective_serverBindScreenRsp": {
"type": "object",
"properties": {
"state": {
"$ref": "#/definitions/evening_detective_serverScreenState"
}
}
},
"evening_detective_serverChangeUserPasswordRsp": {
"type": "object"
},
"evening_detective_serverConclusion": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"video": {
"type": "string"
}
}
},
"evening_detective_serverCreateGameReviewRsp": {
"type": "object",
"properties": {
"review": {
"$ref": "#/definitions/evening_detective_serverGameReview"
}
}
},
"evening_detective_serverCreatePlaylistReq": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
}
},
"evening_detective_serverCreatePlaylistRsp": {
"type": "object",
"properties": {
"playlist": {
"$ref": "#/definitions/evening_detective_serverPlaylist"
}
}
},
"evening_detective_serverCreateScreenSessionReq": {
"type": "object"
},
"evening_detective_serverCreateScreenSessionRsp": {
"type": "object",
"properties": {
"screenID": {
"type": "string"
},
"accessToken": {
"type": "string"
}
}
},
"evening_detective_serverCreateTaskReq": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"status": {
"type": "string"
},
"assigneeID": {
"type": "integer",
"format": "int32"
},
"dueDate": {
"type": "string"
}
}
},
"evening_detective_serverDeleteAccountRsp": {
"type": "object"
},
"evening_detective_serverDeleteGameRsp": {
"type": "object"
},
"evening_detective_serverDeleteLastTeamActionRsp": {
"type": "object"
},
"evening_detective_serverDeletePlaylistRsp": {
"type": "object"
},
"evening_detective_serverDeletePlaylistTrackRsp": {
"type": "object"
},
"evening_detective_serverDeleteScenarioPlaceRsp": {
"type": "object"
},
"evening_detective_serverDeleteScenarioQuestionRsp": {
"type": "object"
},
"evening_detective_serverDeleteScenarioRsp": {
"type": "object"
},
"evening_detective_serverDeleteTaskRsp": {
"type": "object"
},
"evening_detective_serverDeleteTeamRsp": {
"type": "object"
},
"evening_detective_serverDeleteUserRoleRsp": {
"type": "object"
},
"evening_detective_serverDeveloperTask": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"status": {
"type": "string"
},
"assigneeID": {
"type": "integer",
"format": "int32",
"description": "Omitted assignee means the task is unassigned."
},
"assigneeName": {
"type": "string"
},
"authorID": {
"type": "integer",
"format": "int32"
},
"dueDate": {
"type": "string",
"description": "Calendar deadline in YYYY-MM-DD format; empty means no deadline."
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"updatedAt": {
"type": "string",
"format": "date-time"
},
"version": {
"type": "integer",
"format": "int32",
"description": "Required for updates and deletion to detect concurrent edits."
}
},
"description": "Developer tasks use new, in_progress, review and done statuses."
},
"evening_detective_serverDeviceConnection": {
"type": "object",
"properties": {
"ID": {
"type": "string"
},
"firstSeenAt": {
"type": "string",
"format": "date-time"
},
"lastSeenAt": {
"type": "string",
"format": "date-time"
},
"IP": {
"type": "string"
},
"userAgent": {
"type": "string"
},
"connected": {
"type": "boolean"
},
"gameID": {
"type": "integer",
"format": "int32"
},
"teamID": {
"type": "string"
},
"screenID": {
"type": "integer",
"format": "int32"
},
"kind": {
"type": "string",
"title": "browser, organizer, team, screen"
}
}
},
"evening_detective_serverDeviceHeartbeatReq": {
"type": "object",
"properties": {
"deviceID": {
"type": "string"
},
"connectionID": {
"type": "string"
},
"organizerGameID": {
"type": "integer",
"format": "int32"
},
"teamID": {
"type": "string"
},
"password": {
"type": "string"
},
"screenID": {
"type": "string"
},
"accessToken": {
"type": "string"
}
}
},
"evening_detective_serverDeviceHeartbeatRsp": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"serverTime": {
"type": "string",
"format": "date-time"
}
}
},
"evening_detective_serverDoor": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"keys": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverKey"
}
}
}
},
"evening_detective_serverDraftScenarioRsp": {
"type": "object"
},
"evening_detective_serverEchoRsp": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
}
},
"evening_detective_serverFinishGameRsp": {
"type": "object"
},
"evening_detective_serverGame": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"startAt": {
"type": "string",
"format": "date-time"
},
"status": {
"type": "string"
},
"scenario": {
"$ref": "#/definitions/evening_detective_serverScenario"
},
"teams": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverTeam"
}
},
"startedAt": {
"type": "string",
"format": "date-time"
},
"endedAt": {
"type": "string",
"format": "date-time"
},
"format": {
"type": "string"
},
"location": {
"type": "string"
},
"export": {
"$ref": "#/definitions/evening_detective_serverGameExport"
}
}
},
"evening_detective_serverGameExport": {
"type": "object",
"properties": {
"ID": {
"type": "string"
},
"state": {
"type": "string",
"description": "preparing, ready or failed; ready indicates a completed package."
},
"packageID": {
"type": "string"
},
"size": {
"type": "string",
"format": "int64"
},
"sha256": {
"type": "string"
},
"failure": {
"type": "string"
}
},
"description": "Download ready ZIP through the authenticated streaming HTTP route:\nGET /api/games/{ID}/export/download (not an HttpBody RPC)."
},
"evening_detective_serverGameExportRsp": {
"type": "object",
"properties": {
"export": {
"$ref": "#/definitions/evening_detective_serverGameExport"
}
}
},
"evening_detective_serverGameImportRsp": {
"type": "object",
"properties": {
"gameID": {
"type": "integer",
"format": "int32"
},
"packageID": {
"type": "string"
},
"repeated": {
"type": "boolean"
}
}
},
"evening_detective_serverGameResultsPackageRsp": {
"type": "object",
"properties": {
"gameID": {
"type": "integer",
"format": "int32"
},
"packageID": {
"type": "string"
},
"appliedAt": {
"type": "string"
}
}
},
"evening_detective_serverGameReview": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
},
"gameID": {
"type": "integer",
"format": "int32"
},
"teamID": {
"type": "string"
},
"teamName": {
"type": "string"
},
"rating": {
"type": "integer",
"format": "int32"
},
"text": {
"type": "string"
},
"status": {
"type": "string"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"gameName": {
"type": "string"
},
"difficulty": {
"type": "integer",
"format": "int32"
}
}
},
"evening_detective_serverGetConsentRsp": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
}
},
"evening_detective_serverGetDevicesRsp": {
"type": "object",
"properties": {
"devices": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverVenueDevice"
}
},
"serverTime": {
"type": "string",
"format": "date-time"
},
"wifi": {
"$ref": "#/definitions/evening_detective_serverVenueWiFi",
"description": "Entire venue, independent of the game filter."
}
}
},
"evening_detective_serverGetGameAnswersRsp": {
"type": "object",
"properties": {
"questions": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverQuestion"
}
},
"teams": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverTeamAnswers"
}
}
}
},
"evening_detective_serverGetGameMapRsp": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverMapItem"
}
}
}
},
"evening_detective_serverGetGameMusicRsp": {
"type": "object",
"properties": {
"playlists": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverPlaylist"
}
},
"state": {
"$ref": "#/definitions/evening_detective_serverMusicState"
},
"scenarioPlaylistId": {
"type": "integer",
"format": "int32"
},
"gamePlaylistId": {
"type": "integer",
"format": "int32"
}
}
},
"evening_detective_serverGetGameResultsRsp": {
"type": "object",
"properties": {
"questions": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverResultsQuestion"
}
},
"teams": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverTeamResult"
}
}
}
},
"evening_detective_serverGetGameReviewsRsp": {
"type": "object",
"properties": {
"averageRating": {
"type": "number",
"format": "double"
},
"reviewsCount": {
"type": "integer",
"format": "int32"
},
"reviews": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverGameReview"
}
}
}
},
"evening_detective_serverGetGameRsp": {
"type": "object",
"properties": {
"game": {
"$ref": "#/definitions/evening_detective_serverGame"
}
}
},
"evening_detective_serverGetGameScreensRsp": {
"type": "object",
"properties": {
"screens": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverScreenState"
}
}
}
},
"evening_detective_serverGetGamesRsp": {
"type": "object",
"properties": {
"games": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverGame"
}
}
}
},
"evening_detective_serverGetMeRsp": {
"type": "object",
"properties": {
"user": {
"$ref": "#/definitions/evening_detective_serverUser"
}
}
},
"evening_detective_serverGetMyScenariosRsp": {
"type": "object",
"properties": {
"scenarios": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverScenario"
}
}
}
},
"evening_detective_serverGetParticipationReq": {
"type": "object",
"properties": {
"token": {
"type": "string",
"description": "Персональный токен из письма: 64 шестнадцатеричных символа. Не является JWT."
}
}
},
"evening_detective_serverGetPermissionsRsp": {
"type": "object",
"properties": {
"permissions": {
"type": "array",
"items": {
"type": "string"
}
},
"environment": {
"type": "string",
"description": "Actual server environment: prod or venue."
}
}
},
"evening_detective_serverGetPlaylistsRsp": {
"type": "object",
"properties": {
"playlists": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverPlaylist"
}
}
}
},
"evening_detective_serverGetPrivacyRsp": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
}
},
"evening_detective_serverGetScenarioRsp": {
"type": "object",
"properties": {
"scenario": {
"$ref": "#/definitions/evening_detective_serverScenario"
}
}
},
"evening_detective_serverGetScenariosCatalogRsp": {
"type": "object",
"properties": {
"scenarios": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverScenario"
}
}
}
},
"evening_detective_serverGetScreenPlanRsp": {
"type": "object",
"properties": {
"plan": {
"$ref": "#/definitions/evening_detective_serverScreenPlan"
}
}
},
"evening_detective_serverGetScreenResultsReq": {
"type": "object",
"properties": {
"screenID": {
"type": "string"
},
"accessToken": {
"type": "string"
}
}
},
"evening_detective_serverGetScreenResultsRsp": {
"type": "object",
"properties": {
"questions": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverResultsQuestion"
}
},
"teams": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverTeamResult"
}
}
}
},
"evening_detective_serverGetScreenStateReq": {
"type": "object",
"properties": {
"screenID": {
"type": "string"
},
"accessToken": {
"type": "string"
}
}
},
"evening_detective_serverGetScreenStateRsp": {
"type": "object",
"properties": {
"state": {
"$ref": "#/definitions/evening_detective_serverScreenState"
}
}
},
"evening_detective_serverGetTaskAssigneesRsp": {
"type": "object",
"properties": {
"assignees": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverTaskAssignee"
}
}
}
},
"evening_detective_serverGetTasksRsp": {
"type": "object",
"properties": {
"tasks": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverDeveloperTask"
}
}
}
},
"evening_detective_serverGetTeamAnswersRsp": {
"type": "object",
"properties": {
"answers": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverAnswer"
}
}
}
},
"evening_detective_serverGetTeamStoryRsp": {
"type": "object",
"properties": {
"story": {
"$ref": "#/definitions/evening_detective_serverStory"
},
"game": {
"$ref": "#/definitions/evening_detective_serverGame"
},
"actions": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverTeamAction"
}
}
}
},
"evening_detective_serverGetTermsRsp": {
"type": "object",
"properties": {
"text": {
"type": "string"
}
}
},
"evening_detective_serverGetTicketRsp": {
"type": "object",
"properties": {
"ticket": {
"$ref": "#/definitions/evening_detective_serverTicketPage"
}
}
},
"evening_detective_serverGetUserByIDRsp": {
"type": "object",
"properties": {
"user": {
"$ref": "#/definitions/evening_detective_serverUser"
}
}
},
"evening_detective_serverGetUsersRsp": {
"type": "object",
"properties": {
"users": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverUser"
}
}
}
},
"evening_detective_serverGiveTeamApplicationsRsp": {
"type": "object"
},
"evening_detective_serverIntroduction": {
"type": "object",
"properties": {
"text": {
"type": "string"
},
"audio": {
"type": "string"
}
}
},
"evening_detective_serverIssueGameTicketsRsp": {
"type": "object",
"properties": {
"tickets": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverTicket"
}
}
}
},
"evening_detective_serverKey": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
}
},
"evening_detective_serverLoginReq": {
"type": "object",
"properties": {
"email": {
"type": "string"
},
"password": {
"type": "string"
}
}
},
"evening_detective_serverLoginRsp": {
"type": "object",
"properties": {
"accessToken": {
"type": "string"
},
"refreshToken": {
"type": "string"
}
}
},
"evening_detective_serverMapItem": {
"type": "object",
"properties": {
"kind": {
"type": "string"
},
"itemID": {
"type": "string"
},
"label": {
"type": "string"
},
"x": {
"type": "integer",
"format": "int32"
},
"y": {
"type": "integer",
"format": "int32"
},
"hidden": {
"type": "boolean"
},
"status": {
"type": "string"
},
"soundEnabled": {
"type": "boolean"
}
}
},
"evening_detective_serverModerateGameReviewRsp": {
"type": "object",
"properties": {
"review": {
"$ref": "#/definitions/evening_detective_serverGameReview"
}
}
},
"evening_detective_serverMusicPlaybackState": {
"type": "string",
"enum": [
"MUSIC_PLAYBACK_UNSPECIFIED",
"MUSIC_PLAYBACK_STOPPED",
"MUSIC_PLAYBACK_PLAYING",
"MUSIC_PLAYBACK_PAUSED"
],
"default": "MUSIC_PLAYBACK_UNSPECIFIED"
},
"evening_detective_serverMusicState": {
"type": "object",
"properties": {
"playlist": {
"$ref": "#/definitions/evening_detective_serverPlaylist"
},
"trackIndex": {
"type": "integer",
"format": "int32"
},
"positionMs": {
"type": "string",
"format": "int64"
},
"volume": {
"type": "integer",
"format": "int32"
},
"loop": {
"type": "boolean"
},
"playback": {
"$ref": "#/definitions/evening_detective_serverMusicPlaybackState"
},
"stateVersion": {
"type": "string",
"format": "int64"
}
}
},
"evening_detective_serverParticipationRsp": {
"type": "object",
"properties": {
"teamName": {
"type": "string",
"description": "Название команды. Данные доступны только по действительному токену."
},
"gameName": {
"type": "string",
"description": "Название игры."
},
"startAt": {
"type": "string",
"format": "date-time",
"description": "Плановое начало игры, UTC (RFC 3339 в JSON)."
},
"participantsCount": {
"type": "integer",
"format": "int32",
"description": "Заявленное число участников команды."
},
"status": {
"type": "string",
"description": "pending — ожидает ответа, confirmed — подтверждено, cancelled — отменено."
},
"closed": {
"type": "boolean",
"description": "Новые ответы закрыты: наступило плановое начало или игра вышла из draft.\nИзменение уже принятого решения запрещено независимо от этого поля."
}
}
},
"evening_detective_serverPauseGameRsp": {
"type": "object"
},
"evening_detective_serverPingRsp": {
"type": "object"
},
"evening_detective_serverPlace": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"name": {
"type": "string"
},
"text": {
"type": "string"
},
"image": {
"type": "string"
},
"hidden": {
"type": "boolean"
},
"applications": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverApplication"
}
},
"doors": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverDoor"
}
},
"keys": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverKey"
}
}
}
},
"evening_detective_serverPlayGameRsp": {
"type": "object"
},
"evening_detective_serverPlaylist": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"tracks": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverPlaylistTrack"
}
}
}
},
"evening_detective_serverPlaylistTrack": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"filename": {
"type": "string"
},
"position": {
"type": "integer",
"format": "int32"
}
}
},
"evening_detective_serverPrintTeamReceiptRsp": {
"type": "object"
},
"evening_detective_serverPublicScenarioRsp": {
"type": "object"
},
"evening_detective_serverQuestion": {
"type": "object",
"properties": {
"code": {
"type": "string",
"title": "Код вопроса - используется при отправке ответов командой"
},
"text": {
"type": "string",
"title": "Текст вопроса"
},
"answer": {
"type": "string",
"title": "Правильный ответ (справка для организатора при оценке)"
}
},
"description": "Вопрос дела - вопрос, на который команда должна ответить в конце игры.\nПравильный ответ (answer) виден только автору сценария и организаторам\n(при оценке ответов команд), команде не передаётся."
},
"evening_detective_serverRefreshPasswordReq": {
"type": "object",
"properties": {
"email": {
"type": "string"
}
}
},
"evening_detective_serverRefreshPasswordRsp": {
"type": "object"
},
"evening_detective_serverRefreshReq": {
"type": "object",
"properties": {
"refreshToken": {
"type": "string"
}
}
},
"evening_detective_serverRefreshRsp": {
"type": "object",
"properties": {
"accessToken": {
"type": "string"
},
"refreshToken": {
"type": "string"
}
}
},
"evening_detective_serverResetGameLocalModeRsp": {
"type": "object"
},
"evening_detective_serverResetGameRsp": {
"type": "object"
},
"evening_detective_serverResultsQuestion": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"text": {
"type": "string"
}
},
"description": "Вопрос в шапке итоговой таблицы: правильный ответ (поле answer сообщения\nQuestion) командам/таблице не передаётся — он виден только в панели оценки."
},
"evening_detective_serverSaveScreenPlanRsp": {
"type": "object",
"properties": {
"plan": {
"$ref": "#/definitions/evening_detective_serverScreenPlan"
}
}
},
"evening_detective_serverScenario": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"image": {
"type": "string"
},
"story": {
"$ref": "#/definitions/evening_detective_serverStory"
},
"status": {
"type": "string"
},
"author": {
"$ref": "#/definitions/evening_detective_serverUser"
},
"updatedAt": {
"type": "string",
"format": "date-time"
},
"createdAt": {
"type": "string",
"format": "date-time"
},
"publishedAt": {
"type": "string",
"format": "date-time"
},
"averageRating": {
"type": "number",
"format": "double"
},
"reviewsCount": {
"type": "integer",
"format": "int32"
},
"difficulty": {
"type": "string"
},
"music_playlist_id": {
"type": "integer",
"format": "int32"
}
}
},
"evening_detective_serverScreenCommand": {
"type": "string",
"enum": [
"SCREEN_COMMAND_UNSPECIFIED",
"SCREEN_COMMAND_PLAY",
"SCREEN_COMMAND_PAUSE",
"SCREEN_COMMAND_RESUME",
"SCREEN_COMMAND_STOP",
"SCREEN_COMMAND_REPLAY",
"SCREEN_COMMAND_SEEK",
"SCREEN_COMMAND_VOLUME",
"SCREEN_COMMAND_TIMER_START",
"SCREEN_COMMAND_TIMER_PAUSE",
"SCREEN_COMMAND_TIMER_RESUME",
"SCREEN_COMMAND_TIMER_RESET"
],
"default": "SCREEN_COMMAND_UNSPECIFIED"
},
"evening_detective_serverScreenMode": {
"type": "string",
"enum": [
"SCREEN_MODE_UNSPECIFIED",
"SCREEN_MODE_COVER",
"SCREEN_MODE_INTRO",
"SCREEN_MODE_INTRO_DONE",
"SCREEN_MODE_CONCLUSION",
"SCREEN_MODE_CONCLUSION_DONE",
"SCREEN_MODE_RESULTS",
"SCREEN_MODE_TIMER",
"SCREEN_MODE_TEXT"
],
"default": "SCREEN_MODE_UNSPECIFIED"
},
"evening_detective_serverScreenPlan": {
"type": "object",
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverScreenPlanStep"
}
},
"currentStep": {
"type": "integer",
"format": "int32"
}
}
},
"evening_detective_serverScreenPlanStep": {
"type": "object",
"properties": {
"mode": {
"$ref": "#/definitions/evening_detective_serverScreenMode"
},
"text": {
"type": "string"
},
"timerLabel": {
"type": "string"
},
"timerDurationSeconds": {
"type": "string",
"format": "int64"
}
}
},
"evening_detective_serverScreenState": {
"type": "object",
"properties": {
"ID": {
"type": "string"
},
"status": {
"type": "string"
},
"gameID": {
"type": "integer",
"format": "int32"
},
"mode": {
"$ref": "#/definitions/evening_detective_serverScreenMode"
},
"soundEnabled": {
"type": "boolean"
},
"error": {
"type": "string"
},
"stateVersion": {
"type": "string",
"format": "int64"
},
"positionMs": {
"type": "string",
"format": "int64"
},
"gameName": {
"type": "string"
},
"coverImage": {
"type": "string"
},
"introAudio": {
"type": "string"
},
"conclusionVideo": {
"type": "string"
},
"command": {
"$ref": "#/definitions/evening_detective_serverScreenCommand"
},
"volume": {
"type": "integer",
"format": "int32"
},
"backgroundImage": {
"type": "string"
},
"timerLabel": {
"type": "string"
},
"timerDurationSeconds": {
"type": "string",
"format": "int64"
},
"timerRemainingSeconds": {
"type": "string",
"format": "int64"
},
"timerState": {
"$ref": "#/definitions/evening_detective_serverScreenTimerState"
},
"text": {
"type": "string"
},
"music": {
"$ref": "#/definitions/evening_detective_serverMusicState"
}
}
},
"evening_detective_serverScreenTimerState": {
"type": "string",
"enum": [
"SCREEN_TIMER_STATE_UNSPECIFIED",
"SCREEN_TIMER_STATE_STOPPED",
"SCREEN_TIMER_STATE_RUNNING",
"SCREEN_TIMER_STATE_PAUSED",
"SCREEN_TIMER_STATE_FINISHED"
],
"default": "SCREEN_TIMER_STATE_UNSPECIFIED"
},
"evening_detective_serverSendScreenCommandRsp": {
"type": "object"
},
"evening_detective_serverSetGameMusicRsp": {
"type": "object",
"properties": {
"state": {
"$ref": "#/definitions/evening_detective_serverMusicState"
}
}
},
"evening_detective_serverSetScenarioPlaylistRsp": {
"type": "object"
},
"evening_detective_serverSetScreenModeRsp": {
"type": "object"
},
"evening_detective_serverSetScreenPlanStepRsp": {
"type": "object",
"properties": {
"plan": {
"$ref": "#/definitions/evening_detective_serverScreenPlan"
}
}
},
"evening_detective_serverSetScreenSoundRsp": {
"type": "object"
},
"evening_detective_serverSetScreenTimerRsp": {
"type": "object"
},
"evening_detective_serverSetTeamAnswerScoreRsp": {
"type": "object"
},
"evening_detective_serverSignupReq": {
"type": "object",
"properties": {
"username": {
"type": "string"
},
"email": {
"type": "string"
},
"acceptTerms": {
"type": "boolean"
},
"acceptPrivacy": {
"type": "boolean"
}
}
},
"evening_detective_serverSignupRsp": {
"type": "object"
},
"evening_detective_serverStartGameRsp": {
"type": "object"
},
"evening_detective_serverStory": {
"type": "object",
"properties": {
"places": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverPlace"
}
},
"introduction": {
"$ref": "#/definitions/evening_detective_serverIntroduction"
},
"questions": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverQuestion"
}
},
"background": {
"type": "string"
},
"conclusion": {
"$ref": "#/definitions/evening_detective_serverConclusion",
"description": "Только в полном сценарии, игрокам не передаётся."
}
}
},
"evening_detective_serverSubmitTeamAnswersRsp": {
"type": "object"
},
"evening_detective_serverTaskAssignee": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
},
"name": {
"type": "string"
}
}
},
"evening_detective_serverTaskRsp": {
"type": "object",
"properties": {
"task": {
"$ref": "#/definitions/evening_detective_serverDeveloperTask"
}
}
},
"evening_detective_serverTeam": {
"type": "object",
"properties": {
"ID": {
"type": "string"
},
"name": {
"type": "string"
},
"status": {
"type": "string"
},
"password": {
"type": "string"
},
"actionsCount": {
"type": "integer",
"format": "int32"
},
"applications": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverApplication"
}
},
"captainEmail": {
"type": "string"
},
"participantsCount": {
"type": "integer",
"format": "int32"
},
"participationStatus": {
"type": "string",
"description": "Статус участия: pending, confirmed или cancelled. Поле панели организатора."
},
"participationSource": {
"type": "string",
"description": "Источник решения: captain, automatic либо пустая строка до ответа."
},
"participationEmailError": {
"type": "string",
"description": "Последняя ошибка отправки; пустая строка, если ошибки нет."
},
"participationEmailSent": {
"type": "boolean",
"description": "Письмо принято SMTP-сервером; не означает прочтение или доставку во входящие."
}
}
},
"evening_detective_serverTeamAction": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"mcp": {
"type": "boolean"
}
}
},
"evening_detective_serverTeamAnswers": {
"type": "object",
"properties": {
"team": {
"$ref": "#/definitions/evening_detective_serverTeam"
},
"answers": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverAnswerScore"
}
}
},
"title": "Ответы одной команды на вопросы дела"
},
"evening_detective_serverTeamResult": {
"type": "object",
"properties": {
"team": {
"$ref": "#/definitions/evening_detective_serverTeam"
},
"answers": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverAnswerScore"
}
},
"totalScore": {
"type": "integer",
"format": "int32",
"title": "Сумма баллов по всем вопросам сценария (неоценённые считаются как 0)"
},
"place": {
"type": "integer",
"format": "int32",
"title": "Место в итоговой таблице: команды с одинаковой суммой баллов и\nодинаковым числом ходов занимают одно место (следующее пропускается)"
},
"actionsCount": {
"type": "integer",
"format": "int32",
"title": "Количество ходов команды (дублирует team.actions_count для удобства\nтаблицы; участвует в тай-брейке при равенстве суммы баллов)"
}
},
"description": "Строка итоговой таблицы: команда, баллы по вопросам, сумма и место."
},
"evening_detective_serverTicket": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
},
"URL": {
"type": "string"
}
}
},
"evening_detective_serverTicketPage": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
},
"gameName": {
"type": "string"
},
"startAt": {
"type": "string",
"format": "date-time"
},
"location": {
"type": "string"
},
"status": {
"type": "string"
},
"gameStatus": {
"type": "string"
},
"usedAt": {
"type": "string",
"format": "date-time"
},
"usedBy": {
"type": "string"
}
}
},
"evening_detective_serverUnbindScreenRsp": {
"type": "object"
},
"evening_detective_serverUpdateGameMapItemRsp": {
"type": "object"
},
"evening_detective_serverUpdateGameRsp": {
"type": "object"
},
"evening_detective_serverUpdatePlaylistRsp": {
"type": "object",
"properties": {
"playlist": {
"$ref": "#/definitions/evening_detective_serverPlaylist"
}
}
},
"evening_detective_serverUpdateScenarioBackgroundRsp": {
"type": "object"
},
"evening_detective_serverUpdateScenarioConclusionRsp": {
"type": "object"
},
"evening_detective_serverUpdateScenarioIntroRsp": {
"type": "object"
},
"evening_detective_serverUpdateScenarioPlaceRsp": {
"type": "object"
},
"evening_detective_serverUpdateScenarioQuestionRsp": {
"type": "object"
},
"evening_detective_serverUpdateScenarioRsp": {
"type": "object"
},
"evening_detective_serverUpdateTeamRsp": {
"type": "object"
},
"evening_detective_serverUploadFileReq": {
"type": "object",
"properties": {
"filename": {
"type": "string"
},
"data": {
"type": "string",
"format": "byte"
}
}
},
"evening_detective_serverUploadFileRsp": {
"type": "object",
"properties": {
"filename": {
"type": "string"
},
"file_type": {
"type": "string",
"description": "Тип загруженного файла: image | pdf | audio | video (определяется сервером по\nсодержимому). Удобен редактору для предзаполнения file_type улики."
}
}
},
"evening_detective_serverUploadPlaylistTrackRsp": {
"type": "object",
"properties": {
"playlist": {
"$ref": "#/definitions/evening_detective_serverPlaylist"
}
}
},
"evening_detective_serverUploadScenarioArchiveRsp": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
}
}
},
"evening_detective_serverUser": {
"type": "object",
"properties": {
"ID": {
"type": "integer",
"format": "int32"
},
"username": {
"type": "string"
},
"email": {
"type": "string"
},
"roles": {
"type": "array",
"items": {
"type": "string"
}
},
"isActive": {
"type": "boolean"
},
"createdAt": {
"type": "string",
"format": "date-time"
}
}
},
"evening_detective_serverVenueDevice": {
"type": "object",
"properties": {
"ID": {
"type": "string"
},
"firstSeenAt": {
"type": "string",
"format": "date-time"
},
"lastSeenAt": {
"type": "string",
"format": "date-time"
},
"connected": {
"type": "boolean"
},
"connections": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverDeviceConnection"
}
}
}
},
"evening_detective_serverVenueWiFi": {
"type": "object",
"properties": {
"enabled": {
"type": "boolean"
},
"collectedAt": {
"type": "string",
"format": "date-time"
},
"stale": {
"type": "boolean"
},
"hasError": {
"type": "boolean"
},
"clients": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/evening_detective_serverWiFiClient"
}
}
}
},
"evening_detective_serverWiFiClient": {
"type": "object",
"properties": {
"IP": {
"type": "string"
},
"MAC": {
"type": "string"
},
"band": {
"type": "string"
},
"signal": {
"type": "integer",
"format": "int32",
"description": "dBm; absent when the router does not report it."
}
}
},
"protobufAny": {
"type": "object",
"properties": {
"@type": {
"type": "string",
"description": "Identifies the type of the serialized Protobuf message with a URI reference\nconsisting of a prefix ending in a slash and the fully-qualified type name.\n\nExample: type.googleapis.com/google.protobuf.StringValue\n\nThis string must contain at least one `/` character, and the content after\nthe last `/` must be the fully-qualified name of the type in canonical\nform, without a leading dot. Do not write a scheme on these URI references\nso that clients do not attempt to contact them.\n\nThe prefix is arbitrary and Protobuf implementations are expected to\nsimply strip off everything up to and including the last `/` to identify\nthe type. `type.googleapis.com/` is a common default prefix that some\nlegacy implementations require. This prefix does not indicate the origin of\nthe type, and URIs containing it are not expected to respond to any\nrequests.\n\nAll type URL strings must be legal URI references with the additional\nrestriction (for the text format) that the content of the reference\nmust consist only of alphanumeric characters, percent-encoded escapes, and\ncharacters in the following set (not including the outer backticks):\n`/-.~_!$\u0026()*+,;=`. Despite our allowing percent encodings, implementations\nshould not unescape them to prevent confusion with existing parsers. For\nexample, `type.googleapis.com%2FFoo` should be rejected.\n\nIn the original design of `Any`, the possibility of launching a type\nresolution service at these type URLs was considered but Protobuf never\nimplemented one and considers contacting these URLs to be problematic and\na potential security issue. Do not attempt to contact type URLs."
}
},
"additionalProperties": {},
"description": "`Any` contains an arbitrary serialized protocol buffer message along with a\nURL that describes the type of the serialized message.\n\nIn its binary encoding, an `Any` is an ordinary message; but in other wire\nforms like JSON, it has a special encoding. The format of the type URL is\ndescribed on the `type_url` field.\n\nProtobuf APIs provide utilities to interact with `Any` values:\n\n- A 'pack' operation accepts a message and constructs a generic `Any` wrapper\n around it.\n- An 'unpack' operation reads the content of an `Any` message, either into an\n existing message or a new one. Unpack operations must check the type of the\n value they unpack against the declared `type_url`.\n- An 'is' operation decides whether an `Any` contains a message of the given\n type, i.e. whether it can 'unpack' that type.\n\nThe JSON format representation of an `Any` follows one of these cases:\n\n- For types without special-cased JSON encodings, the JSON format\n representation of the `Any` is the same as that of the message, with an\n additional `@type` field which contains the type URL.\n- For types with special-cased JSON encodings (typically called 'well-known'\n types, listed in https://protobuf.dev/programming-guides/json/#any), the\n JSON format representation has a key `@type` which contains the type URL\n and a key `value` which contains the JSON-serialized value.\n\nThe text format representation of an `Any` is like a message with one field\nwhose name is the type URL in brackets. For example, an `Any` containing a\n`foo.Bar` message may be written `[type.googleapis.com/foo.Bar] { a: 2 }`."
},
"rpcStatus": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
},
"details": {
"type": "array",
"items": {
"type": "object",
"$ref": "#/definitions/protobufAny"
}
}
}
}
},
"securityDefinitions": {
"BearerAuth": {
"type": "apiKey",
"description": "Authentication token, prefixed by Bearer: Bearer \u003ctoken\u003e",
"name": "Authorization",
"in": "header"
}
},
"security": [
{
"BearerAuth": []
}
]
}