diff --git a/proto/main.proto b/proto/main.proto index 5994237..86e9a93 100644 --- a/proto/main.proto +++ b/proto/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/src/api/binary_client.ts b/src/api/binary_client.ts index 936070c..eea09c8 100644 --- a/src/api/binary_client.ts +++ b/src/api/binary_client.ts @@ -9,7 +9,6 @@ export type DownloadFileResult = { export type UploadArchiveResult = { ID: number | null - error: string | null } // Клиент бинарных файлов: ZIP сценариев и PDF команд. Сгенерированный @@ -78,11 +77,10 @@ function buildBinaryClient(refreshTokens: () => Promise, getToken: () = const data = await response.json().catch(() => null) if (!response.ok) { - return { ID: null, error: data?.message || `Ошибка сервера (${response.status})` } + throw new Error(data?.message || `Ошибка сервера (${response.status})`) } - const error = typeof data?.error === 'string' && data.error !== '' ? data.error : null - return { ID: typeof data?.ID === 'number' ? data.ID : null, error } + return { ID: typeof data?.ID === 'number' ? data.ID : null } } return { downloadScenarioArchive, downloadTeamQR, uploadScenarioArchive } diff --git a/src/api/generated/crabs/evening_detective_server/client.ts b/src/api/generated/crabs/evening_detective_server/client.ts index f499b11..14b1a7a 100644 --- a/src/api/generated/crabs/evening_detective_server/client.ts +++ b/src/api/generated/crabs/evening_detective_server/client.ts @@ -50,6 +50,12 @@ export function createHttpHandler( // Парсим ответ const data = await response.json() + if (data && typeof data === 'object' && 'code' in data && data.code !== 0) { + throw new Error( + 'message' in data && typeof data.message === 'string' ? data.message : 'Ошибка запроса', + ) + } + // Возвращаем в формате, который ожидает генератор return data } diff --git a/src/api/generated/crabs/evening_detective_server/index.ts b/src/api/generated/crabs/evening_detective_server/index.ts index 373d9c6..ce33e93 100644 --- a/src/api/generated/crabs/evening_detective_server/index.ts +++ b/src/api/generated/crabs/evening_detective_server/index.ts @@ -52,7 +52,6 @@ export type SignupReq = { }; export type SignupRsp = { - error: string | undefined; }; export type RefreshPasswordReq = { @@ -60,7 +59,6 @@ export type RefreshPasswordReq = { }; export type RefreshPasswordRsp = { - error: string | undefined; }; export type LoginReq = { @@ -69,7 +67,6 @@ export type LoginReq = { }; export type LoginRsp = { - error: string | undefined; accessToken: string | undefined; refreshToken: string | undefined; }; @@ -79,7 +76,6 @@ export type RefreshReq = { }; export type RefreshRsp = { - error: string | undefined; accessToken: string | undefined; refreshToken: string | undefined; }; @@ -92,7 +88,6 @@ export type DeleteAccountReq = { }; export type DeleteAccountRsp = { - error: string | undefined; }; // Документы раздаются по постоянным URL, на которые ссылается сервис при @@ -101,7 +96,6 @@ export type GetTermsReq = { }; export type GetTermsRsp = { - error: string | undefined; text: string | undefined; }; @@ -109,7 +103,6 @@ export type GetPrivacyReq = { }; export type GetPrivacyRsp = { - error: string | undefined; text: string | undefined; }; @@ -117,7 +110,6 @@ export type GetConsentReq = { }; export type GetConsentRsp = { - error: string | undefined; text: string | undefined; }; @@ -125,7 +117,6 @@ export type GetUsersReq = { }; export type GetUsersRsp = { - error: string | undefined; users: User[] | undefined; }; @@ -148,7 +139,6 @@ export type GetUserByIDReq = { }; export type GetUserByIDRsp = { - error: string | undefined; user: User | undefined; }; @@ -156,7 +146,6 @@ export type GetMeReq = { }; export type GetMeRsp = { - error: string | undefined; user: User | undefined; }; @@ -174,7 +163,6 @@ export type AddUserRoleReq = { }; export type AddUserRoleRsp = { - error: string | undefined; }; export type DeleteUserRoleReq = { @@ -183,14 +171,12 @@ export type DeleteUserRoleReq = { }; export type DeleteUserRoleRsp = { - error: string | undefined; }; export type GetPermissionsReq = { }; export type GetPermissionsRsp = { - error: string | undefined; permissions: string[] | undefined; }; @@ -200,7 +186,6 @@ export type UploadFileReq = { }; export type UploadFileRsp = { - error: string | undefined; filename: string | undefined; // Тип загруженного файла: image | pdf | audio | video (определяется сервером по // содержимому). Удобен редактору для предзаполнения file_type улики. @@ -216,7 +201,6 @@ export type AddScenarioReq = { }; export type AddScenarioRsp = { - error: string | undefined; ID: number | undefined; }; @@ -224,7 +208,6 @@ export type GetMyScenariosReq = { }; export type GetMyScenariosRsp = { - error: string | undefined; scenarios: Scenario[] | undefined; }; @@ -307,7 +290,6 @@ export type GetScenariosCatalogReq = { }; export type GetScenariosCatalogRsp = { - error: string | undefined; scenarios: Scenario[] | undefined; }; @@ -316,7 +298,6 @@ export type GetScenarioReq = { }; export type GetScenarioRsp = { - error: string | undefined; scenario: Scenario | undefined; }; @@ -369,7 +350,6 @@ export type UpdateScenarioReq = { }; export type UpdateScenarioRsp = { - error: string | undefined; }; export type PublicScenarioReq = { @@ -377,7 +357,6 @@ export type PublicScenarioReq = { }; export type PublicScenarioRsp = { - error: string | undefined; }; export type DraftScenarioReq = { @@ -385,7 +364,6 @@ export type DraftScenarioReq = { }; export type DraftScenarioRsp = { - error: string | undefined; }; export type DeleteScenarioReq = { @@ -393,7 +371,6 @@ export type DeleteScenarioReq = { }; export type DeleteScenarioRsp = { - error: string | undefined; }; export type AddScenarioPlaceReq = { @@ -402,7 +379,6 @@ export type AddScenarioPlaceReq = { }; export type AddScenarioPlaceRsp = { - error: string | undefined; }; export type UpdateScenarioPlaceReq = { @@ -412,7 +388,6 @@ export type UpdateScenarioPlaceReq = { }; export type UpdateScenarioPlaceRsp = { - error: string | undefined; }; export type DeleteScenarioPlaceReq = { @@ -421,7 +396,6 @@ export type DeleteScenarioPlaceReq = { }; export type DeleteScenarioPlaceRsp = { - error: string | undefined; }; export type UpdateScenarioConclusionReq = { @@ -430,7 +404,6 @@ export type UpdateScenarioConclusionReq = { }; export type UpdateScenarioConclusionRsp = { - error: string | undefined; }; export type UpdateScenarioIntroReq = { @@ -439,7 +412,6 @@ export type UpdateScenarioIntroReq = { }; export type UpdateScenarioIntroRsp = { - error: string | undefined; }; export type AddScenarioQuestionReq = { @@ -448,7 +420,6 @@ export type AddScenarioQuestionReq = { }; export type AddScenarioQuestionRsp = { - error: string | undefined; }; export type UpdateScenarioQuestionReq = { @@ -458,7 +429,6 @@ export type UpdateScenarioQuestionReq = { }; export type UpdateScenarioQuestionRsp = { - error: string | undefined; }; export type DeleteScenarioQuestionReq = { @@ -467,7 +437,6 @@ export type DeleteScenarioQuestionReq = { }; export type DeleteScenarioQuestionRsp = { - error: string | undefined; }; export type DownloadScenarioArchiveReq = { @@ -475,7 +444,6 @@ export type DownloadScenarioArchiveReq = { }; export type UploadScenarioArchiveRsp = { - error: string | undefined; ID: number | undefined; }; @@ -489,7 +457,6 @@ export type AddGameReq = { }; export type AddGameRsp = { - error: string | undefined; ID: number | undefined; }; @@ -497,7 +464,6 @@ export type GetGamesReq = { }; export type GetGamesRsp = { - error: string | undefined; games: Game[] | undefined; }; @@ -541,7 +507,6 @@ export type CreateScreenSessionReq = { }; export type CreateScreenSessionRsp = { - error: string | undefined; screenID: string | undefined; accessToken: string | undefined; }; @@ -552,7 +517,6 @@ export type GetScreenStateReq = { }; export type GetScreenStateRsp = { - error: string | undefined; state: ScreenState | undefined; }; @@ -561,7 +525,6 @@ export type GetGameScreensReq = { }; export type GetGameScreensRsp = { - error: string | undefined; screens: ScreenState[] | undefined; }; @@ -572,7 +535,6 @@ export type BindScreenReq = { }; export type BindScreenRsp = { - error: string | undefined; state: ScreenState | undefined; }; @@ -581,7 +543,6 @@ export type UnbindScreenReq = { }; export type UnbindScreenRsp = { - error: string | undefined; }; export type SetScreenSoundReq = { @@ -590,7 +551,6 @@ export type SetScreenSoundReq = { }; export type SetScreenSoundRsp = { - error: string | undefined; }; export type MapItem = { @@ -609,7 +569,6 @@ export type GetGameMapReq = { }; export type GetGameMapRsp = { - error: string | undefined; items: MapItem[] | undefined; }; @@ -623,7 +582,6 @@ export type UpdateGameMapItemReq = { }; export type UpdateGameMapItemRsp = { - error: string | undefined; }; export type SetScreenModeReq = { @@ -632,7 +590,6 @@ export type SetScreenModeReq = { }; export type SetScreenModeRsp = { - error: string | undefined; }; export type SetScreenTimerReq = { @@ -642,7 +599,6 @@ export type SetScreenTimerReq = { }; export type SetScreenTimerRsp = { - error: string | undefined; }; export type SendScreenCommandReq = { @@ -653,7 +609,6 @@ export type SendScreenCommandReq = { }; export type SendScreenCommandRsp = { - error: string | undefined; }; export type GetScreenResultsReq = { @@ -662,7 +617,6 @@ export type GetScreenResultsReq = { }; export type GetScreenResultsRsp = { - error: string | undefined; questions: ResultsQuestion[] | undefined; teams: TeamResult[] | undefined; }; @@ -701,8 +655,6 @@ export type AnswerParticipationReq = { }; export type ParticipationRsp = { - // Пустая строка при успехе; иначе сообщение об ошибке для пользователя. - error: string | undefined; // Название команды. Данные доступны только по действительному токену. teamName: string | undefined; // Название игры. @@ -723,7 +675,6 @@ export type GetGameReq = { }; export type GetGameRsp = { - error: string | undefined; game: Game | undefined; }; @@ -732,7 +683,6 @@ export type GetGameAnswersReq = { }; export type GetGameAnswersRsp = { - error: string | undefined; questions: Question[] | undefined; teams: TeamAnswers[] | undefined; }; @@ -742,7 +692,6 @@ export type GetGameResultsReq = { }; export type GetGameResultsRsp = { - error: string | undefined; questions: ResultsQuestion[] | undefined; teams: TeamResult[] | undefined; }; @@ -768,7 +717,6 @@ export type CreateGameReviewReq = { }; export type CreateGameReviewRsp = { - error: string | undefined; review: GameReview | undefined; }; @@ -784,7 +732,6 @@ export type GetReviewsForModerationReq = { }; export type GetGameReviewsRsp = { - error: string | undefined; averageRating: number | undefined; reviewsCount: number | undefined; reviews: GameReview[] | undefined; @@ -796,7 +743,6 @@ export type ModerateGameReviewReq = { }; export type ModerateGameReviewRsp = { - error: string | undefined; review: GameReview | undefined; }; @@ -811,7 +757,6 @@ export type UpdateGameReq = { }; export type UpdateGameRsp = { - error: string | undefined; }; export type StartGameReq = { @@ -819,7 +764,6 @@ export type StartGameReq = { }; export type StartGameRsp = { - error: string | undefined; }; export type PauseGameReq = { @@ -827,7 +771,6 @@ export type PauseGameReq = { }; export type PauseGameRsp = { - error: string | undefined; }; export type PlayGameReq = { @@ -835,7 +778,6 @@ export type PlayGameReq = { }; export type PlayGameRsp = { - error: string | undefined; }; export type FinishGameReq = { @@ -843,7 +785,6 @@ export type FinishGameReq = { }; export type FinishGameRsp = { - error: string | undefined; }; export type ResetGameReq = { @@ -851,7 +792,6 @@ export type ResetGameReq = { }; export type ResetGameRsp = { - error: string | undefined; }; export type DeleteGameReq = { @@ -859,7 +799,6 @@ export type DeleteGameReq = { }; export type DeleteGameRsp = { - error: string | undefined; }; export type AddTeamReq = { @@ -869,7 +808,6 @@ export type AddTeamReq = { }; export type AddTeamRsp = { - error: string | undefined; ID: number | undefined; password: string | undefined; }; @@ -880,7 +818,6 @@ export type UpdateTeamReq = { }; export type UpdateTeamRsp = { - error: string | undefined; }; export type DeleteTeamReq = { @@ -888,7 +825,6 @@ export type DeleteTeamReq = { }; export type DeleteTeamRsp = { - error: string | undefined; }; export type GiveTeamApplicationsReq = { @@ -897,7 +833,6 @@ export type GiveTeamApplicationsReq = { }; export type GiveTeamApplicationsRsp = { - error: string | undefined; }; export type GetTeamStoryReq = { @@ -906,7 +841,6 @@ export type GetTeamStoryReq = { }; export type GetTeamStoryRsp = { - error: string | undefined; story: Story | undefined; game: Game | undefined; actions: TeamAction[] | undefined; @@ -924,7 +858,6 @@ export type AddTeamActionReq = { }; export type AddTeamActionRsp = { - error: string | undefined; }; export type DeleteLastTeamActionReq = { @@ -932,7 +865,6 @@ export type DeleteLastTeamActionReq = { }; export type DeleteLastTeamActionRsp = { - error: string | undefined; }; export type GetTeamAnswersReq = { @@ -941,7 +873,6 @@ export type GetTeamAnswersReq = { }; export type GetTeamAnswersRsp = { - error: string | undefined; answers: Answer[] | undefined; }; @@ -952,7 +883,6 @@ export type SubmitTeamAnswersReq = { }; export type SubmitTeamAnswersRsp = { - error: string | undefined; }; export type SetTeamAnswerScoreReq = { @@ -963,7 +893,6 @@ export type SetTeamAnswerScoreReq = { }; export type SetTeamAnswerScoreRsp = { - error: string | undefined; }; export type UpdateScenarioBackgroundReq = { @@ -972,7 +901,6 @@ export type UpdateScenarioBackgroundReq = { }; export type UpdateScenarioBackgroundRsp = { - error: string | undefined; }; export type IssueGameTicketsReq = { @@ -981,7 +909,6 @@ export type IssueGameTicketsReq = { }; export type IssueGameTicketsRsp = { - error: string | undefined; tickets: Ticket[] | undefined; }; @@ -995,7 +922,6 @@ export type GetTicketReq = { }; export type GetTicketRsp = { - error: string | undefined; ticket: TicketPage | undefined; }; @@ -1015,7 +941,6 @@ export type AcceptTicketReq = { }; export type AcceptTicketRsp = { - error: string | undefined; ticket: TicketPage | undefined; }; diff --git a/src/components/DocsPage.vue b/src/components/DocsPage.vue index 6306946..77fbfff 100644 --- a/src/components/DocsPage.vue +++ b/src/components/DocsPage.vue @@ -30,11 +30,7 @@ onMounted(async () => { try { const res = await fetchers[props.kind]() - if (res.error) { - error.value = res.error - } else { - text.value = res.text || '' - } + text.value = res.text || '' } catch (err) { error.value = err instanceof Error ? err.message : 'Не удалось загрузить документ' } finally { diff --git a/src/components/GamePage.vue b/src/components/GamePage.vue index 4c4db4c..bab7852 100644 --- a/src/components/GamePage.vue +++ b/src/components/GamePage.vue @@ -136,10 +136,6 @@ let panState: { startX: number; startY: number; offsetX: number; offsetY: number async function getGame(id: number) { const res = await client.GetGame({ ID: id }) - if (res.error != '') { - message.error(res.error!) - return - } game.value = res.game! game.value.teams = game.value.teams?.sort((a, b) => { let aLen = 0 @@ -172,9 +168,6 @@ getGame(Number(gameId)) async function getGameScreens() { const res = await client.GetGameScreens({ gameID: Number(gameId) }) - if (res.error != '') { - return - } screens.value = res.screens || [] if (!timerFormInitialized.value && screens.value[0]) { timerDurationMinutes.value = Math.max(1, (screens.value[0].timerDurationSeconds || 600) / 60) @@ -183,10 +176,8 @@ async function getGameScreens() { } if (previewScreen.value?.mode === 'SCREEN_MODE_RESULTS') { const result = await client.GetGameResults({ gameID: Number(gameId) }) - if (result.error == '') { - previewQuestions.value = result.questions || [] - previewTeams.value = result.teams || [] - } + previewQuestions.value = result.questions || [] + previewTeams.value = result.teams || [] } else { previewQuestions.value = [] previewTeams.value = [] @@ -197,14 +188,14 @@ getGameScreens() async function getGameMap() { if (dragState || mapSaving.value) return const res = await client.GetGameMap({ gameID: Number(gameId) }) - if (res.error == '') mapItems.value = res.items || [] + mapItems.value = res.items || [] } getGameMap() async function saveMapItem(item: MapItem, hidden = item.hidden) { mapSaving.value = true try { - const res = await client.UpdateGameMapItem({ + await client.UpdateGameMapItem({ gameID: Number(gameId), kind: item.kind, itemID: item.itemID, @@ -212,7 +203,6 @@ async function saveMapItem(item: MapItem, hidden = item.hidden) { y: Math.round(item.y || 0), hidden, }) - if (res.error != '') message.error(res.error || 'Не удалось сохранить координаты') } finally { mapSaving.value = false } @@ -295,26 +285,17 @@ function zoomMap(event: WheelEvent) { } async function setSoundScreen(screen: ScreenState) { - const res = await client.SetScreenSound({ screenID: screen.ID, soundEnabled: true }) - if (res.error != '') { - message.error(res.error!) - return - } + await client.SetScreenSound({ screenID: screen.ID, soundEnabled: true }) await getGameScreens() } async function unbindScreen(screen: ScreenState) { - const res = await client.UnbindScreen({ screenID: screen.ID }) - if (res.error != '') { - message.error(res.error!) - return - } + await client.UnbindScreen({ screenID: screen.ID }) await getGameScreens() } async function setScreenMode(mode: ScreenMode) { - const res = await client.SetScreenMode({ gameID: Number(gameId), mode }) - if (res.error != '') message.error(res.error || 'Не удалось изменить режим экранов') + await client.SetScreenMode({ gameID: Number(gameId), mode }) } async function configureScreenTimer() { @@ -324,15 +305,11 @@ async function configureScreenTimer() { message.error('Укажите длительность и надпись таймера') return } - const res = await client.SetScreenTimer({ + await client.SetScreenTimer({ gameID: Number(gameId), durationSeconds: Math.round(durationMinutes * 60), label, }) - if (res.error != '') { - message.error(res.error || 'Не удалось настроить таймер') - return - } await getGameScreens() } @@ -340,13 +317,12 @@ async function sendScreenCommand(command: ScreenCommand) { if (command === 'SCREEN_COMMAND_PLAY' || command === 'SCREEN_COMMAND_REPLAY') { if (!window.confirm('Запустить медиа на всех экранах?')) return } - const res = await client.SendScreenCommand({ + await client.SendScreenCommand({ gameID: Number(gameId), command, positionMs: Math.max(0, Math.round(screenPosition.value * 1000)), volume: Math.max(0, Math.min(100, Math.round(screenVolume.value))), }) - if (res.error != '') message.error(res.error || 'Не удалось выполнить команду экранов') } async function toTeamStory(id: number, password: string, newTab: boolean = false) { @@ -397,7 +373,7 @@ function closeSettings() { } async function updateGame() { - const res = await client.UpdateGame({ + await client.UpdateGame({ ID: game.value.ID, name: settingsDraft.value.name, description: settingsDraft.value.description, @@ -406,10 +382,6 @@ async function updateGame() { startAt: game.value.startAt, scenarioID: game.value.scenario?.ID, }) - if (res.error != '') { - message.error(res.error!) - return - } await getGame(game.value.ID!) showSettingsModal.value = false } @@ -460,29 +432,21 @@ function giveApplication(team: Team, application: Application) { } async function addTeam() { - const res = await client.AddTeam({ + await client.AddTeam({ gameID: game.value.ID, name: newTeamName.value, captainEmail: newTeamEmail.value.trim(), }) - if (res.error != '') { - message.error(res.error!) - return - } await getGame(game.value.ID!) showAddTeamModal.value = false newTeamEmail.value = '' } async function confirmGiveApplication() { - const res = await client.GiveTeamApplications({ + await client.GiveTeamApplications({ ID: giveApplicationTeam.value.ID, name: giveApplicationApplication.value.name, }) - if (res.error != '') { - message.error(res.error!) - return - } await getGame(game.value.ID!) showGiveApplicationModal.value = false } @@ -493,25 +457,17 @@ async function deleteTeam(team: Team) { } async function confirmDeleteTeam() { - const res = await client.DeleteTeam({ + await client.DeleteTeam({ ID: deletedTeam.value.ID, }) - if (res.error != '') { - message.error(res.error!) - return - } await getGame(game.value.ID!) showDeleteTeamModal.value = false } async function deleteGame() { - const res = await client.DeleteGame({ + await client.DeleteGame({ ID: game.value.ID, }) - if (res.error != '') { - message.error(res.error!) - return - } message.success('Игра удалена') router.push('/games') } @@ -540,10 +496,6 @@ async function issueTickets() { gameID: game.value.ID, count: ticketCount.value, }) - if (res.error != '') { - message.error(res.error!) - return - } issuedTickets.value = res.tickets || [] message.success(`Выпущено билетов: ${issuedTickets.value.length}`) } catch (err) { @@ -560,57 +512,37 @@ useSimplePolling(() => { }, 2000) async function resetGame() { - const res = await client.ResetGame({ + await client.ResetGame({ ID: game.value.ID, }) - if (res.error != '') { - message.error(res.error!) - return - } await getGame(game.value.ID!) } async function startGame() { - const res = await client.StartGame({ + await client.StartGame({ ID: game.value.ID, }) - if (res.error != '') { - message.error(res.error!) - return - } await getGame(game.value.ID!) } async function pauseGame() { - const res = await client.PauseGame({ + await client.PauseGame({ ID: game.value.ID, }) - if (res.error != '') { - message.error(res.error!) - return - } await getGame(game.value.ID!) } async function playGame() { - const res = await client.PlayGame({ + await client.PlayGame({ ID: game.value.ID, }) - if (res.error != '') { - message.error(res.error!) - return - } await getGame(game.value.ID!) } async function finishGame() { - const res = await client.FinishGame({ + await client.FinishGame({ ID: game.value.ID, }) - if (res.error != '') { - message.error(res.error!) - return - } await getGame(game.value.ID!) } @@ -640,10 +572,6 @@ function onScoreUpdate(key: string, value: number | null) { async function loadGameAnswers() { const res = await client.GetGameAnswers({ gameID: Number(gameId) }) - if (res.error != '') { - message.error(res.error!) - return - } answersQuestions.value = res.questions || [] answersTeams.value = res.teams || [] const next: Record = {} @@ -663,21 +591,13 @@ async function openAnswersModal() { async function openReviewsModal() { showReviewsModal.value = true const res = await client.GetGameReviewsForModeration({ gameID: Number(gameId) }) - if (res.error != '') { - message.error(res.error!) - return - } gameReviews.value = res.reviews || [] reviewsAverage.value = res.averageRating || 0 reviewsCount.value = res.reviewsCount || 0 } async function moderateReview(review: GameReview, status: string) { - const res = await client.ModerateGameReview({ ID: review.ID, status }) - if (res.error != '') { - message.error(res.error!) - return - } + await client.ModerateGameReview({ ID: review.ID, status }) await openReviewsModal() } @@ -686,15 +606,11 @@ async function saveAllScores() { for (const question of answersQuestions.value) { for (const team of answersTeams.value) { const score = scores.value[scoreKey(team.team?.ID, question.code)] - const res = await client.SetTeamAnswerScore({ + await client.SetTeamAnswerScore({ ID: team.team?.ID, questionCode: question.code, score: score === undefined || score === null ? undefined : score, }) - if (res.error != '') { - message.error(res.error!) - return - } } } message.success('Баллы сохранены') diff --git a/src/components/GameResultsPage.vue b/src/components/GameResultsPage.vue index 13fac46..a7e7e50 100644 --- a/src/components/GameResultsPage.vue +++ b/src/components/GameResultsPage.vue @@ -41,13 +41,6 @@ async function loadGameResults() { sessionIssue.value = false try { const res = await client.GetGameResults({ gameID: Number(gameId) }) - if (res.error != '') { - // res.error может отсутствовать, если сервер ответил не-Rsp-ошибкой (например, 403) - loadError.value = res.error || 'Не удалось загрузить результаты' - message.error(loadError.value) - loadFailed.value = true - return - } questions.value = res.questions || [] teams.value = res.teams || [] loaded.value = true diff --git a/src/components/GamesPage.vue b/src/components/GamesPage.vue index 042a401..95f87a3 100644 --- a/src/components/GamesPage.vue +++ b/src/components/GamesPage.vue @@ -25,13 +25,13 @@ const router = useRouter() const games = ref([]) async function getGames() { - games.value = [] - const res = await client.GetGames({}) - if (res.error != '') { - message.error(res.error!) - return + try { + games.value = [] + const res = await client.GetGames({}) + games.value = res.games || [] + } catch (err) { + message.error(err instanceof Error ? err.message : 'Не удалось загрузить игры') } - games.value = res.games || [] } getGames() @@ -68,11 +68,6 @@ async function getCatalogScenarios() { catalogError.value = false try { const res = await client.GetScenariosCatalog({}) - if (res.error != '') { - catalogError.value = true - message.error(res.error!) - return - } catalogScenarios.value = res.scenarios || [] } catch (err) { catalogError.value = true @@ -111,10 +106,6 @@ async function createGame() { startAt: new Date(startAtMs).toISOString(), scenarioID: scenarioId, }) - if (res.error != '') { - message.error(res.error!) - return - } message.success('Игра создана') showCreateGameModal.value = false router.push('/games/' + res.ID!) diff --git a/src/components/ParticipationPage.vue b/src/components/ParticipationPage.vue index a63249d..b397c7f 100644 --- a/src/components/ParticipationPage.vue +++ b/src/components/ParticipationPage.vue @@ -1,5 +1,5 @@ diff --git a/src/components/ScenariosEditorPage.vue b/src/components/ScenariosEditorPage.vue index 3db2db2..361e2fa 100644 --- a/src/components/ScenariosEditorPage.vue +++ b/src/components/ScenariosEditorPage.vue @@ -101,11 +101,7 @@ async function updateConclusion(remove = false) { video = uploaded.filename } const saved = remove ? { text: '', video: '' } : { text: conclusion.value.text, video } - const res = await client.UpdateScenarioConclusion({ ID: scenario.value.ID, conclusion: saved }) - if (res.error) { - message.error(res.error!) - return - } + await client.UpdateScenarioConclusion({ ID: scenario.value.ID, conclusion: saved }) scenario.value.story!.conclusion = saved resetConclusion() message.success(remove ? 'Закрывашка удалена' : 'Закрывашка сохранена') @@ -148,10 +144,6 @@ const editorQuestions = computed(() => { async function getScenario(id: number) { const res = await client.GetFullScenario({ ID: id }) - if (res.error != '') { - message.error(res.error!) - return - } scenario.value = res.scenario! resetConclusion() scenario.value.story?.places?.forEach((item) => { @@ -170,20 +162,12 @@ async function getScenario(id: number) { getScenario(Number(scenarioId)) async function deleteScenario(id: number) { - const res = await client.DeleteScenario({ ID: id }) - if (res.error != '') { - message.error(res.error!) - return - } + await client.DeleteScenario({ ID: id }) router.push('/scenarios') } async function publicScenario(id: number) { - const res = await client.PublicScenario({ ID: id }) - if (res.error != '') { - message.error(res.error!) - return - } + await client.PublicScenario({ ID: id }) await getScenario(Number(scenarioId)) statusScenarioName.value = '' showSettingsModal.value = false @@ -199,28 +183,16 @@ async function addGame(name: string, id: number) { startAt: now, scenarioID: id, }) - if (resAddGame.error != '') { - message.error(resAddGame.error!) - return - } const resAddTeam = await client.AddTeam({ name: 'Тестовая команда', captainEmail: '', gameID: resAddGame.ID!, }) - if (resAddTeam.error != '') { - message.error(resAddTeam.error!) - return - } router.push('/team-story/' + resAddTeam.ID! + '?password=' + resAddTeam.password!) } async function draftScenario(id: number) { - const res = await client.DraftScenario({ ID: id }) - if (res.error != '') { - message.error(res.error!) - return - } + await client.DraftScenario({ ID: id }) await getScenario(Number(scenarioId)) statusScenarioName.value = '' showSettingsModal.value = false @@ -265,11 +237,6 @@ async function uploadFile(file: File | null, filename: string): Promise([]) const isImporting = ref(false) async function getScenarios() { - scenarios.value = [] - const res = await client.GetMyScenarios({}) - scenarios.value = res.scenarios! + try { + scenarios.value = [] + const res = await client.GetMyScenarios({}) + scenarios.value = res.scenarios! + } catch (err) { + message.error(err instanceof Error ? err.message : 'Не удалось загрузить сценарии') + } } async function addScenario(name: string) { - const res = await client.AddScenario({ name: name }) - if (res.error != '') { - message.error(res.error!) - return + try { + const res = await client.AddScenario({ name: name }) + await toScenarioEditor(res.ID!) + } catch (err) { + message.error(err instanceof Error ? err.message : 'Не удалось создать сценарий') } - await toScenarioEditor(res.ID!) } async function toScenarioEditor(id: number) { @@ -70,10 +74,6 @@ async function importScenario() { isImporting.value = true try { const res = await archiveClient.uploadScenarioArchive(file) - if (res.error) { - message.error(res.error) - return - } message.success('Сценарий импортирован из архива') resetImport() await toScenarioEditor(res.ID!) diff --git a/src/components/ScreenPage.vue b/src/components/ScreenPage.vue index 8ddfdce..01316d0 100644 --- a/src/components/ScreenPage.vue +++ b/src/components/ScreenPage.vue @@ -100,9 +100,7 @@ function readSession() { async function createSession() { const res = await client.CreateScreenSession({}) - if (res.error || !res.screenID || !res.accessToken) { - throw new Error(res.error || 'Не удалось создать сессию экрана') - } + if (!res.screenID || !res.accessToken) throw new Error('Не удалось создать сессию экрана') screenId.value = res.screenID accessToken.value = res.accessToken saveSession() @@ -112,7 +110,6 @@ async function loadState() { if (!screenId.value || !accessToken.value) return try { const res = await client.GetScreenState({ screenID: screenId.value, accessToken: accessToken.value }) - if (res.error) throw new Error(res.error) state.value = res.state syncTimer(state.value) if (state.value?.gameID && state.value.mode === 'SCREEN_MODE_RESULTS') await loadResults() @@ -124,23 +121,21 @@ async function loadState() { async function loadResults() { if (!screenId.value || !accessToken.value) return const res = await client.GetScreenResults({ screenID: screenId.value, accessToken: accessToken.value }) - if (res.error == '') { - resultQuestions.value = res.questions || [] - resultTeams.value = res.teams || [] - if (!resultsScrollStarted) { - resultsScrollStarted = true - await nextTick() - const container = resultsContainer.value - if (container) { - container.scrollTop = container.scrollHeight - resultsScrollTimer = window.setInterval(() => { - container.scrollTop = Math.max(0, container.scrollTop - 32) - if (container.scrollTop === 0 && resultsScrollTimer != null) { - window.clearInterval(resultsScrollTimer) - resultsScrollTimer = undefined - } - }, 1000) - } + resultQuestions.value = res.questions || [] + resultTeams.value = res.teams || [] + if (!resultsScrollStarted) { + resultsScrollStarted = true + await nextTick() + const container = resultsContainer.value + if (container) { + container.scrollTop = container.scrollHeight + resultsScrollTimer = window.setInterval(() => { + container.scrollTop = Math.max(0, container.scrollTop - 32) + if (container.scrollTop === 0 && resultsScrollTimer != null) { + window.clearInterval(resultsScrollTimer) + resultsScrollTimer = undefined + } + }, 1000) } } } @@ -148,7 +143,6 @@ async function loadResults() { async function loadGames() { try { const res = await client.GetGames({}) - if (res.error) throw new Error(res.error) games.value = res.games || [] } catch (err) { message.error(err instanceof Error ? err.message : 'Не удалось загрузить игры') @@ -183,12 +177,11 @@ async function bind() { if (!selectedGameId.value || !route.query.screenID || !route.query.accessToken) return binding.value = true try { - const res = await client.BindScreen({ + await client.BindScreen({ screenID: String(route.query.screenID), accessToken: String(route.query.accessToken), gameID: selectedGameId.value, }) - if (res.error) throw new Error(res.error) bindSuccess.value = true } catch (err) { message.error(err instanceof Error ? err.message : 'Не удалось привязать экран') diff --git a/src/components/TeamStoryPage.vue b/src/components/TeamStoryPage.vue index 004727a..32c045b 100644 --- a/src/components/TeamStoryPage.vue +++ b/src/components/TeamStoryPage.vue @@ -74,11 +74,6 @@ async function getStory() { ID: Number(teamId), password: password as string, }) - if (res.error != '') { - message.error(res.error!) - return - } - game.value = res.game const wasAtBottom = isAtBottom() @@ -121,15 +116,11 @@ getStory() getAnswers() async function addAction(newCode: string) { - const res = await client.AddTeamAction({ + await client.AddTeamAction({ ID: Number(teamId), password: password as string, code: newCode, }) - if (res.error != '') { - message.error(res.error!) - return - } await getStory() code.value = '' @@ -157,10 +148,6 @@ async function getAnswers() { ID: Number(teamId), password: password as string, }) - if (res.error != '') { - message.error(res.error!) - return - } const next: Record = {} for (const answer of res.answers || []) { next[answer.questionCode || ''] = answer.answer || '' @@ -169,7 +156,7 @@ async function getAnswers() { } async function submitAnswers() { - const res = await client.SubmitTeamAnswers({ + await client.SubmitTeamAnswers({ ID: Number(teamId), password: password as string, answers: (story.value.questions || []).map((question) => ({ @@ -177,10 +164,6 @@ async function submitAnswers() { answer: answers.value[question.code || ''] || '', })), }) - if (res.error != '') { - message.error(res.error!) - return - } message.success('Ответы сохранены') await getAnswers() } @@ -230,7 +213,7 @@ async function submitReview() { return } reviewLoading.value = true - const res = await client.CreateGameReview({ + await client.CreateGameReview({ gameID: Number(game.value?.ID), teamID: Number(teamId), password: password as string, @@ -238,23 +221,15 @@ async function submitReview() { text: reviewText.value.trim(), }) reviewLoading.value = false - if (res.error != '') { - message.error(res.error!) - return - } reviewSubmitted.value = true localStorage.setItem(reviewKey, '1') message.success('Спасибо за отзыв') } async function deleteLast() { - const res = await client.DeleteLastTeamAction({ + await client.DeleteLastTeamAction({ ID: Number(teamId), }) - if (res.error != '') { - message.error(res.error!) - return - } await getStory() code.value = '' } diff --git a/src/components/TicketPage.vue b/src/components/TicketPage.vue index 6023879..fdba415 100644 --- a/src/components/TicketPage.vue +++ b/src/components/TicketPage.vue @@ -21,8 +21,8 @@ async function load() { error.value = '' try { const result = await client.GetTicket({ token: token.value }) - if (result.error || !result.ticket) { - error.value = result.error || 'Билет не найден' + if (!result.ticket) { + error.value = 'Билет не найден' return } ticket.value = result.ticket diff --git a/src/components/TicketScannerPage.vue b/src/components/TicketScannerPage.vue index a1f6248..c553c19 100644 --- a/src/components/TicketScannerPage.vue +++ b/src/components/TicketScannerPage.vue @@ -39,7 +39,7 @@ async function findTicket() { ticket.value = undefined try { const result = await client.GetTicket({ token: token.value }) - if (result.error || !result.ticket) error.value = result.error || 'Билет не найден' + if (!result.ticket) error.value = 'Билет не найден' else ticket.value = result.ticket } catch (err) { error.value = err instanceof Error ? err.message : 'Не удалось проверить билет' @@ -54,7 +54,7 @@ async function acceptTicket() { error.value = '' try { const result = await client.AcceptTicket({ token: token.value }) - if (result.error || !result.ticket) error.value = result.error || 'Не удалось принять билет' + if (!result.ticket) error.value = 'Не удалось принять билет' else { ticket.value = result.ticket message.success('Билет принят') diff --git a/src/components/UsersPage.vue b/src/components/UsersPage.vue index 8f92340..db4d054 100644 --- a/src/components/UsersPage.vue +++ b/src/components/UsersPage.vue @@ -46,31 +46,31 @@ async function changePassword() { } async function getUsers() { - const res = await client.GetUsers({}) - if (res.error != '') { - message.error(res.error!) - return + try { + const res = await client.GetUsers({}) + users.value = res.users! + } catch (err) { + message.error(err instanceof Error ? err.message : 'Не удалось загрузить пользователей') } - users.value = res.users! } getUsers() async function addRole(userId: number, role: string) { - const res = await client.AddUserRole({ ID: userId, role: role }) - if (res.error != '') { - message.error(res.error!) - return + try { + await client.AddUserRole({ ID: userId, role: role }) + await getUsers() + } catch (err) { + message.error(err instanceof Error ? err.message : 'Не удалось изменить роль') } - await getUsers() } async function deleteRole(userId: number, role: string) { - const res = await client.DeleteUserRole({ ID: userId, role: role }) - if (res.error != '') { - message.error(res.error!) - return + try { + await client.DeleteUserRole({ ID: userId, role: role }) + await getUsers() + } catch (err) { + message.error(err instanceof Error ? err.message : 'Не удалось изменить роль') } - await getUsers() } diff --git a/src/stores/auth.ts b/src/stores/auth.ts index 9066ba6..55c0a45 100644 --- a/src/stores/auth.ts +++ b/src/stores/auth.ts @@ -45,11 +45,6 @@ export const useAuthStore = defineStore('auth', () => { const client = buildClient(getToken) const response = await client.GetMe({}) - if (response.error) { - error.value = response.error - return - } - if (response.user) { user.value = response.user } @@ -71,11 +66,6 @@ export const useAuthStore = defineStore('auth', () => { const client = buildClient(getToken) const response = await client.Login({ email, password }) - if (response.error) { - error.value = response.error - return false - } - // Сохраняем токены if (response.accessToken) { accessToken.value = response.accessToken @@ -112,7 +102,7 @@ export const useAuthStore = defineStore('auth', () => { refreshToken: refreshToken.value, }) - if (response.error || !response.accessToken) { + if (!response.accessToken) { return false } @@ -143,12 +133,7 @@ export const useAuthStore = defineStore('auth', () => { try { const client = buildClient(getToken) - const response = await client.Signup({ username, email, acceptTerms, acceptPrivacy }) - - if (response.error) { - error.value = response.error - return false - } + await client.Signup({ username, email, acceptTerms, acceptPrivacy }) return true } catch (err) { @@ -167,12 +152,7 @@ export const useAuthStore = defineStore('auth', () => { try { // Пароль передаётся HTTP-заголовком X-Password, а не в URL или body const client = buildClient(getToken, () => ({ 'X-Password': password })) - const response = await client.DeleteAccount({}) - - if (response.error) { - error.value = response.error - return false - } + await client.DeleteAccount({}) await logout() return true @@ -191,12 +171,7 @@ export const useAuthStore = defineStore('auth', () => { try { const client = buildClient(getToken) - const response = await client.RefreshPassword({ email }) - - if (response.error) { - error.value = response.error - return false - } + await client.RefreshPassword({ email }) return true } catch (err) {