diff --git a/api/main.proto b/api/main.proto index 5994237..86e9a93 100644 --- a/api/main.proto +++ b/api/main.proto @@ -47,7 +47,7 @@ service EveningDetectiveServer { security : {}; tags : "Подтверждение участия"; summary : "Получить состояние участия"; - description: "Возвращает команду, игру и текущее решение по персональному токену из письма. Авторизация JWT не требуется. Чтение не меняет статус участия. Токен передаётся в теле запроса. Недействительная ссылка и ошибки обработки возвращаются в поле error при HTTP 200."; + description: "Возвращает команду, игру и текущее решение по персональному токену из письма. Авторизация JWT не требуется. Чтение не меняет статус участия. Токен передаётся в теле запроса. Недействительная ссылка и ошибки обработки возвращаются стандартным gRPC status error."; }; } rpc AnswerParticipation(AnswerParticipationReq) returns (ParticipationRsp) { @@ -56,7 +56,7 @@ service EveningDetectiveServer { security : {}; tags : "Подтверждение участия"; summary : "Подтвердить или отменить участие"; - description: "Принимает окончательный ответ капитана: confirmed или cancelled. Авторизация JWT не требуется; доступ определяется персональным токеном. Первый ответ сохраняется, повтор того же ответа успешен, противоположный ответ отклоняется. Новый ответ принимается только до планового начала игры и пока игра имеет статус draft. Ошибки ссылки, значения answer, закрытого приёма или изменения решения возвращаются в поле error при HTTP 200; при уже принятом решении возвращается его текущее состояние."; + description: "Принимает окончательный ответ капитана: confirmed или cancelled. Авторизация JWT не требуется; доступ определяется персональным токеном. Первый ответ сохраняется, повтор того же ответа успешен, противоположный ответ отклоняется. Новый ответ принимается только до планового начала игры и пока игра имеет статус draft. Ошибки ссылки, значения answer, закрытого приёма или изменения решения возвращаются стандартным gRPC status error; при уже принятом решении возвращается его текущее состояние."; }; } rpc Ping(PingReq) returns (PingRsp) { @@ -1003,7 +1003,6 @@ message SignupReq { } message SignupRsp { - string error = 1; } message RefreshPasswordReq { @@ -1011,7 +1010,6 @@ message RefreshPasswordReq { } message RefreshPasswordRsp { - string error = 1; } message LoginReq { @@ -1020,9 +1018,8 @@ message LoginReq { } message LoginRsp { - string error = 1; - string accessToken = 2; - string refreshToken = 3; + string accessToken = 1; + string refreshToken = 2; } message RefreshReq { @@ -1030,9 +1027,8 @@ message RefreshReq { } message RefreshRsp { - string error = 1; - string accessToken = 2; - string refreshToken = 3; + string accessToken = 1; + string refreshToken = 2; } // Пароль подтверждает, что удаляет аккаунт его владелец, а не обладатель @@ -1042,7 +1038,6 @@ message RefreshRsp { message DeleteAccountReq {} message DeleteAccountRsp { - string error = 1; } // Документы раздаются по постоянным URL, на которые ссылается сервис при @@ -1050,29 +1045,25 @@ message DeleteAccountRsp { message GetTermsReq {} message GetTermsRsp { - string error = 1; - string text = 2; + string text = 1; } message GetPrivacyReq {} message GetPrivacyRsp { - string error = 1; - string text = 2; + string text = 1; } message GetConsentReq {} message GetConsentRsp { - string error = 1; - string text = 2; + string text = 1; } message GetUsersReq {} message GetUsersRsp { - string error = 1; - repeated User users = 2; + repeated User users = 1; } message User { @@ -1089,15 +1080,13 @@ message GetUserByIDReq { } message GetUserByIDRsp { - string error = 1; - User user = 2; + User user = 1; } message GetMeReq {} message GetMeRsp { - string error = 1; - User user = 2; + User user = 1; } message ChangeUserPasswordReq { @@ -1113,7 +1102,6 @@ message AddUserRoleReq { } message AddUserRoleRsp { - string error = 1; } message DeleteUserRoleReq { @@ -1122,14 +1110,12 @@ message DeleteUserRoleReq { } message DeleteUserRoleRsp { - string error = 1; } message GetPermissionsReq {} message GetPermissionsRsp { - string error = 1; - repeated string permissions = 2; + repeated string permissions = 1; } message UploadFileReq { @@ -1138,11 +1124,10 @@ message UploadFileReq { } message UploadFileRsp { - string error = 1; - string filename = 2; + string filename = 1; // Тип загруженного файла: image | pdf | audio | video (определяется сервером по // содержимому). Удобен редактору для предзаполнения file_type улики. - string file_type = 3 [json_name = "file_type"]; + string file_type = 2 [json_name = "file_type"]; } message DownloadFileReq { @@ -1154,22 +1139,19 @@ message AddScenarioReq { } message AddScenarioRsp { - string error = 1; - int32 ID = 2; + int32 ID = 1; } message GetMyScenariosReq {} message GetMyScenariosRsp { - string error = 1; - repeated Scenario scenarios = 2; + repeated Scenario scenarios = 1; } message GetScenariosCatalogReq {} message GetScenariosCatalogRsp { - string error = 1; - repeated Scenario scenarios = 2; + repeated Scenario scenarios = 1; } message GetScenarioReq { @@ -1177,8 +1159,7 @@ message GetScenarioReq { } message GetScenarioRsp { - string error = 1; - Scenario scenario = 2; + Scenario scenario = 1; } message Scenario { @@ -1289,7 +1270,6 @@ message UpdateScenarioReq { } message UpdateScenarioRsp { - string error = 1; } message PublicScenarioReq { @@ -1297,7 +1277,6 @@ message PublicScenarioReq { } message PublicScenarioRsp { - string error = 1; } message DraftScenarioReq { @@ -1305,7 +1284,6 @@ message DraftScenarioReq { } message DraftScenarioRsp { - string error = 1; } message DeleteScenarioReq { @@ -1313,7 +1291,6 @@ message DeleteScenarioReq { } message DeleteScenarioRsp { - string error = 1; } message AddScenarioPlaceReq { @@ -1322,7 +1299,6 @@ message AddScenarioPlaceReq { } message AddScenarioPlaceRsp { - string error = 1; } message UpdateScenarioPlaceReq { @@ -1332,7 +1308,6 @@ message UpdateScenarioPlaceReq { } message UpdateScenarioPlaceRsp { - string error = 1; } message DeleteScenarioPlaceReq { @@ -1341,7 +1316,6 @@ message DeleteScenarioPlaceReq { } message DeleteScenarioPlaceRsp { - string error = 1; } message UpdateScenarioConclusionReq { @@ -1350,7 +1324,6 @@ message UpdateScenarioConclusionReq { } message UpdateScenarioConclusionRsp { - string error = 1; } message UpdateScenarioIntroReq { @@ -1359,7 +1332,6 @@ message UpdateScenarioIntroReq { } message UpdateScenarioIntroRsp { - string error = 1; } message AddScenarioQuestionReq { @@ -1368,7 +1340,6 @@ message AddScenarioQuestionReq { } message AddScenarioQuestionRsp { - string error = 1; } message UpdateScenarioQuestionReq { @@ -1378,7 +1349,6 @@ message UpdateScenarioQuestionReq { } message UpdateScenarioQuestionRsp { - string error = 1; } message DeleteScenarioQuestionReq { @@ -1387,7 +1357,6 @@ message DeleteScenarioQuestionReq { } message DeleteScenarioQuestionRsp { - string error = 1; } message DownloadScenarioArchiveReq { @@ -1395,8 +1364,7 @@ message DownloadScenarioArchiveReq { } message UploadScenarioArchiveRsp { - string error = 1; - int32 ID = 2; + int32 ID = 1; } message AddGameReq { @@ -1409,15 +1377,13 @@ message AddGameReq { } message AddGameRsp { - string error = 1; - int32 ID = 2; + int32 ID = 1; } message GetGamesReq {} message GetGamesRsp { - string error = 1; - repeated Game games = 2; + repeated Game games = 1; } message Game { @@ -1493,9 +1459,8 @@ message ScreenState { message CreateScreenSessionReq {} message CreateScreenSessionRsp { - string error = 1; - string screenID = 2; - string access_token = 3; + string screenID = 1; + string access_token = 2; } message GetScreenStateReq { @@ -1504,8 +1469,7 @@ message GetScreenStateReq { } message GetScreenStateRsp { - string error = 1; - ScreenState state = 2; + ScreenState state = 1; } message GetGameScreensReq { @@ -1513,8 +1477,7 @@ message GetGameScreensReq { } message GetGameScreensRsp { - string error = 1; - repeated ScreenState screens = 2; + repeated ScreenState screens = 1; } message BindScreenReq { @@ -1524,8 +1487,7 @@ message BindScreenReq { } message BindScreenRsp { - string error = 1; - ScreenState state = 2; + ScreenState state = 1; } message UnbindScreenReq { @@ -1533,7 +1495,6 @@ message UnbindScreenReq { } message UnbindScreenRsp { - string error = 1; } message SetScreenSoundReq { @@ -1542,7 +1503,6 @@ message SetScreenSoundReq { } message SetScreenSoundRsp { - string error = 1; } message MapItem { @@ -1561,8 +1521,7 @@ message GetGameMapReq { } message GetGameMapRsp { - string error = 1; - repeated MapItem items = 2; + repeated MapItem items = 1; } message UpdateGameMapItemReq { @@ -1574,7 +1533,7 @@ message UpdateGameMapItemReq { bool hidden = 6; } -message UpdateGameMapItemRsp { string error = 1; } +message UpdateGameMapItemRsp {} message SetScreenModeReq { int32 gameID = 1; @@ -1582,7 +1541,6 @@ message SetScreenModeReq { } message SetScreenModeRsp { - string error = 1; } message SetScreenTimerReq { @@ -1592,7 +1550,6 @@ message SetScreenTimerReq { } message SetScreenTimerRsp { - string error = 1; } message SendScreenCommandReq { @@ -1603,7 +1560,6 @@ message SendScreenCommandReq { } message SendScreenCommandRsp { - string error = 1; } message GetScreenResultsReq { @@ -1612,9 +1568,8 @@ message GetScreenResultsReq { } message GetScreenResultsRsp { - string error = 1; - repeated ResultsQuestion questions = 2; - repeated TeamResult teams = 3; + repeated ResultsQuestion questions = 1; + repeated TeamResult teams = 2; } message GetParticipationReq { @@ -1630,21 +1585,19 @@ message AnswerParticipationReq { } message ParticipationRsp { - // Пустая строка при успехе; иначе сообщение об ошибке для пользователя. - string error = 1; // Название команды. Данные доступны только по действительному токену. - string team_name = 2; + string team_name = 1; // Название игры. - string game_name = 3; + string game_name = 2; // Плановое начало игры, UTC (RFC 3339 в JSON). - google.protobuf.Timestamp start_at = 4; + google.protobuf.Timestamp start_at = 3; // Заявленное число участников команды. - int32 participants_count = 5; + int32 participants_count = 4; // pending — ожидает ответа, confirmed — подтверждено, cancelled — отменено. - string status = 6; + string status = 5; // Новые ответы закрыты: наступило плановое начало или игра вышла из draft. // Изменение уже принятого решения запрещено независимо от этого поля. - bool closed = 7; + bool closed = 6; } message Team { @@ -1671,8 +1624,7 @@ message GetGameReq { } message GetGameRsp { - string error = 1; - Game game = 2; + Game game = 1; } message GetGameAnswersReq { @@ -1680,9 +1632,8 @@ message GetGameAnswersReq { } message GetGameAnswersRsp { - string error = 1; - repeated Question questions = 2; - repeated TeamAnswers teams = 3; + repeated Question questions = 1; + repeated TeamAnswers teams = 2; } message GetGameResultsReq { @@ -1711,9 +1662,8 @@ message TeamResult { } message GetGameResultsRsp { - string error = 1; - repeated ResultsQuestion questions = 2; - repeated TeamResult teams = 3; + repeated ResultsQuestion questions = 1; + repeated TeamResult teams = 2; } message GameReview { @@ -1737,8 +1687,7 @@ message CreateGameReviewReq { } message CreateGameReviewRsp { - string error = 1; - GameReview review = 2; + GameReview review = 1; } message GetGameReviewsReq { @@ -1752,10 +1701,9 @@ message GetScenarioReviewsReq { message GetReviewsForModerationReq {} message GetGameReviewsRsp { - string error = 1; - double average_rating = 2; - int32 reviews_count = 3; - repeated GameReview reviews = 4; + double average_rating = 1; + int32 reviews_count = 2; + repeated GameReview reviews = 3; } message ModerateGameReviewReq { @@ -1764,8 +1712,7 @@ message ModerateGameReviewReq { } message ModerateGameReviewRsp { - string error = 1; - GameReview review = 2; + GameReview review = 1; } message UpdateGameReq { @@ -1779,7 +1726,6 @@ message UpdateGameReq { } message UpdateGameRsp { - string error = 1; } message StartGameReq { @@ -1787,7 +1733,6 @@ message StartGameReq { } message StartGameRsp { - string error = 1; } message PauseGameReq { @@ -1795,7 +1740,6 @@ message PauseGameReq { } message PauseGameRsp { - string error = 1; } message PlayGameReq { @@ -1803,7 +1747,6 @@ message PlayGameReq { } message PlayGameRsp { - string error = 1; } message FinishGameReq { @@ -1811,7 +1754,6 @@ message FinishGameReq { } message FinishGameRsp { - string error = 1; } message ResetGameReq { @@ -1819,7 +1761,6 @@ message ResetGameReq { } message ResetGameRsp { - string error = 1; } message DeleteGameReq { @@ -1827,7 +1768,6 @@ message DeleteGameReq { } message DeleteGameRsp { - string error = 1; } message AddTeamReq { @@ -1837,9 +1777,8 @@ message AddTeamReq { } message AddTeamRsp { - string error = 1; - int32 ID = 2; - string password = 3; + int32 ID = 1; + string password = 2; } message UpdateTeamReq { @@ -1848,7 +1787,6 @@ message UpdateTeamReq { } message UpdateTeamRsp { - string error = 1; } message DeleteTeamReq { @@ -1856,7 +1794,6 @@ message DeleteTeamReq { } message DeleteTeamRsp { - string error = 1; } message GiveTeamApplicationsReq { @@ -1865,7 +1802,6 @@ message GiveTeamApplicationsReq { } message GiveTeamApplicationsRsp { - string error = 1; } message GetTeamStoryReq { @@ -1874,10 +1810,9 @@ message GetTeamStoryReq { } message GetTeamStoryRsp { - string error = 1; - Story story = 2; - Game game = 3; - repeated TeamAction actions = 4; + Story story = 1; + Game game = 2; + repeated TeamAction actions = 3; } message TeamAction { @@ -1892,7 +1827,6 @@ message AddTeamActionReq { } message AddTeamActionRsp { - string error = 1; } message DeleteLastTeamActionReq { @@ -1900,7 +1834,6 @@ message DeleteLastTeamActionReq { } message DeleteLastTeamActionRsp { - string error = 1; } message GetTeamAnswersReq { @@ -1909,8 +1842,7 @@ message GetTeamAnswersReq { } message GetTeamAnswersRsp { - string error = 1; - repeated Answer answers = 2; + repeated Answer answers = 1; } message SubmitTeamAnswersReq { @@ -1920,7 +1852,6 @@ message SubmitTeamAnswersReq { } message SubmitTeamAnswersRsp { - string error = 1; } message SetTeamAnswerScoreReq { @@ -1931,7 +1862,6 @@ message SetTeamAnswerScoreReq { } message SetTeamAnswerScoreRsp { - string error = 1; } message UpdateScenarioBackgroundReq { @@ -1940,7 +1870,6 @@ message UpdateScenarioBackgroundReq { } message UpdateScenarioBackgroundRsp { - string error = 1; } message IssueGameTicketsReq { @@ -1949,8 +1878,7 @@ message IssueGameTicketsReq { } message IssueGameTicketsRsp { - string error = 1; - repeated Ticket tickets = 2; + repeated Ticket tickets = 1; } message Ticket { @@ -1963,8 +1891,7 @@ message GetTicketReq { } message GetTicketRsp { - string error = 1; - TicketPage ticket = 2; + TicketPage ticket = 1; } message AcceptTicketReq { @@ -1972,8 +1899,7 @@ message AcceptTicketReq { } message AcceptTicketRsp { - string error = 1; - TicketPage ticket = 2; + TicketPage ticket = 1; } message TicketPage { diff --git a/cmd/evening_detective_server/main.swagger.json b/cmd/evening_detective_server/main.swagger.json index bd257cd..7ddee40 100644 --- a/cmd/evening_detective_server/main.swagger.json +++ b/cmd/evening_detective_server/main.swagger.json @@ -1235,7 +1235,7 @@ "/api/participation/answer": { "post": { "summary": "Подтвердить или отменить участие", - "description": "Принимает окончательный ответ капитана: confirmed или cancelled. Авторизация JWT не требуется; доступ определяется персональным токеном. Первый ответ сохраняется, повтор того же ответа успешен, противоположный ответ отклоняется. Новый ответ принимается только до планового начала игры и пока игра имеет статус draft. Ошибки ссылки, значения answer, закрытого приёма или изменения решения возвращаются в поле error при HTTP 200; при уже принятом решении возвращается его текущее состояние.", + "description": "Принимает окончательный ответ капитана: confirmed или cancelled. Авторизация JWT не требуется; доступ определяется персональным токеном. Первый ответ сохраняется, повтор того же ответа успешен, противоположный ответ отклоняется. Новый ответ принимается только до планового начала игры и пока игра имеет статус draft. Ошибки ссылки, значения answer, закрытого приёма или изменения решения возвращаются стандартным gRPC status error; при уже принятом решении возвращается его текущее состояние.", "operationId": "EveningDetectiveServer_AnswerParticipation", "responses": { "200": { @@ -1270,7 +1270,7 @@ "/api/participation/get": { "post": { "summary": "Получить состояние участия", - "description": "Возвращает команду, игру и текущее решение по персональному токену из письма. Авторизация JWT не требуется. Чтение не меняет статус участия. Токен передаётся в теле запроса. Недействительная ссылка и ошибки обработки возвращаются в поле error при HTTP 200.", + "description": "Возвращает команду, игру и текущее решение по персональному токену из письма. Авторизация JWT не требуется. Чтение не меняет статус участия. Токен передаётся в теле запроса. Недействительная ссылка и ошибки обработки возвращаются стандартным gRPC status error.", "operationId": "EveningDetectiveServer_GetParticipation", "responses": { "200": { @@ -3376,9 +3376,6 @@ "evening_detective_serverAcceptTicketRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "ticket": { "$ref": "#/definitions/evening_detective_serverTicketPage" } @@ -3412,9 +3409,6 @@ "evening_detective_serverAddGameRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "ID": { "type": "integer", "format": "int32" @@ -3422,20 +3416,10 @@ } }, "evening_detective_serverAddScenarioPlaceRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverAddScenarioQuestionRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverAddScenarioReq": { "type": "object", @@ -3448,9 +3432,6 @@ "evening_detective_serverAddScenarioRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "ID": { "type": "integer", "format": "int32" @@ -3458,12 +3439,7 @@ } }, "evening_detective_serverAddTeamActionRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverAddTeamReq": { "type": "object", @@ -3483,9 +3459,6 @@ "evening_detective_serverAddTeamRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "ID": { "type": "integer", "format": "int32" @@ -3496,12 +3469,7 @@ } }, "evening_detective_serverAddUserRoleRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverAnswer": { "type": "object", @@ -3565,9 +3533,6 @@ "evening_detective_serverBindScreenRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "state": { "$ref": "#/definitions/evening_detective_serverScreenState" } @@ -3590,9 +3555,6 @@ "evening_detective_serverCreateGameReviewRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "review": { "$ref": "#/definitions/evening_detective_serverGameReview" } @@ -3604,9 +3566,6 @@ "evening_detective_serverCreateScreenSessionRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "screenID": { "type": "string" }, @@ -3616,68 +3575,28 @@ } }, "evening_detective_serverDeleteAccountRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverDeleteGameRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverDeleteLastTeamActionRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverDeleteScenarioPlaceRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverDeleteScenarioQuestionRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverDeleteScenarioRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverDeleteTeamRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverDeleteUserRoleRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverDoor": { "type": "object", @@ -3698,12 +3617,7 @@ } }, "evening_detective_serverDraftScenarioRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverEchoRsp": { "type": "object", @@ -3714,12 +3628,7 @@ } }, "evening_detective_serverFinishGameRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverGame": { "type": "object", @@ -3807,9 +3716,6 @@ "evening_detective_serverGetConsentRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "text": { "type": "string" } @@ -3818,9 +3724,6 @@ "evening_detective_serverGetGameAnswersRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "questions": { "type": "array", "items": { @@ -3840,9 +3743,6 @@ "evening_detective_serverGetGameMapRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "items": { "type": "array", "items": { @@ -3855,9 +3755,6 @@ "evening_detective_serverGetGameResultsRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "questions": { "type": "array", "items": { @@ -3877,9 +3774,6 @@ "evening_detective_serverGetGameReviewsRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "averageRating": { "type": "number", "format": "double" @@ -3900,9 +3794,6 @@ "evening_detective_serverGetGameRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "game": { "$ref": "#/definitions/evening_detective_serverGame" } @@ -3911,9 +3802,6 @@ "evening_detective_serverGetGameScreensRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "screens": { "type": "array", "items": { @@ -3926,9 +3814,6 @@ "evening_detective_serverGetGamesRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "games": { "type": "array", "items": { @@ -3941,9 +3826,6 @@ "evening_detective_serverGetMeRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "user": { "$ref": "#/definitions/evening_detective_serverUser" } @@ -3952,9 +3834,6 @@ "evening_detective_serverGetMyScenariosRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "scenarios": { "type": "array", "items": { @@ -3976,9 +3855,6 @@ "evening_detective_serverGetPermissionsRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "permissions": { "type": "array", "items": { @@ -3990,9 +3866,6 @@ "evening_detective_serverGetPrivacyRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "text": { "type": "string" } @@ -4001,9 +3874,6 @@ "evening_detective_serverGetScenarioRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "scenario": { "$ref": "#/definitions/evening_detective_serverScenario" } @@ -4012,9 +3882,6 @@ "evening_detective_serverGetScenariosCatalogRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "scenarios": { "type": "array", "items": { @@ -4038,9 +3905,6 @@ "evening_detective_serverGetScreenResultsRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "questions": { "type": "array", "items": { @@ -4071,9 +3935,6 @@ "evening_detective_serverGetScreenStateRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "state": { "$ref": "#/definitions/evening_detective_serverScreenState" } @@ -4082,9 +3943,6 @@ "evening_detective_serverGetTeamAnswersRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "answers": { "type": "array", "items": { @@ -4097,9 +3955,6 @@ "evening_detective_serverGetTeamStoryRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "story": { "$ref": "#/definitions/evening_detective_serverStory" }, @@ -4118,9 +3973,6 @@ "evening_detective_serverGetTermsRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "text": { "type": "string" } @@ -4129,9 +3981,6 @@ "evening_detective_serverGetTicketRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "ticket": { "$ref": "#/definitions/evening_detective_serverTicketPage" } @@ -4140,9 +3989,6 @@ "evening_detective_serverGetUserByIDRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "user": { "$ref": "#/definitions/evening_detective_serverUser" } @@ -4151,9 +3997,6 @@ "evening_detective_serverGetUsersRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "users": { "type": "array", "items": { @@ -4164,12 +4007,7 @@ } }, "evening_detective_serverGiveTeamApplicationsRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverIntroduction": { "type": "object", @@ -4185,9 +4023,6 @@ "evening_detective_serverIssueGameTicketsRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "tickets": { "type": "array", "items": { @@ -4219,9 +4054,6 @@ "evening_detective_serverLoginRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "accessToken": { "type": "string" }, @@ -4265,9 +4097,6 @@ "evening_detective_serverModerateGameReviewRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "review": { "$ref": "#/definitions/evening_detective_serverGameReview" } @@ -4276,10 +4105,6 @@ "evening_detective_serverParticipationRsp": { "type": "object", "properties": { - "error": { - "type": "string", - "description": "Пустая строка при успехе; иначе сообщение об ошибке для пользователя." - }, "teamName": { "type": "string", "description": "Название команды. Данные доступны только по действительному токену." @@ -4309,12 +4134,7 @@ } }, "evening_detective_serverPauseGameRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverPingRsp": { "type": "object" @@ -4361,20 +4181,10 @@ } }, "evening_detective_serverPlayGameRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverPublicScenarioRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverQuestion": { "type": "object", @@ -4403,12 +4213,7 @@ } }, "evening_detective_serverRefreshPasswordRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverRefreshReq": { "type": "object", @@ -4421,9 +4226,6 @@ "evening_detective_serverRefreshRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "accessToken": { "type": "string" }, @@ -4433,12 +4235,7 @@ } }, "evening_detective_serverResetGameRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverResultsQuestion": { "type": "object", @@ -4611,44 +4408,19 @@ "default": "SCREEN_TIMER_STATE_UNSPECIFIED" }, "evening_detective_serverSendScreenCommandRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverSetScreenModeRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverSetScreenSoundRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverSetScreenTimerRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverSetTeamAnswerScoreRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverSignupReq": { "type": "object", @@ -4668,20 +4440,10 @@ } }, "evening_detective_serverSignupRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverStartGameRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverStory": { "type": "object", @@ -4713,12 +4475,7 @@ } }, "evening_detective_serverSubmitTeamAnswersRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverTeam": { "type": "object", @@ -4875,84 +4632,34 @@ } }, "evening_detective_serverUnbindScreenRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverUpdateGameMapItemRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverUpdateGameRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverUpdateScenarioBackgroundRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverUpdateScenarioConclusionRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverUpdateScenarioIntroRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverUpdateScenarioPlaceRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverUpdateScenarioQuestionRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverUpdateScenarioRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverUpdateTeamRsp": { - "type": "object", - "properties": { - "error": { - "type": "string" - } - } + "type": "object" }, "evening_detective_serverUploadFileReq": { "type": "object", @@ -4969,9 +4676,6 @@ "evening_detective_serverUploadFileRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "filename": { "type": "string" }, @@ -4984,9 +4688,6 @@ "evening_detective_serverUploadScenarioArchiveRsp": { "type": "object", "properties": { - "error": { - "type": "string" - }, "ID": { "type": "integer", "format": "int32" diff --git a/internal/app/file_service_test.go b/internal/app/file_service_test.go index 6e637b0..e5e9317 100644 --- a/internal/app/file_service_test.go +++ b/internal/app/file_service_test.go @@ -131,9 +131,6 @@ func TestUploadFileSuccess(t *testing.T) { if rsp.FileType != "pdf" { t.Errorf("FileType = %q, want pdf", rsp.FileType) } - if rsp.Error != "" { - t.Errorf("Error = %q, want пусто", rsp.Error) - } } // mockServerTransportStream — заглушка для grpc.SetHeader в юнит-тестах. diff --git a/internal/app/legal_docs.go b/internal/app/legal_docs.go index 2904c63..9da8eaa 100644 --- a/internal/app/legal_docs.go +++ b/internal/app/legal_docs.go @@ -5,6 +5,8 @@ import ( "evening_detective_server/docs" proto "evening_detective_server/proto" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) // GetTerms возвращает текст Пользовательского соглашения (постоянный URL @@ -12,7 +14,7 @@ import ( func (s *server) GetTerms(_ context.Context, _ *proto.GetTermsReq) (*proto.GetTermsRsp, error) { text, err := docs.FS.ReadFile("TERMS.md") if err != nil { - return &proto.GetTermsRsp{Error: "Не удалось получить документ"}, nil + return nil, status.Error(codes.Internal, "не удалось получить документ") } return &proto.GetTermsRsp{Text: string(text)}, nil } @@ -22,7 +24,7 @@ func (s *server) GetTerms(_ context.Context, _ *proto.GetTermsReq) (*proto.GetTe func (s *server) GetPrivacy(_ context.Context, _ *proto.GetPrivacyReq) (*proto.GetPrivacyRsp, error) { text, err := docs.FS.ReadFile("PRIVACY.md") if err != nil { - return &proto.GetPrivacyRsp{Error: "Не удалось получить документ"}, nil + return nil, status.Error(codes.Internal, "не удалось получить документ") } return &proto.GetPrivacyRsp{Text: string(text)}, nil } @@ -32,7 +34,7 @@ func (s *server) GetPrivacy(_ context.Context, _ *proto.GetPrivacyReq) (*proto.G func (s *server) GetConsent(_ context.Context, _ *proto.GetConsentReq) (*proto.GetConsentRsp, error) { text, err := docs.FS.ReadFile("CONSENT.md") if err != nil { - return &proto.GetConsentRsp{Error: "Не удалось получить документ"}, nil + return nil, status.Error(codes.Internal, "не удалось получить документ") } return &proto.GetConsentRsp{Text: string(text)}, nil } diff --git a/internal/app/legal_docs_test.go b/internal/app/legal_docs_test.go index 84a3c84..ac3fe1e 100644 --- a/internal/app/legal_docs_test.go +++ b/internal/app/legal_docs_test.go @@ -13,39 +13,39 @@ func TestGetLegalDocs(t *testing.T) { tests := []struct { name string - call func() (text, errText string) + call func() string wantPart string }{ { name: "GetTerms отдаёт Пользовательское соглашение", - call: func() (string, string) { + call: func() string { rsp, err := s.GetTerms(context.Background(), &proto.GetTermsReq{}) if err != nil { t.Fatalf("GetTerms error: %v", err) } - return rsp.Text, rsp.Error + return rsp.Text }, wantPart: "СОГЛАШЕНИЕ", }, { name: "GetPrivacy отдаёт Политику конфиденциальности", - call: func() (string, string) { + call: func() string { rsp, err := s.GetPrivacy(context.Background(), &proto.GetPrivacyReq{}) if err != nil { t.Fatalf("GetPrivacy error: %v", err) } - return rsp.Text, rsp.Error + return rsp.Text }, wantPart: "КОНФИДЕНЦИАЛЬНОСТИ", }, { name: "GetConsent отдаёт текст согласия на обработку ПДн", - call: func() (string, string) { + call: func() string { rsp, err := s.GetConsent(context.Background(), &proto.GetConsentReq{}) if err != nil { t.Fatalf("GetConsent error: %v", err) } - return rsp.Text, rsp.Error + return rsp.Text }, wantPart: "СОГЛАСИЕ", }, @@ -53,10 +53,7 @@ func TestGetLegalDocs(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - text, errText := tt.call() - if errText != "" { - t.Fatalf("ожидался успех, получена ошибка: %s", errText) - } + text := tt.call() if !strings.Contains(text, tt.wantPart) { t.Errorf("текст документа не содержит %q", tt.wantPart) } diff --git a/internal/app/participation.go b/internal/app/participation.go index 0f83314..531d858 100644 --- a/internal/app/participation.go +++ b/internal/app/participation.go @@ -6,7 +6,9 @@ import ( "evening_detective_server/internal/services/participation_service" "evening_detective_server/proto" "google.golang.org/grpc" + "google.golang.org/grpc/codes" "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/timestamppb" ) @@ -23,36 +25,40 @@ func mapParticipationResponse(p *participation_service.Participation) *proto.Par return result } -func participationError(err error) string { - if errors.Is(err, participation_service.ErrParticipationLink) || errors.Is(err, participation_service.ErrParticipationFinal) || errors.Is(err, participation_service.ErrParticipationClosed) { - return err.Error() +func participationErrorStatus(err error, internalMessage string) error { + switch { + case errors.Is(err, participation_service.ErrParticipationLink): + return status.Error(codes.NotFound, err.Error()) + case errors.Is(err, participation_service.ErrInvalidAnswer): + return status.Error(codes.InvalidArgument, err.Error()) + case errors.Is(err, participation_service.ErrParticipationFinal), errors.Is(err, participation_service.ErrParticipationClosed): + return status.Error(codes.FailedPrecondition, err.Error()) + default: + return status.Error(codes.Internal, internalMessage) } - return "Не удалось обработать ответ. Попробуйте позже." } func (s *server) GetParticipation(ctx context.Context, req *proto.GetParticipationReq) (*proto.ParticipationRsp, error) { _ = grpc.SetHeader(ctx, metadata.Pairs("Cache-Control", "no-store")) if req == nil { - return &proto.ParticipationRsp{Error: participationError(participation_service.ErrParticipationLink)}, nil + return nil, participationErrorStatus(participation_service.ErrParticipationLink, "не удалось получить данные об участии") } p, err := s.participationService.GetParticipation(ctx, req.Token) - result := mapParticipationResponse(p) if err != nil { - result.Error = participationError(err) + return nil, participationErrorStatus(err, "не удалось получить данные об участии") } - return result, nil + return mapParticipationResponse(p), nil } func (s *server) AnswerParticipation(ctx context.Context, req *proto.AnswerParticipationReq) (*proto.ParticipationRsp, error) { _ = grpc.SetHeader(ctx, metadata.Pairs("Cache-Control", "no-store")) if req == nil { - return &proto.ParticipationRsp{Error: participationError(participation_service.ErrParticipationLink)}, nil + return nil, participationErrorStatus(participation_service.ErrParticipationLink, "не удалось сохранить ответ") } if req.Answer != "confirmed" && req.Answer != "cancelled" { - return &proto.ParticipationRsp{Error: participation_service.ErrInvalidAnswer.Error()}, nil + return nil, participationErrorStatus(participation_service.ErrInvalidAnswer, "не удалось сохранить ответ") } p, err := s.participationService.AnswerParticipation(ctx, req.Token, req.Answer) - result := mapParticipationResponse(p) if err != nil { - result.Error = participationError(err) + return nil, participationErrorStatus(err, "не удалось сохранить ответ") } - return result, nil + return mapParticipationResponse(p), nil } diff --git a/internal/app/participation_test.go b/internal/app/participation_test.go index 3b7e1ea..ed5a5a4 100644 --- a/internal/app/participation_test.go +++ b/internal/app/participation_test.go @@ -6,24 +6,29 @@ import ( "testing" "evening_detective_server/internal/services/participation_service" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) -func TestParticipationError(t *testing.T) { +func TestParticipationErrorStatus(t *testing.T) { for _, tc := range []struct { name string err error + code codes.Code want string }{ - {"invalid link", participation_service.ErrParticipationLink, "Ссылка недействительна"}, - {"closed", participation_service.ErrParticipationClosed, "Приём ответов закрыт"}, - {"final", participation_service.ErrParticipationFinal, "Решение уже принято и не может быть изменено"}, - {"internal", errors.New("private database detail"), "Не удалось обработать ответ. Попробуйте позже."}, + {"invalid link", participation_service.ErrParticipationLink, codes.NotFound, "Ссылка недействительна"}, + {"invalid answer", participation_service.ErrInvalidAnswer, codes.InvalidArgument, "Выберите подтверждение или отмену участия"}, + {"closed", participation_service.ErrParticipationClosed, codes.FailedPrecondition, "Приём ответов закрыт"}, + {"final", participation_service.ErrParticipationFinal, codes.FailedPrecondition, "Решение уже принято и не может быть изменено"}, + {"internal", errors.New("private database detail"), codes.Internal, "participation failed"}, } { t.Run(tc.name, func(t *testing.T) { - if got := participationError(tc.err); got != tc.want { - t.Fatalf("message=%q, want %q", got, tc.want) + got := participationErrorStatus(tc.err, "participation failed") + if status.Code(got) != tc.code || status.Convert(got).Message() != tc.want { + t.Fatalf("status=%v, want %s %q", got, tc.code, tc.want) } - if strings.Contains(participationError(tc.err), "private database detail") { + if tc.code == codes.Internal && strings.Contains(status.Convert(got).Message(), "private database detail") { t.Fatal("private error exposed") } }) diff --git a/internal/app/payload_errors_test.go b/internal/app/payload_errors_test.go new file mode 100644 index 0000000..74ed4b4 --- /dev/null +++ b/internal/app/payload_errors_test.go @@ -0,0 +1,69 @@ +package app + +import ( + "context" + "strings" + "testing" + + "evening_detective_server/internal/services/participation_service" + "evening_detective_server/internal/services/ticket_service" + "evening_detective_server/proto" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" +) + +func assertGRPCStatus(t *testing.T, err error, wantCode codes.Code, wantMessage string) { + t.Helper() + if status.Code(err) != wantCode { + t.Fatalf("status code = %v, want %v", status.Code(err), wantCode) + } + if status.Convert(err).Message() != wantMessage { + t.Fatalf("status message = %q, want %q", status.Convert(err).Message(), wantMessage) + } +} + +func TestGetTicketNotFoundUsesGRPCStatus(t *testing.T) { + rsp, err := (&server{}).GetTicket(context.Background(), nil) + if rsp != nil { + t.Fatalf("GetTicket response = %v, want nil", rsp) + } + assertGRPCStatus(t, err, codes.NotFound, ticket_service.ErrTicketNotFound.Error()) +} + +func TestAcceptTicketNilRequestUsesGRPCStatus(t *testing.T) { + rsp, err := (&server{}).AcceptTicket(ctxWithClaims("organizer"), nil) + if rsp != nil { + t.Fatalf("AcceptTicket response = %v, want nil", rsp) + } + assertGRPCStatus(t, err, codes.NotFound, ticket_service.ErrTicketNotFound.Error()) +} + +func TestGetParticipationInvalidRequestUsesGRPCStatus(t *testing.T) { + rsp, err := (&server{}).GetParticipation(context.Background(), nil) + if rsp != nil { + t.Fatalf("GetParticipation response = %v, want nil", rsp) + } + assertGRPCStatus(t, err, codes.NotFound, participation_service.ErrParticipationLink.Error()) +} + +func TestAnswerParticipationInvalidAnswerUsesGRPCStatus(t *testing.T) { + rsp, err := (&server{}).AnswerParticipation(context.Background(), &proto.AnswerParticipationReq{Answer: "unknown"}) + if rsp != nil { + t.Fatalf("AnswerParticipation response = %v, want nil", rsp) + } + assertGRPCStatus(t, err, codes.InvalidArgument, participation_service.ErrInvalidAnswer.Error()) +} + +func TestResponseMessagesDoNotExposePayloadError(t *testing.T) { + for i := 0; i < proto.File_main_proto.Messages().Len(); i++ { + message := proto.File_main_proto.Messages().Get(i) + if !strings.HasSuffix(string(message.Name()), "Rsp") { + continue + } + for j := 0; j < message.Fields().Len(); j++ { + if message.Fields().Get(j).Name() == "error" { + t.Errorf("%s still exposes payload error field", message.FullName()) + } + } + } +} diff --git a/internal/app/tickets.go b/internal/app/tickets.go index 5536182..d454076 100644 --- a/internal/app/tickets.go +++ b/internal/app/tickets.go @@ -17,11 +17,11 @@ import ( func (s *server) GetTicket(ctx context.Context, req *proto.GetTicketReq) (*proto.GetTicketRsp, error) { _ = grpc.SetHeader(ctx, metadata.Pairs("Cache-Control", "no-store")) if req == nil { - return &proto.GetTicketRsp{Error: ticket_service.ErrTicketNotFound.Error()}, nil + return nil, ticketErrorStatus(ticket_service.ErrTicketNotFound, "не удалось получить билет") } page, err := s.ticketService.Get(ctx, req.Token) if err != nil { - return &proto.GetTicketRsp{Error: ticket_service.ErrTicketNotFound.Error()}, nil + return nil, ticketErrorStatus(err, "не удалось получить билет") } result := &proto.TicketPage{ @@ -49,7 +49,7 @@ func (s *server) AcceptTicket(ctx context.Context, req *proto.AcceptTicketReq) ( return nil, status.Error(codes.PermissionDenied, "permission denied") } if req == nil { - return &proto.AcceptTicketRsp{Error: ticket_service.ErrTicketNotFound.Error()}, nil + return nil, ticketErrorStatus(ticket_service.ErrTicketNotFound, "не удалось принять билет") } page, err := s.ticketService.Accept(ctx, req.Token, claims.UserID) if err != nil { diff --git a/proto/main.pb.go b/proto/main.pb.go index c1e5184..096963c 100644 --- a/proto/main.pb.go +++ b/proto/main.pb.go @@ -456,7 +456,6 @@ func (x *SignupReq) GetAcceptPrivacy() bool { type SignupRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -491,13 +490,6 @@ func (*SignupRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{5} } -func (x *SignupRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type RefreshPasswordReq struct { state protoimpl.MessageState `protogen:"open.v1"` Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` @@ -544,7 +536,6 @@ func (x *RefreshPasswordReq) GetEmail() string { type RefreshPasswordRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -579,13 +570,6 @@ func (*RefreshPasswordRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{7} } -func (x *RefreshPasswordRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type LoginReq struct { state protoimpl.MessageState `protogen:"open.v1"` Email string `protobuf:"bytes,1,opt,name=email,proto3" json:"email,omitempty"` @@ -640,9 +624,8 @@ func (x *LoginReq) GetPassword() string { type LoginRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - AccessToken string `protobuf:"bytes,2,opt,name=accessToken,proto3" json:"accessToken,omitempty"` - RefreshToken string `protobuf:"bytes,3,opt,name=refreshToken,proto3" json:"refreshToken,omitempty"` + AccessToken string `protobuf:"bytes,1,opt,name=accessToken,proto3" json:"accessToken,omitempty"` + RefreshToken string `protobuf:"bytes,2,opt,name=refreshToken,proto3" json:"refreshToken,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -677,13 +660,6 @@ func (*LoginRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{9} } -func (x *LoginRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *LoginRsp) GetAccessToken() string { if x != nil { return x.AccessToken @@ -744,9 +720,8 @@ func (x *RefreshReq) GetRefreshToken() string { type RefreshRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - AccessToken string `protobuf:"bytes,2,opt,name=accessToken,proto3" json:"accessToken,omitempty"` - RefreshToken string `protobuf:"bytes,3,opt,name=refreshToken,proto3" json:"refreshToken,omitempty"` + AccessToken string `protobuf:"bytes,1,opt,name=accessToken,proto3" json:"accessToken,omitempty"` + RefreshToken string `protobuf:"bytes,2,opt,name=refreshToken,proto3" json:"refreshToken,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -781,13 +756,6 @@ func (*RefreshRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{11} } -func (x *RefreshRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *RefreshRsp) GetAccessToken() string { if x != nil { return x.AccessToken @@ -844,7 +812,6 @@ func (*DeleteAccountReq) Descriptor() ([]byte, []int) { type DeleteAccountRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -879,13 +846,6 @@ func (*DeleteAccountRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{13} } -func (x *DeleteAccountRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - // Документы раздаются по постоянным URL, на которые ссылается сервис при // фиксации акцептов соглашений (user_agreements) и форма регистрации. type GetTermsReq struct { @@ -926,8 +886,7 @@ func (*GetTermsReq) Descriptor() ([]byte, []int) { type GetTermsRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -962,13 +921,6 @@ func (*GetTermsRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{15} } -func (x *GetTermsRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetTermsRsp) GetText() string { if x != nil { return x.Text @@ -1014,8 +966,7 @@ func (*GetPrivacyReq) Descriptor() ([]byte, []int) { type GetPrivacyRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1050,13 +1001,6 @@ func (*GetPrivacyRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{17} } -func (x *GetPrivacyRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetPrivacyRsp) GetText() string { if x != nil { return x.Text @@ -1102,8 +1046,7 @@ func (*GetConsentReq) Descriptor() ([]byte, []int) { type GetConsentRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1138,13 +1081,6 @@ func (*GetConsentRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{19} } -func (x *GetConsentRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetConsentRsp) GetText() string { if x != nil { return x.Text @@ -1190,8 +1126,7 @@ func (*GetUsersReq) Descriptor() ([]byte, []int) { type GetUsersRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Users []*User `protobuf:"bytes,2,rep,name=users,proto3" json:"users,omitempty"` + Users []*User `protobuf:"bytes,1,rep,name=users,proto3" json:"users,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1226,13 +1161,6 @@ func (*GetUsersRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{21} } -func (x *GetUsersRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetUsersRsp) GetUsers() []*User { if x != nil { return x.Users @@ -1370,8 +1298,7 @@ func (x *GetUserByIDReq) GetID() int32 { type GetUserByIDRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - User *User `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` + User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1406,13 +1333,6 @@ func (*GetUserByIDRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{24} } -func (x *GetUserByIDRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetUserByIDRsp) GetUser() *User { if x != nil { return x.User @@ -1458,8 +1378,7 @@ func (*GetMeReq) Descriptor() ([]byte, []int) { type GetMeRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - User *User `protobuf:"bytes,2,opt,name=user,proto3" json:"user,omitempty"` + User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1494,13 +1413,6 @@ func (*GetMeRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{26} } -func (x *GetMeRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetMeRsp) GetUser() *User { if x != nil { return x.User @@ -1650,7 +1562,6 @@ func (x *AddUserRoleReq) GetRole() string { type AddUserRoleRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1685,13 +1596,6 @@ func (*AddUserRoleRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{30} } -func (x *AddUserRoleRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type DeleteUserRoleReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -1746,7 +1650,6 @@ func (x *DeleteUserRoleReq) GetRole() string { type DeleteUserRoleRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1781,13 +1684,6 @@ func (*DeleteUserRoleRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{32} } -func (x *DeleteUserRoleRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type GetPermissionsReq struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields @@ -1826,8 +1722,7 @@ func (*GetPermissionsReq) Descriptor() ([]byte, []int) { type GetPermissionsRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Permissions []string `protobuf:"bytes,2,rep,name=permissions,proto3" json:"permissions,omitempty"` + Permissions []string `protobuf:"bytes,1,rep,name=permissions,proto3" json:"permissions,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1862,13 +1757,6 @@ func (*GetPermissionsRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{34} } -func (x *GetPermissionsRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetPermissionsRsp) GetPermissions() []string { if x != nil { return x.Permissions @@ -1930,11 +1818,10 @@ func (x *UploadFileReq) GetData() []byte { type UploadFileRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Filename string `protobuf:"bytes,2,opt,name=filename,proto3" json:"filename,omitempty"` + Filename string `protobuf:"bytes,1,opt,name=filename,proto3" json:"filename,omitempty"` // Тип загруженного файла: image | pdf | audio | video (определяется сервером по // содержимому). Удобен редактору для предзаполнения file_type улики. - FileType string `protobuf:"bytes,3,opt,name=file_type,proto3" json:"file_type,omitempty"` + FileType string `protobuf:"bytes,2,opt,name=file_type,proto3" json:"file_type,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1969,13 +1856,6 @@ func (*UploadFileRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{36} } -func (x *UploadFileRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *UploadFileRsp) GetFilename() string { if x != nil { return x.Filename @@ -2080,8 +1960,7 @@ func (x *AddScenarioReq) GetName() string { type AddScenarioRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - ID int32 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` + ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2116,13 +1995,6 @@ func (*AddScenarioRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{39} } -func (x *AddScenarioRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *AddScenarioRsp) GetID() int32 { if x != nil { return x.ID @@ -2168,8 +2040,7 @@ func (*GetMyScenariosReq) Descriptor() ([]byte, []int) { type GetMyScenariosRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Scenarios []*Scenario `protobuf:"bytes,2,rep,name=scenarios,proto3" json:"scenarios,omitempty"` + Scenarios []*Scenario `protobuf:"bytes,1,rep,name=scenarios,proto3" json:"scenarios,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2204,13 +2075,6 @@ func (*GetMyScenariosRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{41} } -func (x *GetMyScenariosRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetMyScenariosRsp) GetScenarios() []*Scenario { if x != nil { return x.Scenarios @@ -2256,8 +2120,7 @@ func (*GetScenariosCatalogReq) Descriptor() ([]byte, []int) { type GetScenariosCatalogRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Scenarios []*Scenario `protobuf:"bytes,2,rep,name=scenarios,proto3" json:"scenarios,omitempty"` + Scenarios []*Scenario `protobuf:"bytes,1,rep,name=scenarios,proto3" json:"scenarios,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2292,13 +2155,6 @@ func (*GetScenariosCatalogRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{43} } -func (x *GetScenariosCatalogRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetScenariosCatalogRsp) GetScenarios() []*Scenario { if x != nil { return x.Scenarios @@ -2352,8 +2208,7 @@ func (x *GetScenarioReq) GetID() int32 { type GetScenarioRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Scenario *Scenario `protobuf:"bytes,2,opt,name=scenario,proto3" json:"scenario,omitempty"` + Scenario *Scenario `protobuf:"bytes,1,opt,name=scenario,proto3" json:"scenario,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2388,13 +2243,6 @@ func (*GetScenarioRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{45} } -func (x *GetScenarioRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetScenarioRsp) GetScenario() *Scenario { if x != nil { return x.Scenario @@ -3287,7 +3135,6 @@ func (x *UpdateScenarioReq) GetImage() string { type UpdateScenarioRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3322,13 +3169,6 @@ func (*UpdateScenarioRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{59} } -func (x *UpdateScenarioRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type PublicScenarioReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -3375,7 +3215,6 @@ func (x *PublicScenarioReq) GetID() int32 { type PublicScenarioRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3410,13 +3249,6 @@ func (*PublicScenarioRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{61} } -func (x *PublicScenarioRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type DraftScenarioReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -3463,7 +3295,6 @@ func (x *DraftScenarioReq) GetID() int32 { type DraftScenarioRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3498,13 +3329,6 @@ func (*DraftScenarioRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{63} } -func (x *DraftScenarioRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type DeleteScenarioReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -3551,7 +3375,6 @@ func (x *DeleteScenarioReq) GetID() int32 { type DeleteScenarioRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3586,13 +3409,6 @@ func (*DeleteScenarioRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{65} } -func (x *DeleteScenarioRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type AddScenarioPlaceReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -3647,7 +3463,6 @@ func (x *AddScenarioPlaceReq) GetPlace() *Place { type AddScenarioPlaceRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3682,13 +3497,6 @@ func (*AddScenarioPlaceRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{67} } -func (x *AddScenarioPlaceRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type UpdateScenarioPlaceReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -3751,7 +3559,6 @@ func (x *UpdateScenarioPlaceReq) GetPlace() *Place { type UpdateScenarioPlaceRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3786,13 +3593,6 @@ func (*UpdateScenarioPlaceRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{69} } -func (x *UpdateScenarioPlaceRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type DeleteScenarioPlaceReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -3847,7 +3647,6 @@ func (x *DeleteScenarioPlaceReq) GetCode() string { type DeleteScenarioPlaceRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3882,13 +3681,6 @@ func (*DeleteScenarioPlaceRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{71} } -func (x *DeleteScenarioPlaceRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type UpdateScenarioConclusionReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -3943,7 +3735,6 @@ func (x *UpdateScenarioConclusionReq) GetConclusion() *Conclusion { type UpdateScenarioConclusionRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -3978,13 +3769,6 @@ func (*UpdateScenarioConclusionRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{73} } -func (x *UpdateScenarioConclusionRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type UpdateScenarioIntroReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -4039,7 +3823,6 @@ func (x *UpdateScenarioIntroReq) GetIntroduction() *Introduction { type UpdateScenarioIntroRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4074,13 +3857,6 @@ func (*UpdateScenarioIntroRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{75} } -func (x *UpdateScenarioIntroRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type AddScenarioQuestionReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -4135,7 +3911,6 @@ func (x *AddScenarioQuestionReq) GetQuestion() *Question { type AddScenarioQuestionRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4170,13 +3945,6 @@ func (*AddScenarioQuestionRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{77} } -func (x *AddScenarioQuestionRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type UpdateScenarioQuestionReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -4239,7 +4007,6 @@ func (x *UpdateScenarioQuestionReq) GetQuestion() *Question { type UpdateScenarioQuestionRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4274,13 +4041,6 @@ func (*UpdateScenarioQuestionRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{79} } -func (x *UpdateScenarioQuestionRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type DeleteScenarioQuestionReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -4335,7 +4095,6 @@ func (x *DeleteScenarioQuestionReq) GetCode() string { type DeleteScenarioQuestionRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4370,13 +4129,6 @@ func (*DeleteScenarioQuestionRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{81} } -func (x *DeleteScenarioQuestionRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type DownloadScenarioArchiveReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -4423,8 +4175,7 @@ func (x *DownloadScenarioArchiveReq) GetID() int32 { type UploadScenarioArchiveRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - ID int32 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` + ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4459,13 +4210,6 @@ func (*UploadScenarioArchiveRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{83} } -func (x *UploadScenarioArchiveRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *UploadScenarioArchiveRsp) GetID() int32 { if x != nil { return x.ID @@ -4559,8 +4303,7 @@ func (x *AddGameReq) GetLocation() string { type AddGameRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - ID int32 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` + ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4595,13 +4338,6 @@ func (*AddGameRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{85} } -func (x *AddGameRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *AddGameRsp) GetID() int32 { if x != nil { return x.ID @@ -4647,8 +4383,7 @@ func (*GetGamesReq) Descriptor() ([]byte, []int) { type GetGamesRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Games []*Game `protobuf:"bytes,2,rep,name=games,proto3" json:"games,omitempty"` + Games []*Game `protobuf:"bytes,1,rep,name=games,proto3" json:"games,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -4683,13 +4418,6 @@ func (*GetGamesRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{87} } -func (x *GetGamesRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetGamesRsp) GetGames() []*Game { if x != nil { return x.Games @@ -5047,9 +4775,8 @@ func (*CreateScreenSessionReq) Descriptor() ([]byte, []int) { type CreateScreenSessionRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - ScreenID string `protobuf:"bytes,2,opt,name=screenID,proto3" json:"screenID,omitempty"` - AccessToken string `protobuf:"bytes,3,opt,name=access_token,json=accessToken,proto3" json:"access_token,omitempty"` + ScreenID string `protobuf:"bytes,1,opt,name=screenID,proto3" json:"screenID,omitempty"` + AccessToken string `protobuf:"bytes,2,opt,name=access_token,json=accessToken,proto3" json:"access_token,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -5084,13 +4811,6 @@ func (*CreateScreenSessionRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{91} } -func (x *CreateScreenSessionRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *CreateScreenSessionRsp) GetScreenID() string { if x != nil { return x.ScreenID @@ -5159,8 +4879,7 @@ func (x *GetScreenStateReq) GetAccessToken() string { type GetScreenStateRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - State *ScreenState `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + State *ScreenState `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -5195,13 +4914,6 @@ func (*GetScreenStateRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{93} } -func (x *GetScreenStateRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetScreenStateRsp) GetState() *ScreenState { if x != nil { return x.State @@ -5255,8 +4967,7 @@ func (x *GetGameScreensReq) GetGameID() int32 { type GetGameScreensRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Screens []*ScreenState `protobuf:"bytes,2,rep,name=screens,proto3" json:"screens,omitempty"` + Screens []*ScreenState `protobuf:"bytes,1,rep,name=screens,proto3" json:"screens,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -5291,13 +5002,6 @@ func (*GetGameScreensRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{95} } -func (x *GetGameScreensRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetGameScreensRsp) GetScreens() []*ScreenState { if x != nil { return x.Screens @@ -5367,8 +5071,7 @@ func (x *BindScreenReq) GetGameID() int32 { type BindScreenRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - State *ScreenState `protobuf:"bytes,2,opt,name=state,proto3" json:"state,omitempty"` + State *ScreenState `protobuf:"bytes,1,opt,name=state,proto3" json:"state,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -5403,13 +5106,6 @@ func (*BindScreenRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{97} } -func (x *BindScreenRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *BindScreenRsp) GetState() *ScreenState { if x != nil { return x.State @@ -5463,7 +5159,6 @@ func (x *UnbindScreenReq) GetScreenID() string { type UnbindScreenRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -5498,13 +5193,6 @@ func (*UnbindScreenRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{99} } -func (x *UnbindScreenRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type SetScreenSoundReq struct { state protoimpl.MessageState `protogen:"open.v1"` ScreenID string `protobuf:"bytes,1,opt,name=screenID,proto3" json:"screenID,omitempty"` @@ -5559,7 +5247,6 @@ func (x *SetScreenSoundReq) GetSoundEnabled() bool { type SetScreenSoundRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -5594,13 +5281,6 @@ func (*SetScreenSoundRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{101} } -func (x *SetScreenSoundRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type MapItem struct { state protoimpl.MessageState `protogen:"open.v1"` Kind string `protobuf:"bytes,1,opt,name=kind,proto3" json:"kind,omitempty"` @@ -5747,8 +5427,7 @@ func (x *GetGameMapReq) GetGameID() int32 { type GetGameMapRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Items []*MapItem `protobuf:"bytes,2,rep,name=items,proto3" json:"items,omitempty"` + Items []*MapItem `protobuf:"bytes,1,rep,name=items,proto3" json:"items,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -5783,13 +5462,6 @@ func (*GetGameMapRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{104} } -func (x *GetGameMapRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetGameMapRsp) GetItems() []*MapItem { if x != nil { return x.Items @@ -5883,7 +5555,6 @@ func (x *UpdateGameMapItemReq) GetHidden() bool { type UpdateGameMapItemRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -5918,13 +5589,6 @@ func (*UpdateGameMapItemRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{106} } -func (x *UpdateGameMapItemRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type SetScreenModeReq struct { state protoimpl.MessageState `protogen:"open.v1"` GameID int32 `protobuf:"varint,1,opt,name=gameID,proto3" json:"gameID,omitempty"` @@ -5979,7 +5643,6 @@ func (x *SetScreenModeReq) GetMode() ScreenMode { type SetScreenModeRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -6014,13 +5677,6 @@ func (*SetScreenModeRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{108} } -func (x *SetScreenModeRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type SetScreenTimerReq struct { state protoimpl.MessageState `protogen:"open.v1"` GameID int32 `protobuf:"varint,1,opt,name=gameID,proto3" json:"gameID,omitempty"` @@ -6083,7 +5739,6 @@ func (x *SetScreenTimerReq) GetLabel() string { type SetScreenTimerRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -6118,13 +5773,6 @@ func (*SetScreenTimerRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{110} } -func (x *SetScreenTimerRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type SendScreenCommandReq struct { state protoimpl.MessageState `protogen:"open.v1"` GameID int32 `protobuf:"varint,1,opt,name=gameID,proto3" json:"gameID,omitempty"` @@ -6195,7 +5843,6 @@ func (x *SendScreenCommandReq) GetVolume() int32 { type SendScreenCommandRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -6230,13 +5877,6 @@ func (*SendScreenCommandRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{112} } -func (x *SendScreenCommandRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type GetScreenResultsReq struct { state protoimpl.MessageState `protogen:"open.v1"` ScreenID string `protobuf:"bytes,1,opt,name=screenID,proto3" json:"screenID,omitempty"` @@ -6291,9 +5931,8 @@ func (x *GetScreenResultsReq) GetAccessToken() string { type GetScreenResultsRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Questions []*ResultsQuestion `protobuf:"bytes,2,rep,name=questions,proto3" json:"questions,omitempty"` - Teams []*TeamResult `protobuf:"bytes,3,rep,name=teams,proto3" json:"teams,omitempty"` + Questions []*ResultsQuestion `protobuf:"bytes,1,rep,name=questions,proto3" json:"questions,omitempty"` + Teams []*TeamResult `protobuf:"bytes,2,rep,name=teams,proto3" json:"teams,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -6328,13 +5967,6 @@ func (*GetScreenResultsRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{114} } -func (x *GetScreenResultsRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetScreenResultsRsp) GetQuestions() []*ResultsQuestion { if x != nil { return x.Questions @@ -6450,21 +6082,19 @@ func (x *AnswerParticipationReq) GetAnswer() string { type ParticipationRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - // Пустая строка при успехе; иначе сообщение об ошибке для пользователя. - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` // Название команды. Данные доступны только по действительному токену. - TeamName string `protobuf:"bytes,2,opt,name=team_name,json=teamName,proto3" json:"team_name,omitempty"` + TeamName string `protobuf:"bytes,1,opt,name=team_name,json=teamName,proto3" json:"team_name,omitempty"` // Название игры. - GameName string `protobuf:"bytes,3,opt,name=game_name,json=gameName,proto3" json:"game_name,omitempty"` + GameName string `protobuf:"bytes,2,opt,name=game_name,json=gameName,proto3" json:"game_name,omitempty"` // Плановое начало игры, UTC (RFC 3339 в JSON). - StartAt *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=start_at,json=startAt,proto3" json:"start_at,omitempty"` + StartAt *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=start_at,json=startAt,proto3" json:"start_at,omitempty"` // Заявленное число участников команды. - ParticipantsCount int32 `protobuf:"varint,5,opt,name=participants_count,json=participantsCount,proto3" json:"participants_count,omitempty"` + ParticipantsCount int32 `protobuf:"varint,4,opt,name=participants_count,json=participantsCount,proto3" json:"participants_count,omitempty"` // pending — ожидает ответа, confirmed — подтверждено, cancelled — отменено. - Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` // Новые ответы закрыты: наступило плановое начало или игра вышла из draft. // Изменение уже принятого решения запрещено независимо от этого поля. - Closed bool `protobuf:"varint,7,opt,name=closed,proto3" json:"closed,omitempty"` + Closed bool `protobuf:"varint,6,opt,name=closed,proto3" json:"closed,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -6499,13 +6129,6 @@ func (*ParticipationRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{117} } -func (x *ParticipationRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *ParticipationRsp) GetTeamName() string { if x != nil { return x.TeamName @@ -6730,8 +6353,7 @@ func (x *GetGameReq) GetID() int32 { type GetGameRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Game *Game `protobuf:"bytes,2,opt,name=game,proto3" json:"game,omitempty"` + Game *Game `protobuf:"bytes,1,opt,name=game,proto3" json:"game,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -6766,13 +6388,6 @@ func (*GetGameRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{120} } -func (x *GetGameRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetGameRsp) GetGame() *Game { if x != nil { return x.Game @@ -6826,9 +6441,8 @@ func (x *GetGameAnswersReq) GetGameID() int32 { type GetGameAnswersRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Questions []*Question `protobuf:"bytes,2,rep,name=questions,proto3" json:"questions,omitempty"` - Teams []*TeamAnswers `protobuf:"bytes,3,rep,name=teams,proto3" json:"teams,omitempty"` + Questions []*Question `protobuf:"bytes,1,rep,name=questions,proto3" json:"questions,omitempty"` + Teams []*TeamAnswers `protobuf:"bytes,2,rep,name=teams,proto3" json:"teams,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -6863,13 +6477,6 @@ func (*GetGameAnswersRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{122} } -func (x *GetGameAnswersRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetGameAnswersRsp) GetQuestions() []*Question { if x != nil { return x.Questions @@ -7066,9 +6673,8 @@ func (x *TeamResult) GetActionsCount() int32 { type GetGameResultsRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Questions []*ResultsQuestion `protobuf:"bytes,2,rep,name=questions,proto3" json:"questions,omitempty"` - Teams []*TeamResult `protobuf:"bytes,3,rep,name=teams,proto3" json:"teams,omitempty"` + Questions []*ResultsQuestion `protobuf:"bytes,1,rep,name=questions,proto3" json:"questions,omitempty"` + Teams []*TeamResult `protobuf:"bytes,2,rep,name=teams,proto3" json:"teams,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -7103,13 +6709,6 @@ func (*GetGameResultsRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{126} } -func (x *GetGameResultsRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetGameResultsRsp) GetQuestions() []*ResultsQuestion { if x != nil { return x.Questions @@ -7310,8 +6909,7 @@ func (x *CreateGameReviewReq) GetText() string { type CreateGameReviewRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Review *GameReview `protobuf:"bytes,2,opt,name=review,proto3" json:"review,omitempty"` + Review *GameReview `protobuf:"bytes,1,opt,name=review,proto3" json:"review,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -7346,13 +6944,6 @@ func (*CreateGameReviewRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{129} } -func (x *CreateGameReviewRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *CreateGameReviewRsp) GetReview() *GameReview { if x != nil { return x.Review @@ -7486,10 +7077,9 @@ func (*GetReviewsForModerationReq) Descriptor() ([]byte, []int) { type GetGameReviewsRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - AverageRating float64 `protobuf:"fixed64,2,opt,name=average_rating,json=averageRating,proto3" json:"average_rating,omitempty"` - ReviewsCount int32 `protobuf:"varint,3,opt,name=reviews_count,json=reviewsCount,proto3" json:"reviews_count,omitempty"` - Reviews []*GameReview `protobuf:"bytes,4,rep,name=reviews,proto3" json:"reviews,omitempty"` + AverageRating float64 `protobuf:"fixed64,1,opt,name=average_rating,json=averageRating,proto3" json:"average_rating,omitempty"` + ReviewsCount int32 `protobuf:"varint,2,opt,name=reviews_count,json=reviewsCount,proto3" json:"reviews_count,omitempty"` + Reviews []*GameReview `protobuf:"bytes,3,rep,name=reviews,proto3" json:"reviews,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -7524,13 +7114,6 @@ func (*GetGameReviewsRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{133} } -func (x *GetGameReviewsRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetGameReviewsRsp) GetAverageRating() float64 { if x != nil { return x.AverageRating @@ -7606,8 +7189,7 @@ func (x *ModerateGameReviewReq) GetStatus() string { type ModerateGameReviewRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Review *GameReview `protobuf:"bytes,2,opt,name=review,proto3" json:"review,omitempty"` + Review *GameReview `protobuf:"bytes,1,opt,name=review,proto3" json:"review,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -7642,13 +7224,6 @@ func (*ModerateGameReviewRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{135} } -func (x *ModerateGameReviewRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *ModerateGameReviewRsp) GetReview() *GameReview { if x != nil { return x.Review @@ -7750,7 +7325,6 @@ func (x *UpdateGameReq) GetLocation() string { type UpdateGameRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -7785,13 +7359,6 @@ func (*UpdateGameRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{137} } -func (x *UpdateGameRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type StartGameReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -7838,7 +7405,6 @@ func (x *StartGameReq) GetID() int32 { type StartGameRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -7873,13 +7439,6 @@ func (*StartGameRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{139} } -func (x *StartGameRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type PauseGameReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -7926,7 +7485,6 @@ func (x *PauseGameReq) GetID() int32 { type PauseGameRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -7961,13 +7519,6 @@ func (*PauseGameRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{141} } -func (x *PauseGameRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type PlayGameReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -8014,7 +7565,6 @@ func (x *PlayGameReq) GetID() int32 { type PlayGameRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8049,13 +7599,6 @@ func (*PlayGameRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{143} } -func (x *PlayGameRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type FinishGameReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -8102,7 +7645,6 @@ func (x *FinishGameReq) GetID() int32 { type FinishGameRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8137,13 +7679,6 @@ func (*FinishGameRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{145} } -func (x *FinishGameRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type ResetGameReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -8190,7 +7725,6 @@ func (x *ResetGameReq) GetID() int32 { type ResetGameRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8225,13 +7759,6 @@ func (*ResetGameRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{147} } -func (x *ResetGameRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type DeleteGameReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -8278,7 +7805,6 @@ func (x *DeleteGameReq) GetID() int32 { type DeleteGameRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8313,13 +7839,6 @@ func (*DeleteGameRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{149} } -func (x *DeleteGameRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type AddTeamReq struct { state protoimpl.MessageState `protogen:"open.v1"` GameID int32 `protobuf:"varint,1,opt,name=gameID,proto3" json:"gameID,omitempty"` @@ -8382,9 +7901,8 @@ func (x *AddTeamReq) GetCaptainEmail() string { type AddTeamRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - ID int32 `protobuf:"varint,2,opt,name=ID,proto3" json:"ID,omitempty"` - Password string `protobuf:"bytes,3,opt,name=password,proto3" json:"password,omitempty"` + ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8419,13 +7937,6 @@ func (*AddTeamRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{151} } -func (x *AddTeamRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *AddTeamRsp) GetID() int32 { if x != nil { return x.ID @@ -8494,7 +8005,6 @@ func (x *UpdateTeamReq) GetName() string { type UpdateTeamRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8529,13 +8039,6 @@ func (*UpdateTeamRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{153} } -func (x *UpdateTeamRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type DeleteTeamReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -8582,7 +8085,6 @@ func (x *DeleteTeamReq) GetID() int64 { type DeleteTeamRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8617,13 +8119,6 @@ func (*DeleteTeamRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{155} } -func (x *DeleteTeamRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type GiveTeamApplicationsReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -8678,7 +8173,6 @@ func (x *GiveTeamApplicationsReq) GetName() string { type GiveTeamApplicationsRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8713,13 +8207,6 @@ func (*GiveTeamApplicationsRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{157} } -func (x *GiveTeamApplicationsRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type GetTeamStoryReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -8774,10 +8261,9 @@ func (x *GetTeamStoryReq) GetPassword() string { type GetTeamStoryRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Story *Story `protobuf:"bytes,2,opt,name=story,proto3" json:"story,omitempty"` - Game *Game `protobuf:"bytes,3,opt,name=game,proto3" json:"game,omitempty"` - Actions []*TeamAction `protobuf:"bytes,4,rep,name=actions,proto3" json:"actions,omitempty"` + Story *Story `protobuf:"bytes,1,opt,name=story,proto3" json:"story,omitempty"` + Game *Game `protobuf:"bytes,2,opt,name=game,proto3" json:"game,omitempty"` + Actions []*TeamAction `protobuf:"bytes,3,rep,name=actions,proto3" json:"actions,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8812,13 +8298,6 @@ func (*GetTeamStoryRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{159} } -func (x *GetTeamStoryRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetTeamStoryRsp) GetStory() *Story { if x != nil { return x.Story @@ -8954,7 +8433,6 @@ func (x *AddTeamActionReq) GetCode() string { type AddTeamActionRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -8989,13 +8467,6 @@ func (*AddTeamActionRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{162} } -func (x *AddTeamActionRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type DeleteLastTeamActionReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -9042,7 +8513,6 @@ func (x *DeleteLastTeamActionReq) GetID() int64 { type DeleteLastTeamActionRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9077,13 +8547,6 @@ func (*DeleteLastTeamActionRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{164} } -func (x *DeleteLastTeamActionRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type GetTeamAnswersReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -9138,8 +8601,7 @@ func (x *GetTeamAnswersReq) GetPassword() string { type GetTeamAnswersRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Answers []*Answer `protobuf:"bytes,2,rep,name=answers,proto3" json:"answers,omitempty"` + Answers []*Answer `protobuf:"bytes,1,rep,name=answers,proto3" json:"answers,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9174,13 +8636,6 @@ func (*GetTeamAnswersRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{166} } -func (x *GetTeamAnswersRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetTeamAnswersRsp) GetAnswers() []*Answer { if x != nil { return x.Answers @@ -9250,7 +8705,6 @@ func (x *SubmitTeamAnswersReq) GetAnswers() []*Answer { type SubmitTeamAnswersRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9285,13 +8739,6 @@ func (*SubmitTeamAnswersRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{168} } -func (x *SubmitTeamAnswersRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type SetTeamAnswerScoreReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int64 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -9355,7 +8802,6 @@ func (x *SetTeamAnswerScoreReq) GetScore() int32 { type SetTeamAnswerScoreRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9390,13 +8836,6 @@ func (*SetTeamAnswerScoreRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{170} } -func (x *SetTeamAnswerScoreRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type UpdateScenarioBackgroundReq struct { state protoimpl.MessageState `protogen:"open.v1"` ID int32 `protobuf:"varint,1,opt,name=ID,proto3" json:"ID,omitempty"` @@ -9451,7 +8890,6 @@ func (x *UpdateScenarioBackgroundReq) GetBackground() string { type UpdateScenarioBackgroundRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9486,13 +8924,6 @@ func (*UpdateScenarioBackgroundRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{172} } -func (x *UpdateScenarioBackgroundRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - type IssueGameTicketsReq struct { state protoimpl.MessageState `protogen:"open.v1"` GameID int32 `protobuf:"varint,1,opt,name=gameID,proto3" json:"gameID,omitempty"` @@ -9547,8 +8978,7 @@ func (x *IssueGameTicketsReq) GetCount() int32 { type IssueGameTicketsRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Tickets []*Ticket `protobuf:"bytes,2,rep,name=tickets,proto3" json:"tickets,omitempty"` + Tickets []*Ticket `protobuf:"bytes,1,rep,name=tickets,proto3" json:"tickets,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9583,13 +9013,6 @@ func (*IssueGameTicketsRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{174} } -func (x *IssueGameTicketsRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *IssueGameTicketsRsp) GetTickets() []*Ticket { if x != nil { return x.Tickets @@ -9695,8 +9118,7 @@ func (x *GetTicketReq) GetToken() string { type GetTicketRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Ticket *TicketPage `protobuf:"bytes,2,opt,name=ticket,proto3" json:"ticket,omitempty"` + Ticket *TicketPage `protobuf:"bytes,1,opt,name=ticket,proto3" json:"ticket,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9731,13 +9153,6 @@ func (*GetTicketRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{177} } -func (x *GetTicketRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *GetTicketRsp) GetTicket() *TicketPage { if x != nil { return x.Ticket @@ -9791,8 +9206,7 @@ func (x *AcceptTicketReq) GetToken() string { type AcceptTicketRsp struct { state protoimpl.MessageState `protogen:"open.v1"` - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` - Ticket *TicketPage `protobuf:"bytes,2,opt,name=ticket,proto3" json:"ticket,omitempty"` + Ticket *TicketPage `protobuf:"bytes,1,opt,name=ticket,proto3" json:"ticket,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -9827,13 +9241,6 @@ func (*AcceptTicketRsp) Descriptor() ([]byte, []int) { return file_main_proto_rawDescGZIP(), []int{179} } -func (x *AcceptTicketRsp) GetError() string { - if x != nil { - return x.Error - } - return "" -} - func (x *AcceptTicketRsp) GetTicket() *TicketPage { if x != nil { return x.Ticket @@ -9957,47 +9364,38 @@ const file_main_proto_rawDesc = "" + "\busername\x18\x01 \x01(\tR\busername\x12\x14\n" + "\x05email\x18\x02 \x01(\tR\x05email\x12!\n" + "\faccept_terms\x18\x03 \x01(\bR\vacceptTerms\x12%\n" + - "\x0eaccept_privacy\x18\x04 \x01(\bR\racceptPrivacy\"!\n" + - "\tSignupRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"*\n" + + "\x0eaccept_privacy\x18\x04 \x01(\bR\racceptPrivacy\"\v\n" + + "\tSignupRsp\"*\n" + "\x12RefreshPasswordReq\x12\x14\n" + - "\x05email\x18\x01 \x01(\tR\x05email\"*\n" + - "\x12RefreshPasswordRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"<\n" + + "\x05email\x18\x01 \x01(\tR\x05email\"\x14\n" + + "\x12RefreshPasswordRsp\"<\n" + "\bLoginReq\x12\x14\n" + "\x05email\x18\x01 \x01(\tR\x05email\x12\x1a\n" + - "\bpassword\x18\x02 \x01(\tR\bpassword\"f\n" + - "\bLoginRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12 \n" + - "\vaccessToken\x18\x02 \x01(\tR\vaccessToken\x12\"\n" + - "\frefreshToken\x18\x03 \x01(\tR\frefreshToken\"0\n" + + "\bpassword\x18\x02 \x01(\tR\bpassword\"P\n" + + "\bLoginRsp\x12 \n" + + "\vaccessToken\x18\x01 \x01(\tR\vaccessToken\x12\"\n" + + "\frefreshToken\x18\x02 \x01(\tR\frefreshToken\"0\n" + "\n" + "RefreshReq\x12\"\n" + - "\frefreshToken\x18\x01 \x01(\tR\frefreshToken\"h\n" + + "\frefreshToken\x18\x01 \x01(\tR\frefreshToken\"R\n" + "\n" + - "RefreshRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12 \n" + - "\vaccessToken\x18\x02 \x01(\tR\vaccessToken\x12\"\n" + - "\frefreshToken\x18\x03 \x01(\tR\frefreshToken\"\x12\n" + - "\x10DeleteAccountReq\"(\n" + - "\x10DeleteAccountRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\r\n" + - "\vGetTermsReq\"7\n" + - "\vGetTermsRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12\x12\n" + - "\x04text\x18\x02 \x01(\tR\x04text\"\x0f\n" + - "\rGetPrivacyReq\"9\n" + - "\rGetPrivacyRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12\x12\n" + - "\x04text\x18\x02 \x01(\tR\x04text\"\x0f\n" + - "\rGetConsentReq\"9\n" + - "\rGetConsentRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12\x12\n" + - "\x04text\x18\x02 \x01(\tR\x04text\"\r\n" + - "\vGetUsersReq\"_\n" + - "\vGetUsersRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12:\n" + - "\x05users\x18\x02 \x03(\v2$.crabs.evening_detective_server.UserR\x05users\"\xb6\x01\n" + + "RefreshRsp\x12 \n" + + "\vaccessToken\x18\x01 \x01(\tR\vaccessToken\x12\"\n" + + "\frefreshToken\x18\x02 \x01(\tR\frefreshToken\"\x12\n" + + "\x10DeleteAccountReq\"\x12\n" + + "\x10DeleteAccountRsp\"\r\n" + + "\vGetTermsReq\"!\n" + + "\vGetTermsRsp\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\"\x0f\n" + + "\rGetPrivacyReq\"#\n" + + "\rGetPrivacyRsp\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\"\x0f\n" + + "\rGetConsentReq\"#\n" + + "\rGetConsentRsp\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\"\r\n" + + "\vGetUsersReq\"I\n" + + "\vGetUsersRsp\x12:\n" + + "\x05users\x18\x01 \x03(\v2$.crabs.evening_detective_server.UserR\x05users\"\xb6\x01\n" + "\x04User\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x1a\n" + "\busername\x18\x02 \x01(\tR\busername\x12\x14\n" + @@ -10007,60 +9405,50 @@ const file_main_proto_rawDesc = "" + "\n" + "created_at\x18\x06 \x01(\v2\x1a.google.protobuf.TimestampR\tcreatedAt\" \n" + "\x0eGetUserByIDReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\"`\n" + - "\x0eGetUserByIDRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x128\n" + - "\x04user\x18\x02 \x01(\v2$.crabs.evening_detective_server.UserR\x04user\"\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"J\n" + + "\x0eGetUserByIDRsp\x128\n" + + "\x04user\x18\x01 \x01(\v2$.crabs.evening_detective_server.UserR\x04user\"\n" + "\n" + - "\bGetMeReq\"Z\n" + - "\bGetMeRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x128\n" + - "\x04user\x18\x02 \x01(\v2$.crabs.evening_detective_server.UserR\x04user\"J\n" + + "\bGetMeReq\"D\n" + + "\bGetMeRsp\x128\n" + + "\x04user\x18\x01 \x01(\v2$.crabs.evening_detective_server.UserR\x04user\"J\n" + "\x15ChangeUserPasswordReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12!\n" + "\fnew_password\x18\x02 \x01(\tR\vnewPassword\"\x17\n" + "\x15ChangeUserPasswordRsp\"4\n" + "\x0eAddUserRoleReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + - "\x04role\x18\x02 \x01(\tR\x04role\"&\n" + - "\x0eAddUserRoleRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"7\n" + + "\x04role\x18\x02 \x01(\tR\x04role\"\x10\n" + + "\x0eAddUserRoleRsp\"7\n" + "\x11DeleteUserRoleReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + - "\x04role\x18\x02 \x01(\tR\x04role\")\n" + - "\x11DeleteUserRoleRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\x13\n" + - "\x11GetPermissionsReq\"K\n" + - "\x11GetPermissionsRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12 \n" + - "\vpermissions\x18\x02 \x03(\tR\vpermissions\"?\n" + + "\x04role\x18\x02 \x01(\tR\x04role\"\x13\n" + + "\x11DeleteUserRoleRsp\"\x13\n" + + "\x11GetPermissionsReq\"5\n" + + "\x11GetPermissionsRsp\x12 \n" + + "\vpermissions\x18\x01 \x03(\tR\vpermissions\"?\n" + "\rUploadFileReq\x12\x1a\n" + "\bfilename\x18\x01 \x01(\tR\bfilename\x12\x12\n" + - "\x04data\x18\x02 \x01(\fR\x04data\"_\n" + - "\rUploadFileRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12\x1a\n" + - "\bfilename\x18\x02 \x01(\tR\bfilename\x12\x1c\n" + - "\tfile_type\x18\x03 \x01(\tR\tfile_type\"-\n" + + "\x04data\x18\x02 \x01(\fR\x04data\"I\n" + + "\rUploadFileRsp\x12\x1a\n" + + "\bfilename\x18\x01 \x01(\tR\bfilename\x12\x1c\n" + + "\tfile_type\x18\x02 \x01(\tR\tfile_type\"-\n" + "\x0fDownloadFileReq\x12\x1a\n" + "\bfilename\x18\x01 \x01(\tR\bfilename\"$\n" + "\x0eAddScenarioReq\x12\x12\n" + - "\x04name\x18\x01 \x01(\tR\x04name\"6\n" + - "\x0eAddScenarioRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12\x0e\n" + - "\x02ID\x18\x02 \x01(\x05R\x02ID\"\x13\n" + - "\x11GetMyScenariosReq\"q\n" + - "\x11GetMyScenariosRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12F\n" + - "\tscenarios\x18\x02 \x03(\v2(.crabs.evening_detective_server.ScenarioR\tscenarios\"\x18\n" + - "\x16GetScenariosCatalogReq\"v\n" + - "\x16GetScenariosCatalogRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12F\n" + - "\tscenarios\x18\x02 \x03(\v2(.crabs.evening_detective_server.ScenarioR\tscenarios\" \n" + + "\x04name\x18\x01 \x01(\tR\x04name\" \n" + + "\x0eAddScenarioRsp\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"\x13\n" + + "\x11GetMyScenariosReq\"[\n" + + "\x11GetMyScenariosRsp\x12F\n" + + "\tscenarios\x18\x01 \x03(\v2(.crabs.evening_detective_server.ScenarioR\tscenarios\"\x18\n" + + "\x16GetScenariosCatalogReq\"`\n" + + "\x16GetScenariosCatalogRsp\x12F\n" + + "\tscenarios\x18\x01 \x03(\v2(.crabs.evening_detective_server.ScenarioR\tscenarios\" \n" + "\x0eGetScenarioReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\"l\n" + - "\x0eGetScenarioRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12D\n" + - "\bscenario\x18\x02 \x01(\v2(.crabs.evening_detective_server.ScenarioR\bscenario\"\x9e\x04\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"V\n" + + "\x0eGetScenarioRsp\x12D\n" + + "\bscenario\x18\x01 \x01(\v2(.crabs.evening_detective_server.ScenarioR\bscenario\"\x9e\x04\n" + "\bScenario\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12%\n" + @@ -10134,70 +9522,57 @@ const file_main_proto_rawDesc = "" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12 \n" + "\vdescription\x18\x03 \x01(\tR\vdescription\x12\x14\n" + - "\x05image\x18\x04 \x01(\tR\x05image\")\n" + - "\x11UpdateScenarioRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"#\n" + + "\x05image\x18\x04 \x01(\tR\x05image\"\x13\n" + + "\x11UpdateScenarioRsp\"#\n" + "\x11PublicScenarioReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\")\n" + - "\x11PublicScenarioRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\"\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"\x13\n" + + "\x11PublicScenarioRsp\"\"\n" + "\x10DraftScenarioReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\"(\n" + - "\x10DraftScenarioRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"#\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"\x12\n" + + "\x10DraftScenarioRsp\"#\n" + "\x11DeleteScenarioReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\")\n" + - "\x11DeleteScenarioRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"b\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"\x13\n" + + "\x11DeleteScenarioRsp\"b\n" + "\x13AddScenarioPlaceReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12;\n" + - "\x05place\x18\x02 \x01(\v2%.crabs.evening_detective_server.PlaceR\x05place\"+\n" + - "\x13AddScenarioPlaceRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"y\n" + + "\x05place\x18\x02 \x01(\v2%.crabs.evening_detective_server.PlaceR\x05place\"\x15\n" + + "\x13AddScenarioPlaceRsp\"y\n" + "\x16UpdateScenarioPlaceReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + "\x04code\x18\x02 \x01(\tR\x04code\x12;\n" + - "\x05place\x18\x03 \x01(\v2%.crabs.evening_detective_server.PlaceR\x05place\".\n" + - "\x16UpdateScenarioPlaceRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"<\n" + + "\x05place\x18\x03 \x01(\v2%.crabs.evening_detective_server.PlaceR\x05place\"\x18\n" + + "\x16UpdateScenarioPlaceRsp\"<\n" + "\x16DeleteScenarioPlaceReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + - "\x04code\x18\x02 \x01(\tR\x04code\".\n" + - "\x16DeleteScenarioPlaceRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"y\n" + + "\x04code\x18\x02 \x01(\tR\x04code\"\x18\n" + + "\x16DeleteScenarioPlaceRsp\"y\n" + "\x1bUpdateScenarioConclusionReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12J\n" + "\n" + "conclusion\x18\x02 \x01(\v2*.crabs.evening_detective_server.ConclusionR\n" + - "conclusion\"3\n" + - "\x1bUpdateScenarioConclusionRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"z\n" + + "conclusion\"\x1d\n" + + "\x1bUpdateScenarioConclusionRsp\"z\n" + "\x16UpdateScenarioIntroReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12P\n" + - "\fintroduction\x18\x02 \x01(\v2,.crabs.evening_detective_server.IntroductionR\fintroduction\".\n" + - "\x16UpdateScenarioIntroRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"n\n" + + "\fintroduction\x18\x02 \x01(\v2,.crabs.evening_detective_server.IntroductionR\fintroduction\"\x18\n" + + "\x16UpdateScenarioIntroRsp\"n\n" + "\x16AddScenarioQuestionReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12D\n" + - "\bquestion\x18\x02 \x01(\v2(.crabs.evening_detective_server.QuestionR\bquestion\".\n" + - "\x16AddScenarioQuestionRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\x85\x01\n" + + "\bquestion\x18\x02 \x01(\v2(.crabs.evening_detective_server.QuestionR\bquestion\"\x18\n" + + "\x16AddScenarioQuestionRsp\"\x85\x01\n" + "\x19UpdateScenarioQuestionReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + "\x04code\x18\x02 \x01(\tR\x04code\x12D\n" + - "\bquestion\x18\x03 \x01(\v2(.crabs.evening_detective_server.QuestionR\bquestion\"1\n" + - "\x19UpdateScenarioQuestionRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"?\n" + + "\bquestion\x18\x03 \x01(\v2(.crabs.evening_detective_server.QuestionR\bquestion\"\x1b\n" + + "\x19UpdateScenarioQuestionRsp\"?\n" + "\x19DeleteScenarioQuestionReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + - "\x04code\x18\x02 \x01(\tR\x04code\"1\n" + - "\x19DeleteScenarioQuestionRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\",\n" + + "\x04code\x18\x02 \x01(\tR\x04code\"\x1b\n" + + "\x19DeleteScenarioQuestionRsp\",\n" + "\x1aDownloadScenarioArchiveReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\"@\n" + - "\x18UploadScenarioArchiveRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12\x0e\n" + - "\x02ID\x18\x02 \x01(\x05R\x02ID\"\xcd\x01\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"*\n" + + "\x18UploadScenarioArchiveRsp\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"\xcd\x01\n" + "\n" + "AddGameReq\x12\x12\n" + "\x04name\x18\x01 \x01(\tR\x04name\x12 \n" + @@ -10207,15 +9582,13 @@ const file_main_proto_rawDesc = "" + "scenarioID\x18\x04 \x01(\x05R\n" + "scenarioID\x12\x16\n" + "\x06format\x18\x05 \x01(\tR\x06format\x12\x1a\n" + - "\blocation\x18\x06 \x01(\tR\blocation\"2\n" + + "\blocation\x18\x06 \x01(\tR\blocation\"\x1c\n" + "\n" + - "AddGameRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12\x0e\n" + - "\x02ID\x18\x02 \x01(\x05R\x02ID\"\r\n" + - "\vGetGamesReq\"_\n" + - "\vGetGamesRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12:\n" + - "\x05games\x18\x02 \x03(\v2$.crabs.evening_detective_server.GameR\x05games\"\xe9\x03\n" + + "AddGameRsp\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"\r\n" + + "\vGetGamesReq\"I\n" + + "\vGetGamesRsp\x12:\n" + + "\x05games\x18\x01 \x03(\v2$.crabs.evening_detective_server.GameR\x05games\"\xe9\x03\n" + "\x04Game\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12 \n" + @@ -10259,38 +9632,32 @@ const file_main_proto_rawDesc = "" + "\vtimer_state\x18\x13 \x01(\x0e20.crabs.evening_detective_server.ScreenTimerStateR\n" + "timerStateB\t\n" + "\a_gameID\"\x18\n" + - "\x16CreateScreenSessionReq\"m\n" + - "\x16CreateScreenSessionRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12\x1a\n" + - "\bscreenID\x18\x02 \x01(\tR\bscreenID\x12!\n" + - "\faccess_token\x18\x03 \x01(\tR\vaccessToken\"Q\n" + + "\x16CreateScreenSessionReq\"W\n" + + "\x16CreateScreenSessionRsp\x12\x1a\n" + + "\bscreenID\x18\x01 \x01(\tR\bscreenID\x12!\n" + + "\faccess_token\x18\x02 \x01(\tR\vaccessToken\"Q\n" + "\x11GetScreenStateReq\x12\x1a\n" + "\bscreenID\x18\x01 \x01(\tR\bscreenID\x12 \n" + - "\vaccessToken\x18\x02 \x01(\tR\vaccessToken\"l\n" + - "\x11GetScreenStateRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12A\n" + - "\x05state\x18\x02 \x01(\v2+.crabs.evening_detective_server.ScreenStateR\x05state\"+\n" + + "\vaccessToken\x18\x02 \x01(\tR\vaccessToken\"V\n" + + "\x11GetScreenStateRsp\x12A\n" + + "\x05state\x18\x01 \x01(\v2+.crabs.evening_detective_server.ScreenStateR\x05state\"+\n" + "\x11GetGameScreensReq\x12\x16\n" + - "\x06gameID\x18\x01 \x01(\x05R\x06gameID\"p\n" + - "\x11GetGameScreensRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12E\n" + - "\ascreens\x18\x02 \x03(\v2+.crabs.evening_detective_server.ScreenStateR\ascreens\"e\n" + + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\"Z\n" + + "\x11GetGameScreensRsp\x12E\n" + + "\ascreens\x18\x01 \x03(\v2+.crabs.evening_detective_server.ScreenStateR\ascreens\"e\n" + "\rBindScreenReq\x12\x1a\n" + "\bscreenID\x18\x01 \x01(\tR\bscreenID\x12 \n" + "\vaccessToken\x18\x02 \x01(\tR\vaccessToken\x12\x16\n" + - "\x06gameID\x18\x03 \x01(\x05R\x06gameID\"h\n" + - "\rBindScreenRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12A\n" + - "\x05state\x18\x02 \x01(\v2+.crabs.evening_detective_server.ScreenStateR\x05state\"-\n" + + "\x06gameID\x18\x03 \x01(\x05R\x06gameID\"R\n" + + "\rBindScreenRsp\x12A\n" + + "\x05state\x18\x01 \x01(\v2+.crabs.evening_detective_server.ScreenStateR\x05state\"-\n" + "\x0fUnbindScreenReq\x12\x1a\n" + - "\bscreenID\x18\x01 \x01(\tR\bscreenID\"'\n" + - "\x0fUnbindScreenRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"S\n" + + "\bscreenID\x18\x01 \x01(\tR\bscreenID\"\x11\n" + + "\x0fUnbindScreenRsp\"S\n" + "\x11SetScreenSoundReq\x12\x1a\n" + "\bscreenID\x18\x01 \x01(\tR\bscreenID\x12\"\n" + - "\fsoundEnabled\x18\x02 \x01(\bR\fsoundEnabled\")\n" + - "\x11SetScreenSoundRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\xbc\x01\n" + + "\fsoundEnabled\x18\x02 \x01(\bR\fsoundEnabled\"\x13\n" + + "\x11SetScreenSoundRsp\"\xbc\x01\n" + "\aMapItem\x12\x12\n" + "\x04kind\x18\x01 \x01(\tR\x04kind\x12\x16\n" + "\x06itemID\x18\x02 \x01(\x05R\x06itemID\x12\x14\n" + @@ -10301,58 +9668,51 @@ const file_main_proto_rawDesc = "" + "\x06status\x18\a \x01(\tR\x06status\x12#\n" + "\rsound_enabled\x18\b \x01(\bR\fsoundEnabled\"'\n" + "\rGetGameMapReq\x12\x16\n" + - "\x06gameID\x18\x01 \x01(\x05R\x06gameID\"d\n" + - "\rGetGameMapRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12=\n" + - "\x05items\x18\x02 \x03(\v2'.crabs.evening_detective_server.MapItemR\x05items\"\x8e\x01\n" + + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\"N\n" + + "\rGetGameMapRsp\x12=\n" + + "\x05items\x18\x01 \x03(\v2'.crabs.evening_detective_server.MapItemR\x05items\"\x8e\x01\n" + "\x14UpdateGameMapItemReq\x12\x16\n" + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\x12\x12\n" + "\x04kind\x18\x02 \x01(\tR\x04kind\x12\x16\n" + "\x06itemID\x18\x03 \x01(\x05R\x06itemID\x12\f\n" + "\x01x\x18\x04 \x01(\x05R\x01x\x12\f\n" + "\x01y\x18\x05 \x01(\x05R\x01y\x12\x16\n" + - "\x06hidden\x18\x06 \x01(\bR\x06hidden\",\n" + - "\x14UpdateGameMapItemRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"j\n" + + "\x06hidden\x18\x06 \x01(\bR\x06hidden\"\x16\n" + + "\x14UpdateGameMapItemRsp\"j\n" + "\x10SetScreenModeReq\x12\x16\n" + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\x12>\n" + - "\x04mode\x18\x02 \x01(\x0e2*.crabs.evening_detective_server.ScreenModeR\x04mode\"(\n" + - "\x10SetScreenModeRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"l\n" + + "\x04mode\x18\x02 \x01(\x0e2*.crabs.evening_detective_server.ScreenModeR\x04mode\"\x12\n" + + "\x10SetScreenModeRsp\"l\n" + "\x11SetScreenTimerReq\x12\x16\n" + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\x12)\n" + "\x10duration_seconds\x18\x02 \x01(\x03R\x0fdurationSeconds\x12\x14\n" + - "\x05label\x18\x03 \x01(\tR\x05label\")\n" + - "\x11SetScreenTimerRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\xb0\x01\n" + + "\x05label\x18\x03 \x01(\tR\x05label\"\x13\n" + + "\x11SetScreenTimerRsp\"\xb0\x01\n" + "\x14SendScreenCommandReq\x12\x16\n" + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\x12G\n" + "\acommand\x18\x02 \x01(\x0e2-.crabs.evening_detective_server.ScreenCommandR\acommand\x12\x1f\n" + "\vposition_ms\x18\x03 \x01(\x03R\n" + "positionMs\x12\x16\n" + - "\x06volume\x18\x04 \x01(\x05R\x06volume\",\n" + - "\x14SendScreenCommandRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"S\n" + + "\x06volume\x18\x04 \x01(\x05R\x06volume\"\x16\n" + + "\x14SendScreenCommandRsp\"S\n" + "\x13GetScreenResultsReq\x12\x1a\n" + "\bscreenID\x18\x01 \x01(\tR\bscreenID\x12 \n" + - "\vaccessToken\x18\x02 \x01(\tR\vaccessToken\"\xbc\x01\n" + - "\x13GetScreenResultsRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12M\n" + - "\tquestions\x18\x02 \x03(\v2/.crabs.evening_detective_server.ResultsQuestionR\tquestions\x12@\n" + - "\x05teams\x18\x03 \x03(\v2*.crabs.evening_detective_server.TeamResultR\x05teams\"+\n" + + "\vaccessToken\x18\x02 \x01(\tR\vaccessToken\"\xa6\x01\n" + + "\x13GetScreenResultsRsp\x12M\n" + + "\tquestions\x18\x01 \x03(\v2/.crabs.evening_detective_server.ResultsQuestionR\tquestions\x12@\n" + + "\x05teams\x18\x02 \x03(\v2*.crabs.evening_detective_server.TeamResultR\x05teams\"+\n" + "\x13GetParticipationReq\x12\x14\n" + "\x05token\x18\x01 \x01(\tR\x05token\"F\n" + "\x16AnswerParticipationReq\x12\x14\n" + "\x05token\x18\x01 \x01(\tR\x05token\x12\x16\n" + - "\x06answer\x18\x02 \x01(\tR\x06answer\"\xf8\x01\n" + - "\x10ParticipationRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12\x1b\n" + - "\tteam_name\x18\x02 \x01(\tR\bteamName\x12\x1b\n" + - "\tgame_name\x18\x03 \x01(\tR\bgameName\x125\n" + - "\bstart_at\x18\x04 \x01(\v2\x1a.google.protobuf.TimestampR\astartAt\x12-\n" + - "\x12participants_count\x18\x05 \x01(\x05R\x11participantsCount\x12\x16\n" + - "\x06status\x18\x06 \x01(\tR\x06status\x12\x16\n" + - "\x06closed\x18\a \x01(\bR\x06closed\"\x84\x04\n" + + "\x06answer\x18\x02 \x01(\tR\x06answer\"\xe2\x01\n" + + "\x10ParticipationRsp\x12\x1b\n" + + "\tteam_name\x18\x01 \x01(\tR\bteamName\x12\x1b\n" + + "\tgame_name\x18\x02 \x01(\tR\bgameName\x125\n" + + "\bstart_at\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\astartAt\x12-\n" + + "\x12participants_count\x18\x04 \x01(\x05R\x11participantsCount\x12\x16\n" + + "\x06status\x18\x05 \x01(\tR\x06status\x12\x16\n" + + "\x06closed\x18\x06 \x01(\bR\x06closed\"\x84\x04\n" + "\x04Team\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12\x16\n" + @@ -10369,17 +9729,15 @@ const file_main_proto_rawDesc = "" + "\x18participation_email_sent\x18\f \x01(\bR\x16participationEmailSent\"\x1c\n" + "\n" + "GetGameReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\"\\\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"F\n" + "\n" + - "GetGameRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x128\n" + - "\x04game\x18\x02 \x01(\v2$.crabs.evening_detective_server.GameR\x04game\"+\n" + + "GetGameRsp\x128\n" + + "\x04game\x18\x01 \x01(\v2$.crabs.evening_detective_server.GameR\x04game\"+\n" + "\x11GetGameAnswersReq\x12\x16\n" + - "\x06gameID\x18\x01 \x01(\x05R\x06gameID\"\xb4\x01\n" + - "\x11GetGameAnswersRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12F\n" + - "\tquestions\x18\x02 \x03(\v2(.crabs.evening_detective_server.QuestionR\tquestions\x12A\n" + - "\x05teams\x18\x03 \x03(\v2+.crabs.evening_detective_server.TeamAnswersR\x05teams\"+\n" + + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\"\x9e\x01\n" + + "\x11GetGameAnswersRsp\x12F\n" + + "\tquestions\x18\x01 \x03(\v2(.crabs.evening_detective_server.QuestionR\tquestions\x12A\n" + + "\x05teams\x18\x02 \x03(\v2+.crabs.evening_detective_server.TeamAnswersR\x05teams\"+\n" + "\x11GetGameResultsReq\x12\x16\n" + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\"9\n" + "\x0fResultsQuestion\x12\x12\n" + @@ -10392,11 +9750,10 @@ const file_main_proto_rawDesc = "" + "\vtotal_score\x18\x03 \x01(\x05R\n" + "totalScore\x12\x14\n" + "\x05place\x18\x04 \x01(\x05R\x05place\x12#\n" + - "\ractions_count\x18\x05 \x01(\x05R\factionsCount\"\xba\x01\n" + - "\x11GetGameResultsRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12M\n" + - "\tquestions\x18\x02 \x03(\v2/.crabs.evening_detective_server.ResultsQuestionR\tquestions\x12@\n" + - "\x05teams\x18\x03 \x03(\v2*.crabs.evening_detective_server.TeamResultR\x05teams\"\x85\x02\n" + + "\ractions_count\x18\x05 \x01(\x05R\factionsCount\"\xa4\x01\n" + + "\x11GetGameResultsRsp\x12M\n" + + "\tquestions\x18\x01 \x03(\v2/.crabs.evening_detective_server.ResultsQuestionR\tquestions\x12@\n" + + "\x05teams\x18\x02 \x03(\v2*.crabs.evening_detective_server.TeamResultR\x05teams\"\x85\x02\n" + "\n" + "GameReview\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x16\n" + @@ -10414,28 +9771,25 @@ const file_main_proto_rawDesc = "" + "\x06teamID\x18\x02 \x01(\x05R\x06teamID\x12\x1a\n" + "\bpassword\x18\x03 \x01(\tR\bpassword\x12\x16\n" + "\x06rating\x18\x04 \x01(\x05R\x06rating\x12\x12\n" + - "\x04text\x18\x05 \x01(\tR\x04text\"o\n" + - "\x13CreateGameReviewRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12B\n" + - "\x06review\x18\x02 \x01(\v2*.crabs.evening_detective_server.GameReviewR\x06review\"+\n" + + "\x04text\x18\x05 \x01(\tR\x04text\"Y\n" + + "\x13CreateGameReviewRsp\x12B\n" + + "\x06review\x18\x01 \x01(\v2*.crabs.evening_detective_server.GameReviewR\x06review\"+\n" + "\x11GetGameReviewsReq\x12\x16\n" + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\"7\n" + "\x15GetScenarioReviewsReq\x12\x1e\n" + "\n" + "scenarioID\x18\x01 \x01(\x05R\n" + "scenarioID\"\x1c\n" + - "\x1aGetReviewsForModerationReq\"\xbb\x01\n" + - "\x11GetGameReviewsRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12%\n" + - "\x0eaverage_rating\x18\x02 \x01(\x01R\raverageRating\x12#\n" + - "\rreviews_count\x18\x03 \x01(\x05R\freviewsCount\x12D\n" + - "\areviews\x18\x04 \x03(\v2*.crabs.evening_detective_server.GameReviewR\areviews\"?\n" + + "\x1aGetReviewsForModerationReq\"\xa5\x01\n" + + "\x11GetGameReviewsRsp\x12%\n" + + "\x0eaverage_rating\x18\x01 \x01(\x01R\raverageRating\x12#\n" + + "\rreviews_count\x18\x02 \x01(\x05R\freviewsCount\x12D\n" + + "\areviews\x18\x03 \x03(\v2*.crabs.evening_detective_server.GameReviewR\areviews\"?\n" + "\x15ModerateGameReviewReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x16\n" + - "\x06status\x18\x02 \x01(\tR\x06status\"q\n" + - "\x15ModerateGameReviewRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12B\n" + - "\x06review\x18\x02 \x01(\v2*.crabs.evening_detective_server.GameReviewR\x06review\"\xe0\x01\n" + + "\x06status\x18\x02 \x01(\tR\x06status\"[\n" + + "\x15ModerateGameReviewRsp\x12B\n" + + "\x06review\x18\x01 \x01(\v2*.crabs.evening_detective_server.GameReviewR\x06review\"\xe0\x01\n" + "\rUpdateGameReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12 \n" + @@ -10445,65 +9799,53 @@ const file_main_proto_rawDesc = "" + "scenarioID\x18\x05 \x01(\x05R\n" + "scenarioID\x12\x16\n" + "\x06format\x18\x06 \x01(\tR\x06format\x12\x1a\n" + - "\blocation\x18\a \x01(\tR\blocation\"%\n" + - "\rUpdateGameRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\x1e\n" + + "\blocation\x18\a \x01(\tR\blocation\"\x0f\n" + + "\rUpdateGameRsp\"\x1e\n" + "\fStartGameReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\"$\n" + - "\fStartGameRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\x1e\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"\x0e\n" + + "\fStartGameRsp\"\x1e\n" + "\fPauseGameReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\"$\n" + - "\fPauseGameRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\x1d\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"\x0e\n" + + "\fPauseGameRsp\"\x1d\n" + "\vPlayGameReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\"#\n" + - "\vPlayGameRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\x1f\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"\r\n" + + "\vPlayGameRsp\"\x1f\n" + "\rFinishGameReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\"%\n" + - "\rFinishGameRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\x1e\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"\x0f\n" + + "\rFinishGameRsp\"\x1e\n" + "\fResetGameReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\"$\n" + - "\fResetGameRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\x1f\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"\x0e\n" + + "\fResetGameRsp\"\x1f\n" + "\rDeleteGameReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x05R\x02ID\"%\n" + - "\rDeleteGameRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"]\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\"\x0f\n" + + "\rDeleteGameRsp\"]\n" + "\n" + "AddTeamReq\x12\x16\n" + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12#\n" + - "\rcaptain_email\x18\x03 \x01(\tR\fcaptainEmail\"N\n" + + "\rcaptain_email\x18\x03 \x01(\tR\fcaptainEmail\"8\n" + "\n" + - "AddTeamRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12\x0e\n" + - "\x02ID\x18\x02 \x01(\x05R\x02ID\x12\x1a\n" + - "\bpassword\x18\x03 \x01(\tR\bpassword\"3\n" + + "AddTeamRsp\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x1a\n" + + "\bpassword\x18\x02 \x01(\tR\bpassword\"3\n" + "\rUpdateTeamReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x12\n" + - "\x04name\x18\x02 \x01(\tR\x04name\"%\n" + - "\rUpdateTeamRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"\x1f\n" + + "\x04name\x18\x02 \x01(\tR\x04name\"\x0f\n" + + "\rUpdateTeamRsp\"\x1f\n" + "\rDeleteTeamReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x03R\x02ID\"%\n" + - "\rDeleteTeamRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"=\n" + + "\x02ID\x18\x01 \x01(\x03R\x02ID\"\x0f\n" + + "\rDeleteTeamRsp\"=\n" + "\x17GiveTeamApplicationsReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x03R\x02ID\x12\x12\n" + - "\x04name\x18\x02 \x01(\tR\x04name\"/\n" + - "\x17GiveTeamApplicationsRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"=\n" + + "\x04name\x18\x02 \x01(\tR\x04name\"\x19\n" + + "\x17GiveTeamApplicationsRsp\"=\n" + "\x0fGetTeamStoryReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x03R\x02ID\x12\x1a\n" + - "\bpassword\x18\x02 \x01(\tR\bpassword\"\xe4\x01\n" + - "\x0fGetTeamStoryRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12;\n" + - "\x05story\x18\x02 \x01(\v2%.crabs.evening_detective_server.StoryR\x05story\x128\n" + - "\x04game\x18\x03 \x01(\v2$.crabs.evening_detective_server.GameR\x04game\x12D\n" + - "\aactions\x18\x04 \x03(\v2*.crabs.evening_detective_server.TeamActionR\aactions\"2\n" + + "\bpassword\x18\x02 \x01(\tR\bpassword\"\xce\x01\n" + + "\x0fGetTeamStoryRsp\x12;\n" + + "\x05story\x18\x01 \x01(\v2%.crabs.evening_detective_server.StoryR\x05story\x128\n" + + "\x04game\x18\x02 \x01(\v2$.crabs.evening_detective_server.GameR\x04game\x12D\n" + + "\aactions\x18\x03 \x03(\v2*.crabs.evening_detective_server.TeamActionR\aactions\"2\n" + "\n" + "TeamAction\x12\x12\n" + "\x04code\x18\x01 \x01(\tR\x04code\x12\x10\n" + @@ -10511,58 +9853,49 @@ const file_main_proto_rawDesc = "" + "\x10AddTeamActionReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x03R\x02ID\x12\x1a\n" + "\bpassword\x18\x02 \x01(\tR\bpassword\x12\x12\n" + - "\x04code\x18\x03 \x01(\tR\x04code\"(\n" + - "\x10AddTeamActionRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\")\n" + + "\x04code\x18\x03 \x01(\tR\x04code\"\x12\n" + + "\x10AddTeamActionRsp\")\n" + "\x17DeleteLastTeamActionReq\x12\x0e\n" + - "\x02ID\x18\x01 \x01(\x03R\x02ID\"/\n" + - "\x17DeleteLastTeamActionRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"?\n" + + "\x02ID\x18\x01 \x01(\x03R\x02ID\"\x19\n" + + "\x17DeleteLastTeamActionRsp\"?\n" + "\x11GetTeamAnswersReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x03R\x02ID\x12\x1a\n" + - "\bpassword\x18\x02 \x01(\tR\bpassword\"k\n" + - "\x11GetTeamAnswersRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12@\n" + - "\aanswers\x18\x02 \x03(\v2&.crabs.evening_detective_server.AnswerR\aanswers\"\x84\x01\n" + + "\bpassword\x18\x02 \x01(\tR\bpassword\"U\n" + + "\x11GetTeamAnswersRsp\x12@\n" + + "\aanswers\x18\x01 \x03(\v2&.crabs.evening_detective_server.AnswerR\aanswers\"\x84\x01\n" + "\x14SubmitTeamAnswersReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x03R\x02ID\x12\x1a\n" + "\bpassword\x18\x02 \x01(\tR\bpassword\x12@\n" + - "\aanswers\x18\x03 \x03(\v2&.crabs.evening_detective_server.AnswerR\aanswers\",\n" + - "\x14SubmitTeamAnswersRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"p\n" + + "\aanswers\x18\x03 \x03(\v2&.crabs.evening_detective_server.AnswerR\aanswers\"\x16\n" + + "\x14SubmitTeamAnswersRsp\"p\n" + "\x15SetTeamAnswerScoreReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x03R\x02ID\x12\"\n" + "\fquestionCode\x18\x02 \x01(\tR\fquestionCode\x12\x19\n" + "\x05score\x18\x03 \x01(\x05H\x00R\x05score\x88\x01\x01B\b\n" + - "\x06_score\"-\n" + - "\x15SetTeamAnswerScoreRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"M\n" + + "\x06_score\"\x17\n" + + "\x15SetTeamAnswerScoreRsp\"M\n" + "\x1bUpdateScenarioBackgroundReq\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x1e\n" + "\n" + "background\x18\x02 \x01(\tR\n" + - "background\"3\n" + - "\x1bUpdateScenarioBackgroundRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\"C\n" + + "background\"\x1d\n" + + "\x1bUpdateScenarioBackgroundRsp\"C\n" + "\x13IssueGameTicketsReq\x12\x16\n" + "\x06gameID\x18\x01 \x01(\x05R\x06gameID\x12\x14\n" + - "\x05count\x18\x02 \x01(\x05R\x05count\"m\n" + - "\x13IssueGameTicketsRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12@\n" + - "\atickets\x18\x02 \x03(\v2&.crabs.evening_detective_server.TicketR\atickets\"*\n" + + "\x05count\x18\x02 \x01(\x05R\x05count\"W\n" + + "\x13IssueGameTicketsRsp\x12@\n" + + "\atickets\x18\x01 \x03(\v2&.crabs.evening_detective_server.TicketR\atickets\"*\n" + "\x06Ticket\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x10\n" + "\x03URL\x18\x02 \x01(\tR\x03URL\"$\n" + "\fGetTicketReq\x12\x14\n" + - "\x05token\x18\x01 \x01(\tR\x05token\"h\n" + - "\fGetTicketRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12B\n" + - "\x06ticket\x18\x02 \x01(\v2*.crabs.evening_detective_server.TicketPageR\x06ticket\"'\n" + + "\x05token\x18\x01 \x01(\tR\x05token\"R\n" + + "\fGetTicketRsp\x12B\n" + + "\x06ticket\x18\x01 \x01(\v2*.crabs.evening_detective_server.TicketPageR\x06ticket\"'\n" + "\x0fAcceptTicketReq\x12\x14\n" + - "\x05token\x18\x01 \x01(\tR\x05token\"k\n" + - "\x0fAcceptTicketRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error\x12B\n" + - "\x06ticket\x18\x02 \x01(\v2*.crabs.evening_detective_server.TicketPageR\x06ticket\"\xa4\x02\n" + + "\x05token\x18\x01 \x01(\tR\x05token\"U\n" + + "\x0fAcceptTicketRsp\x12B\n" + + "\x06ticket\x18\x01 \x01(\v2*.crabs.evening_detective_server.TicketPageR\x06ticket\"\xa4\x02\n" + "\n" + "TicketPage\x12\x0e\n" + "\x02ID\x18\x01 \x01(\x05R\x02ID\x12\x1b\n" + @@ -10605,12 +9938,12 @@ const file_main_proto_rawDesc = "" + "\x1aSCREEN_COMMAND_TIMER_PAUSE\x10\t\x12\x1f\n" + "\x1bSCREEN_COMMAND_TIMER_RESUME\x10\n" + "\x12\x1e\n" + - "\x1aSCREEN_COMMAND_TIMER_RESET\x10\v2\x89\xa6\x01\n" + - "\x16EveningDetectiveServer\x12\xcc\x05\n" + - "\x10GetParticipation\x123.crabs.evening_detective_server.GetParticipationReq\x1a0.crabs.evening_detective_server.ParticipationRsp\"\xd0\x04\x92A\xab\x04\n" + - ")Подтверждение участия\x122Получить состояние участия\x1a\xc7\x03Возвращает команду, игру и текущее решение по персональному токену из письма. Авторизация JWT не требуется. Чтение не меняет статус участия. Токен передаётся в теле запроса. Недействительная ссылка и ошибки обработки возвращаются в поле error при HTTP 200.b\x00\x82\xd3\xe4\x93\x02\x1b:\x01*\"\x16/api/participation/get\x12\xf2\b\n" + - "\x13AnswerParticipation\x126.crabs.evening_detective_server.AnswerParticipationReq\x1a0.crabs.evening_detective_server.ParticipationRsp\"\xf0\a\x92A\xc8\a\n" + - ")Подтверждение участия\x12=Подтвердить или отменить участие\x1a\xd9\x06Принимает окончательный ответ капитана: confirmed или cancelled. Авторизация JWT не требуется; доступ определяется персональным токеном. Первый ответ сохраняется, повтор того же ответа успешен, противоположный ответ отклоняется. Новый ответ принимается только до планового начала игры и пока игра имеет статус draft. Ошибки ссылки, значения answer, закрытого приёма или изменения решения возвращаются в поле error при HTTP 200; при уже принятом решении возвращается его текущее состояние.b\x00\x82\xd3\xe4\x93\x02\x1e:\x01*\"\x19/api/participation/answer\x12\xa6\x01\n" + + "\x1aSCREEN_COMMAND_TIMER_RESET\x10\v2\x97\xa6\x01\n" + + "\x16EveningDetectiveServer\x12\xd3\x05\n" + + "\x10GetParticipation\x123.crabs.evening_detective_server.GetParticipationReq\x1a0.crabs.evening_detective_server.ParticipationRsp\"\xd7\x04\x92A\xb2\x04\n" + + ")Подтверждение участия\x122Получить состояние участия\x1a\xce\x03Возвращает команду, игру и текущее решение по персональному токену из письма. Авторизация JWT не требуется. Чтение не меняет статус участия. Токен передаётся в теле запроса. Недействительная ссылка и ошибки обработки возвращаются стандартным gRPC status error.b\x00\x82\xd3\xe4\x93\x02\x1b:\x01*\"\x16/api/participation/get\x12\xf9\b\n" + + "\x13AnswerParticipation\x126.crabs.evening_detective_server.AnswerParticipationReq\x1a0.crabs.evening_detective_server.ParticipationRsp\"\xf7\a\x92A\xcf\a\n" + + ")Подтверждение участия\x12=Подтвердить или отменить участие\x1a\xe0\x06Принимает окончательный ответ капитана: confirmed или cancelled. Авторизация JWT не требуется; доступ определяется персональным токеном. Первый ответ сохраняется, повтор того же ответа успешен, противоположный ответ отклоняется. Новый ответ принимается только до планового начала игры и пока игра имеет статус draft. Ошибки ссылки, значения answer, закрытого приёма или изменения решения возвращаются стандартным gRPC status error; при уже принятом решении возвращается его текущее состояние.b\x00\x82\xd3\xe4\x93\x02\x1e:\x01*\"\x19/api/participation/answer\x12\xa6\x01\n" + "\x04Ping\x12'.crabs.evening_detective_server.PingReq\x1a'.crabs.evening_detective_server.PingRsp\"L\x92A3\x12)Проверить доступностьb\x06\n" + "\x04\n" + "\x00\x12\x00\x82\xd3\xe4\x93\x02\x10\x12\x0e/api/test/ping\x12\xaf\x01\n" +