diff --git a/README.md b/README.md index bfe614a..18d76d1 100644 --- a/README.md +++ b/README.md @@ -78,8 +78,9 @@ MCP-сервер (Model Context Protocol) встроен в основной б | Инструмент | Назначение | |---|---| | `connect` | Подключиться к игре по ссылке `/team-story/{id}?password=...`; возвращает id команды, пароль и текущую историю | -| `get_team_story` | История команды: точки, двери, улики + инфо об игре (по паролю команды, без авторизации) | +| `get_team_story` | История команды: точки, двери, улики, вопросы дела + инфо об игре (по паролю команды, без авторизации) | | `make_move` | Ход команды в точку по её коду; возвращает обновлённую историю (по паролю команды, без авторизации) | +| `submit_answers` | Ответы команды на вопросы дела (массив `{question_code, answer}`); возвращает обновлённую историю (по паролю команды, без авторизации) | Ссылку на игру (`/team-story/{id}?password=...`) выдаёт команде организатор личным каналом — например, вместе с паролем. Принимаются относительные и абсолютные ссылки (в т.ч. с любым хостом): HTTP-запросы по ним не выполняются, из ссылки берутся только id команды и пароль. Игроку авторизация не нужна: команда идентифицируется паролем из ссылки. diff --git a/api/main.proto b/api/main.proto index ac6f7f4..6d7a34e 100644 --- a/api/main.proto +++ b/api/main.proto @@ -365,6 +365,38 @@ service EveningDetectiveServer { }; } + rpc AddScenarioQuestion(AddScenarioQuestionReq) returns (AddScenarioQuestionRsp) { + option (google.api.http) = { + post: "/api/scenarios/{id}/questions" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Вопросы сценария"; + summary: "Создать вопрос дела"; + }; + } + + rpc UpdateScenarioQuestion(UpdateScenarioQuestionReq) returns (UpdateScenarioQuestionRsp) { + option (google.api.http) = { + put : "/api/scenarios/{id}/questions/{code}" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Вопросы сценария"; + summary: "Обновить вопрос дела"; + }; + } + + rpc DeleteScenarioQuestion(DeleteScenarioQuestionReq) returns (DeleteScenarioQuestionRsp) { + option (google.api.http) = { + delete: "/api/scenarios/{id}/questions/{code}" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Вопросы сценария"; + summary: "Удалить вопрос дела"; + }; + } + rpc UpdateScenarioIntro(UpdateScenarioIntroReq) returns (UpdateScenarioIntroRsp) { option (google.api.http) = { put : "/api/scenarios/{id}/introduction" @@ -428,6 +460,16 @@ service EveningDetectiveServer { }; } + rpc GetGameAnswers(GetGameAnswersReq) returns (GetGameAnswersRsp) { + option (google.api.http) = { + get: "/api/games/{gameId}/answers" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Игры"; + summary: "Получить ответы команд на вопросы дела (для оценки организатором)"; + }; + } + rpc UpdateGame(UpdateGameReq) returns (UpdateGameRsp) { option (google.api.http) = { put : "/api/games/{id}" @@ -583,6 +625,44 @@ service EveningDetectiveServer { summary: "Удалить последний ход"; }; } + + rpc GetTeamAnswers(GetTeamAnswersReq) returns (GetTeamAnswersRsp) { + option (google.api.http) = { + get: "/api/teams/{id}/answers" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + security: { + security_requirement: {} + } + tags : "Ходы"; + summary: "Получить ответы команды на вопросы дела"; + }; + } + + rpc SubmitTeamAnswers(SubmitTeamAnswersReq) returns (SubmitTeamAnswersRsp) { + option (google.api.http) = { + post: "/api/teams/{id}/answers" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + security: { + security_requirement: {} + } + tags : "Ходы"; + summary: "Отправить ответы команды на вопросы дела"; + }; + } + + rpc SetTeamAnswerScore(SetTeamAnswerScoreReq) returns (SetTeamAnswerScoreRsp) { + option (google.api.http) = { + put : "/api/teams/{id}/answers/{questionCode}/score" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Игры"; + summary: "Выставить балл команде за ответ на вопрос дела"; + }; + } } message PingReq {} @@ -792,6 +872,7 @@ message Scenario { message Story { Introduction introduction = 2; repeated Place places = 1; + repeated Question questions = 3; } message Introduction { @@ -829,6 +910,43 @@ message Key { string name = 1; } +// Вопрос дела - вопрос, на который команда должна ответить в конце игры. +// Правильный ответ (answer) виден только автору сценария и организаторам +// (при оценке ответов команд), команде не передаётся. +message Question { + // Код вопроса - используется при отправке ответов командой + string code = 1; + + // Текст вопроса + string text = 2; + + // Правильный ответ (справка для организатора при оценке) + string answer = 3; +} + +// Ответ команды на вопрос дела +message Answer { + // Код вопроса + string questionCode = 1; + + // Текст ответа команды + string answer = 2; +} + +// Ответ команды с баллом (для панели организатора) +message AnswerScore { + string questionCode = 1; + string answer = 2; + // Балл, выставленный организатором; отсутствует, если ещё не оценено + optional int32 score = 3; +} + +// Ответы одной команды на вопросы дела +message TeamAnswers { + Team team = 1; + repeated AnswerScore answers = 2; +} + message UpdateScenarioReq { int32 id = 1; string name = 2; @@ -901,6 +1019,34 @@ message UpdateScenarioIntroRsp { string error = 1; } +message AddScenarioQuestionReq { + int32 id = 1; + Question question = 2; +} + +message AddScenarioQuestionRsp { + string error = 1; +} + +message UpdateScenarioQuestionReq { + int32 id = 1; + string code = 2; + Question question = 3; +} + +message UpdateScenarioQuestionRsp { + string error = 1; +} + +message DeleteScenarioQuestionReq { + int32 id = 1; + string code = 2; +} + +message DeleteScenarioQuestionRsp { + string error = 1; +} + message DownloadScenarioArchiveReq { int32 id = 1; } @@ -959,6 +1105,16 @@ message GetGameRsp { Game game = 2; } +message GetGameAnswersReq { + int32 gameId = 1; +} + +message GetGameAnswersRsp { + string error = 1; + repeated Question questions = 2; + repeated TeamAnswers teams = 3; +} + message UpdateGameReq { int32 id = 1; string name = 2; @@ -1084,3 +1240,34 @@ message DeleteLastTeamActionReq { message DeleteLastTeamActionRsp { string error = 1; } + +message GetTeamAnswersReq { + int64 id = 1; + string password = 2; +} + +message GetTeamAnswersRsp { + string error = 1; + repeated Answer answers = 2; +} + +message SubmitTeamAnswersReq { + int64 id = 1; + string password = 2; + repeated Answer answers = 3; +} + +message SubmitTeamAnswersRsp { + string error = 1; +} + +message SetTeamAnswerScoreReq { + int64 id = 1; + string questionCode = 2; + // Балл; отсутствует — сбросить выставленный балл + optional int32 score = 3; +} + +message SetTeamAnswerScoreRsp { + string error = 1; +} diff --git a/bin/evening_detective_server b/bin/evening_detective_server index 965d93d..895f1e1 100755 Binary files a/bin/evening_detective_server and b/bin/evening_detective_server differ diff --git a/cmd/evening_detective_server/main.go b/cmd/evening_detective_server/main.go index 55e26bb..d6dd8c0 100644 --- a/cmd/evening_detective_server/main.go +++ b/cmd/evening_detective_server/main.go @@ -18,6 +18,7 @@ import ( "evening_detective_server/internal/repos/games_repo" "evening_detective_server/internal/repos/refresh_tokens_repo" "evening_detective_server/internal/repos/scenarios_repo" + "evening_detective_server/internal/repos/team_answers_repo" "evening_detective_server/internal/repos/teams_repo" "evening_detective_server/internal/repos/users_repo" "evening_detective_server/internal/services/file_service" @@ -125,6 +126,7 @@ func main() { storyteller := storytelling.NewStory(cleaner) actionsRepo := actions_repo.NewActionsRepo(dbpool) applicationsRepo := applications_repo.NewApplicationsRepo(dbpool) + answersRepo := team_answers_repo.NewTeamAnswersRepo(dbpool) gameService := game_service.NewGameService( gameRepo, teamRepo, @@ -135,6 +137,7 @@ func main() { storyteller, actionsRepo, applicationsRepo, + answersRepo, cleaner, ) @@ -161,6 +164,8 @@ func main() { "/crabs.evening_detective_server.EveningDetectiveServer/GetScenariosCatalog": true, "/crabs.evening_detective_server.EveningDetectiveServer/GetTeamStory": true, "/crabs.evening_detective_server.EveningDetectiveServer/AddTeamAction": true, + "/crabs.evening_detective_server.EveningDetectiveServer/GetTeamAnswers": true, + "/crabs.evening_detective_server.EveningDetectiveServer/SubmitTeamAnswers": true, "/crabs.evening_detective_server.EveningDetectiveServer/GetTerms": true, "/crabs.evening_detective_server.EveningDetectiveServer/GetPrivacy": true, "/crabs.evening_detective_server.EveningDetectiveServer/GetConsent": true, diff --git a/cmd/evening_detective_server/main.swagger.json b/cmd/evening_detective_server/main.swagger.json index 5025724..99fb448 100644 --- a/cmd/evening_detective_server/main.swagger.json +++ b/cmd/evening_detective_server/main.swagger.json @@ -356,6 +356,38 @@ ] } }, + "/api/games/{gameId}/answers": { + "get": { + "summary": "Получить ответы команд на вопросы дела (для оценки организатором)", + "operationId": "EveningDetectiveServer_GetGameAnswers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverGetGameAnswersRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "gameId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Игры" + ] + } + }, "/api/games/{id}": { "get": { "summary": "Получить игру", @@ -1175,6 +1207,128 @@ ] } }, + "/api/scenarios/{id}/questions": { + "post": { + "summary": "Создать вопрос дела", + "operationId": "EveningDetectiveServer_AddScenarioQuestion", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverAddScenarioQuestionRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EveningDetectiveServerAddScenarioQuestionBody" + } + } + ], + "tags": [ + "Вопросы сценария" + ] + } + }, + "/api/scenarios/{id}/questions/{code}": { + "delete": { + "summary": "Удалить вопрос дела", + "operationId": "EveningDetectiveServer_DeleteScenarioQuestion", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverDeleteScenarioQuestionRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "code", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "Вопросы сценария" + ] + }, + "put": { + "summary": "Обновить вопрос дела", + "operationId": "EveningDetectiveServer_UpdateScenarioQuestion", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverUpdateScenarioQuestionRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + }, + { + "name": "code", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EveningDetectiveServerUpdateScenarioQuestionBody" + } + } + ], + "tags": [ + "Вопросы сценария" + ] + } + }, "/api/teams": { "post": { "summary": "Создать команду", @@ -1323,6 +1477,138 @@ ] } }, + "/api/teams/{id}/answers": { + "get": { + "summary": "Получить ответы команды на вопросы дела", + "operationId": "EveningDetectiveServer_GetTeamAnswers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverGetTeamAnswersRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "format": "int64" + }, + { + "name": "password", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "Ходы" + ], + "security": [ + { + "": [] + } + ] + }, + "post": { + "summary": "Отправить ответы команды на вопросы дела", + "operationId": "EveningDetectiveServer_SubmitTeamAnswers", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverSubmitTeamAnswersRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "format": "int64" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EveningDetectiveServerSubmitTeamAnswersBody" + } + } + ], + "tags": [ + "Ходы" + ], + "security": [ + { + "": [] + } + ] + } + }, + "/api/teams/{id}/answers/{questionCode}/score": { + "put": { + "summary": "Выставить балл команде за ответ на вопрос дела", + "operationId": "EveningDetectiveServer_SetTeamAnswerScore", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverSetTeamAnswerScoreRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "id", + "in": "path", + "required": true, + "type": "string", + "format": "int64" + }, + { + "name": "questionCode", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EveningDetectiveServerSetTeamAnswerScoreBody" + } + } + ], + "tags": [ + "Игры" + ] + } + }, "/api/teams/{id}/applications": { "post": { "summary": "Выдать улику", @@ -1716,6 +2002,14 @@ } } }, + "EveningDetectiveServerAddScenarioQuestionBody": { + "type": "object", + "properties": { + "question": { + "$ref": "#/definitions/evening_detective_serverQuestion" + } + } + }, "EveningDetectiveServerAddTeamActionBody": { "type": "object", "properties": { @@ -1769,9 +2063,34 @@ "EveningDetectiveServerResetGameBody": { "type": "object" }, + "EveningDetectiveServerSetTeamAnswerScoreBody": { + "type": "object", + "properties": { + "score": { + "type": "integer", + "format": "int32", + "title": "Балл; отсутствует — сбросить выставленный балл" + } + } + }, "EveningDetectiveServerStartGameBody": { "type": "object" }, + "EveningDetectiveServerSubmitTeamAnswersBody": { + "type": "object", + "properties": { + "password": { + "type": "string" + }, + "answers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/evening_detective_serverAnswer" + } + } + } + }, "EveningDetectiveServerUpdateGameBody": { "type": "object", "properties": { @@ -1821,6 +2140,14 @@ } } }, + "EveningDetectiveServerUpdateScenarioQuestionBody": { + "type": "object", + "properties": { + "question": { + "$ref": "#/definitions/evening_detective_serverQuestion" + } + } + }, "EveningDetectiveServerUpdateTeamBody": { "type": "object", "properties": { @@ -1891,6 +2218,14 @@ } } }, + "evening_detective_serverAddScenarioQuestionRsp": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + }, "evening_detective_serverAddScenarioReq": { "type": "object", "properties": { @@ -1954,6 +2289,37 @@ } } }, + "evening_detective_serverAnswer": { + "type": "object", + "properties": { + "questionCode": { + "type": "string", + "title": "Код вопроса" + }, + "answer": { + "type": "string", + "title": "Текст ответа команды" + } + }, + "title": "Ответ команды на вопрос дела" + }, + "evening_detective_serverAnswerScore": { + "type": "object", + "properties": { + "questionCode": { + "type": "string" + }, + "answer": { + "type": "string" + }, + "score": { + "type": "integer", + "format": "int32", + "title": "Балл, выставленный организатором; отсутствует, если ещё не оценено" + } + }, + "title": "Ответ команды с баллом (для панели организатора)" + }, "evening_detective_serverApplication": { "type": "object", "properties": { @@ -1965,7 +2331,7 @@ }, "file_type": { "type": "string", - "description": "Тип файла улики: image | pdf | audio. Значение выводится сервером из\nрасширения файла (см. file_storage.FileType); пустое значение возможно\nтолько для legacy-строк без расширения. Явный json_name — осознанное\nотклонение от camelCase-конвенции REST (единый snake_case с внутренним\nJSON истории)." + "description": "Тип файла улики: image | pdf | audio. Значение выводится сервером из\nрасширения файла (см. file_storage.FileType); пустое значение возможно\nтолько для legacy-строк без расширения." } } }, @@ -2001,6 +2367,14 @@ } } }, + "evening_detective_serverDeleteScenarioQuestionRsp": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + }, "evening_detective_serverDeleteScenarioRsp": { "type": "object", "properties": { @@ -2118,6 +2492,28 @@ } } }, + "evening_detective_serverGetGameAnswersRsp": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "questions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/evening_detective_serverQuestion" + } + }, + "teams": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/evening_detective_serverTeamAnswers" + } + } + } + }, "evening_detective_serverGetGameRsp": { "type": "object", "properties": { @@ -2221,6 +2617,21 @@ } } }, + "evening_detective_serverGetTeamAnswersRsp": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "answers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/evening_detective_serverAnswer" + } + } + } + }, "evening_detective_serverGetTeamStoryRsp": { "type": "object", "properties": { @@ -2392,6 +2803,24 @@ } } }, + "evening_detective_serverQuestion": { + "type": "object", + "properties": { + "code": { + "type": "string", + "title": "Код вопроса - используется при отправке ответов командой" + }, + "text": { + "type": "string", + "title": "Текст вопроса" + }, + "answer": { + "type": "string", + "title": "Правильный ответ (справка для организатора при оценке)" + } + }, + "description": "Вопрос дела - вопрос, на который команда должна ответить в конце игры.\nПравильный ответ (answer) виден только автору сценария и организаторам\n(при оценке ответов команд), команде не передаётся." + }, "evening_detective_serverRefreshPasswordReq": { "type": "object", "properties": { @@ -2477,6 +2906,14 @@ } } }, + "evening_detective_serverSetTeamAnswerScoreRsp": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + }, "evening_detective_serverSignupReq": { "type": "object", "properties": { @@ -2522,6 +2959,21 @@ "type": "object", "$ref": "#/definitions/evening_detective_serverPlace" } + }, + "questions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/evening_detective_serverQuestion" + } + } + } + }, + "evening_detective_serverSubmitTeamAnswersRsp": { + "type": "object", + "properties": { + "error": { + "type": "string" } } }, @@ -2554,6 +3006,22 @@ } } }, + "evening_detective_serverTeamAnswers": { + "type": "object", + "properties": { + "team": { + "$ref": "#/definitions/evening_detective_serverTeam" + }, + "answers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/evening_detective_serverAnswerScore" + } + } + }, + "title": "Ответы одной команды на вопросы дела" + }, "evening_detective_serverUpdateGameRsp": { "type": "object", "properties": { @@ -2578,6 +3046,14 @@ } } }, + "evening_detective_serverUpdateScenarioQuestionRsp": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + }, "evening_detective_serverUpdateScenarioRsp": { "type": "object", "properties": { diff --git a/internal/app/answer_mapper.go b/internal/app/answer_mapper.go new file mode 100644 index 0000000..63b493e --- /dev/null +++ b/internal/app/answer_mapper.go @@ -0,0 +1,55 @@ +package app + +import ( + "evening_detective_server/internal/services/game_service" + proto "evening_detective_server/proto" +) + +func mapAnswers(o []game_service.Answer) []*proto.Answer { + res := make([]*proto.Answer, 0, len(o)) + for _, item := range o { + res = append(res, &proto.Answer{ + QuestionCode: item.QuestionCode, + Answer: item.Text, + }) + } + return res +} + +func convertAnswers(o []*proto.Answer) []game_service.Answer { + res := make([]game_service.Answer, 0, len(o)) + for _, item := range o { + res = append(res, game_service.Answer{ + QuestionCode: item.QuestionCode, + Text: item.Answer, + }) + } + return res +} + +func mapAnswerScores(o []game_service.AnswerScore) []*proto.AnswerScore { + res := make([]*proto.AnswerScore, 0, len(o)) + for _, item := range o { + score := &proto.AnswerScore{ + QuestionCode: item.QuestionCode, + Answer: item.Text, + } + if item.Score != nil { + v := int32(*item.Score) + score.Score = &v + } + res = append(res, score) + } + return res +} + +func mapTeamAnswers(o []game_service.TeamAnswers) []*proto.TeamAnswers { + res := make([]*proto.TeamAnswers, 0, len(o)) + for _, item := range o { + res = append(res, &proto.TeamAnswers{ + Team: mapTeam(item.Team), + Answers: mapAnswerScores(item.Answers), + }) + } + return res +} diff --git a/internal/app/server.go b/internal/app/server.go index 00dfec9..8c693b2 100644 --- a/internal/app/server.go +++ b/internal/app/server.go @@ -599,6 +599,73 @@ func (s *server) DeleteScenarioPlace(ctx context.Context, req *proto.DeleteScena return &proto.DeleteScenarioPlaceRsp{}, nil } +func (s *server) AddScenarioQuestion(ctx context.Context, req *proto.AddScenarioQuestionReq) (*proto.AddScenarioQuestionRsp, error) { + claims := ctx.Value("claims").(*processor_jwt.JWTClaims) + if !roles.HasRole(claims, roles.Author) { + return nil, status.Errorf(codes.PermissionDenied, "permission denied") + } + + err := s.scenarioService.AddScenarioQuestion( + ctx, + int(req.Id), + convertQuestion(req.Question), + claims.UserID, + roles.HasRole(claims, roles.Admin), + ) + if err != nil { + return &proto.AddScenarioQuestionRsp{ + Error: err.Error(), + }, nil + } + + return &proto.AddScenarioQuestionRsp{}, nil +} + +func (s *server) UpdateScenarioQuestion(ctx context.Context, req *proto.UpdateScenarioQuestionReq) (*proto.UpdateScenarioQuestionRsp, error) { + claims := ctx.Value("claims").(*processor_jwt.JWTClaims) + if !roles.HasRole(claims, roles.Author) { + return nil, status.Errorf(codes.PermissionDenied, "permission denied") + } + + err := s.scenarioService.UpdateScenarioQuestion( + ctx, + int(req.Id), + req.Code, + convertQuestion(req.Question), + claims.UserID, + roles.HasRole(claims, roles.Admin), + ) + if err != nil { + return &proto.UpdateScenarioQuestionRsp{ + Error: err.Error(), + }, nil + } + + return &proto.UpdateScenarioQuestionRsp{}, nil +} + +func (s *server) DeleteScenarioQuestion(ctx context.Context, req *proto.DeleteScenarioQuestionReq) (*proto.DeleteScenarioQuestionRsp, error) { + claims := ctx.Value("claims").(*processor_jwt.JWTClaims) + if !roles.HasRole(claims, roles.Author) { + return nil, status.Errorf(codes.PermissionDenied, "permission denied") + } + + err := s.scenarioService.DeleteScenarioQuestion( + ctx, + int(req.Id), + req.Code, + claims.UserID, + roles.HasRole(claims, roles.Admin), + ) + if err != nil { + return &proto.DeleteScenarioQuestionRsp{ + Error: err.Error(), + }, nil + } + + return &proto.DeleteScenarioQuestionRsp{}, nil +} + func (s *server) UpdateScenarioIntro(ctx context.Context, req *proto.UpdateScenarioIntroReq) (*proto.UpdateScenarioIntroRsp, error) { claims := ctx.Value("claims").(*processor_jwt.JWTClaims) if !roles.HasRole(claims, roles.Author) { @@ -762,6 +829,25 @@ func (s *server) GetGame(ctx context.Context, req *proto.GetGameReq) (*proto.Get }, nil } +func (s *server) GetGameAnswers(ctx context.Context, req *proto.GetGameAnswersReq) (*proto.GetGameAnswersRsp, error) { + claims := ctx.Value("claims").(*processor_jwt.JWTClaims) + if !roles.HasRole(claims, roles.Organizer) && !roles.HasRole(claims, roles.Author) { + return nil, status.Errorf(codes.PermissionDenied, "permission denied") + } + + gameAnswers, err := s.gameService.GetGameAnswers(ctx, int(req.GameId)) + if err != nil { + return &proto.GetGameAnswersRsp{ + Error: err.Error(), + }, nil + } + + return &proto.GetGameAnswersRsp{ + Questions: mapQuestions(gameAnswers.Questions), + Teams: mapTeamAnswers(gameAnswers.Teams), + }, nil +} + func (s *server) GetGames(ctx context.Context, req *proto.GetGamesReq) (*proto.GetGamesRsp, error) { claims := ctx.Value("claims").(*processor_jwt.JWTClaims) if !roles.HasRole(claims, roles.Organizer) && !roles.HasRole(claims, roles.Author) { @@ -1022,3 +1108,63 @@ func (s *server) DeleteLastTeamAction(ctx context.Context, req *proto.DeleteLast return &proto.DeleteLastTeamActionRsp{}, nil } + +func (s *server) GetTeamAnswers(ctx context.Context, req *proto.GetTeamAnswersReq) (*proto.GetTeamAnswersRsp, error) { + answers, err := s.gameService.GetTeamAnswers( + ctx, + int(req.Id), + req.Password, + ) + if err != nil { + return &proto.GetTeamAnswersRsp{ + Error: err.Error(), + }, nil + } + + return &proto.GetTeamAnswersRsp{ + Answers: mapAnswers(answers), + }, nil +} + +func (s *server) SubmitTeamAnswers(ctx context.Context, req *proto.SubmitTeamAnswersReq) (*proto.SubmitTeamAnswersRsp, error) { + err := s.gameService.SubmitTeamAnswers( + ctx, + int(req.Id), + req.Password, + convertAnswers(req.Answers), + ) + if err != nil { + return &proto.SubmitTeamAnswersRsp{ + Error: err.Error(), + }, nil + } + + return &proto.SubmitTeamAnswersRsp{}, nil +} + +func (s *server) SetTeamAnswerScore(ctx context.Context, req *proto.SetTeamAnswerScoreReq) (*proto.SetTeamAnswerScoreRsp, error) { + claims := ctx.Value("claims").(*processor_jwt.JWTClaims) + if !roles.HasRole(claims, roles.Organizer) && !roles.HasRole(claims, roles.Author) { + return nil, status.Errorf(codes.PermissionDenied, "permission denied") + } + + var score *int + if req.Score != nil { + v := int(req.GetScore()) + score = &v + } + + err := s.gameService.SetTeamAnswerScore( + ctx, + int(req.Id), + req.QuestionCode, + score, + ) + if err != nil { + return &proto.SetTeamAnswerScoreRsp{ + Error: err.Error(), + }, nil + } + + return &proto.SetTeamAnswerScoreRsp{}, nil +} diff --git a/internal/app/story_mapper.go b/internal/app/story_mapper.go index 8d13ff5..9889dad 100644 --- a/internal/app/story_mapper.go +++ b/internal/app/story_mapper.go @@ -49,6 +49,7 @@ func mapStory(o *storytelling.Story) *proto.Story { return &proto.Story{ Introduction: mapIntroduction(o.Introduction), Places: mapPlaces(o.Places), + Questions: mapQuestions(o.Questions), } } @@ -197,3 +198,33 @@ func convertIntroduction(o *proto.Introduction) *storytelling.Introduction { Audio: o.Audio, } } + +func mapQuestions(o []*storytelling.Question) []*proto.Question { + res := make([]*proto.Question, 0, len(o)) + for _, item := range o { + res = append(res, mapQuestion(item)) + } + return res +} + +func mapQuestion(o *storytelling.Question) *proto.Question { + if o == nil { + return nil + } + return &proto.Question{ + Code: o.Code, + Text: o.Text, + Answer: o.Answer, + } +} + +func convertQuestion(o *proto.Question) *storytelling.Question { + if o == nil { + return nil + } + return &storytelling.Question{ + Code: o.Code, + Text: textFormatter.FormatText(o.Text), + Answer: textFormatter.FormatText(o.Answer), + } +} diff --git a/internal/modules/storytelling/interface.go b/internal/modules/storytelling/interface.go index 0a981b0..cbf9e41 100644 --- a/internal/modules/storytelling/interface.go +++ b/internal/modules/storytelling/interface.go @@ -4,7 +4,7 @@ type IStory interface { GetStory(scenario *Story, codes []string) *Story } -// История - это введение и набор точек +// История - это введение, набор точек и вопросы дела type Story struct { // Введение - то, что игрок получает в начале игры @@ -12,6 +12,24 @@ type Story struct { // Список точек Places []*Place `json:"places"` + + // Вопросы дела - список вопросов, на которые команда должна ответить + Questions []*Question `json:"questions,omitempty"` +} + +// Вопрос дела - вопрос, который автор сценария добавляет вместе с +// правильным ответом; команда отвечает на вопросы в конце игры +type Question struct { + + // Код - идентификатор вопроса, используется при отправке ответов + Code string `json:"code"` + + // Текст вопроса + Text string `json:"text"` + + // Правильный ответ - виден только автору и организаторам, + // команде не передаётся + Answer string `json:"answer"` } // Введение - текст и аудио, которые игрок получает в начале игры diff --git a/internal/modules/storytelling/story.go b/internal/modules/storytelling/story.go index f9cd4d4..3064c26 100644 --- a/internal/modules/storytelling/story.go +++ b/internal/modules/storytelling/story.go @@ -29,6 +29,15 @@ func (s *story) GetStory( Audio: scenario.Introduction.Audio, } } + // Вопросы дела передаются команде всегда — с начала игры; правильные + // ответы (Answer) команде не передаются: они нужны только автору и + // организаторам при оценке ответов. + for _, question := range scenario.Questions { + story.Questions = append(story.Questions, &Question{ + Code: question.Code, + Text: s.cleaner.ClearText(question.Text), + }) + } for i, code := range codes { var prevPlace *Place if i > 0 { diff --git a/internal/modules/storytelling/story_test.go b/internal/modules/storytelling/story_test.go index 162a367..b26ad16 100644 --- a/internal/modules/storytelling/story_test.go +++ b/internal/modules/storytelling/story_test.go @@ -807,3 +807,113 @@ func Test_story_GetStory(t *testing.T) { }) } } + +func Test_story_GetStoryQuestions(t *testing.T) { + tests := []struct { + name string + scenario *Story + codes []string + want *Story + }{ + { + name: "Вопросы передаются команде с начала игры (без действий)", + scenario: &Story{ + Questions: []*Question{ + { + Code: "q1", + Text: "Кто убийца?", + Answer: "Дворецкий", + }, + }, + }, + codes: []string{}, + want: &Story{ + Questions: []*Question{ + { + Code: "q1", + Text: "Кто убийца?", + }, + }, + }, + }, + { + name: "Правильные ответы не передаются команде", + scenario: &Story{ + Questions: []*Question{ + { + Code: "q1", + Text: "Вопрос 1.([секрет])", + Answer: "Ответ 1", + }, + { + Code: "q2", + Text: "Вопрос 2", + Answer: "Ответ 2", + }, + }, + }, + codes: []string{}, + want: &Story{ + Questions: []*Question{ + { + Code: "q1", + Text: "Вопрос 1.", + }, + { + Code: "q2", + Text: "Вопрос 2", + }, + }, + }, + }, + { + name: "Вопросы передаются вместе с точками и введением", + scenario: &Story{ + Introduction: &Introduction{ + Text: "Введение.", + Audio: "intro.mp3", + }, + Places: []*Place{ + { + Code: "Ы", + Name: "Название точки", + Text: "Текст точки.", + }, + }, + Questions: []*Question{ + { + Code: "q1", + Text: "Вопрос 1", + Answer: "Ответ 1", + }, + }, + }, + codes: []string{"Ы"}, + want: &Story{ + Introduction: &Introduction{ + Text: "Введение.", + Audio: "intro.mp3", + }, + Places: []*Place{ + { + Code: "Ы", + Name: "Название точки", + Text: "Текст точки.", + }, + }, + Questions: []*Question{ + { + Code: "q1", + Text: "Вопрос 1", + }, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := NewStory(cleaner.NewCleaner()).GetStory(tt.scenario, tt.codes) + assert.Equal(t, got, tt.want) + }) + } +} diff --git a/internal/repos/answer.go b/internal/repos/answer.go new file mode 100644 index 0000000..bc557a1 --- /dev/null +++ b/internal/repos/answer.go @@ -0,0 +1,11 @@ +package repos + +// TeamAnswer — ответ команды на вопрос дела (вопросы живут в сценарии, +// ответы — в таблице team_answers). +type TeamAnswer struct { + TeamId int + QuestionCode string + Text string + // Score — балл, выставленный организатором; nil — ещё не оценено. + Score *int +} diff --git a/internal/repos/team_answers_repo/repo.go b/internal/repos/team_answers_repo/repo.go new file mode 100644 index 0000000..5174443 --- /dev/null +++ b/internal/repos/team_answers_repo/repo.go @@ -0,0 +1,163 @@ +package team_answers_repo + +import ( + "context" + "errors" + "evening_detective_server/internal/repos" + + "github.com/jackc/pgx/v5/pgxpool" +) + +var ( + ErrAnswerNotFound = errors.New("Ответ не найден") +) + +type TeamAnswersRepo struct { + pool *pgxpool.Pool +} + +func NewTeamAnswersRepo(pool *pgxpool.Pool) *TeamAnswersRepo { + return &TeamAnswersRepo{ + pool: pool, + } +} + +// UpsertAnswers сохраняет ответы команды: существующие перезаписываются, +// отсутствующие — вставляются (UNIQUE (team_id, question_code)). +func (r *TeamAnswersRepo) UpsertAnswers( + ctx context.Context, + teamId int, + answers []repos.TeamAnswer, +) error { + for _, answer := range answers { + _, err := r.pool.Exec( + ctx, + `INSERT INTO team_answers (team_id, question_code, answer) + VALUES ($1, $2, $3) + ON CONFLICT (team_id, question_code) + DO UPDATE SET + answer = EXCLUDED.answer, + updated_at = NOW()`, + teamId, + answer.QuestionCode, + answer.Text, + ) + if err != nil { + return err + } + } + return nil +} + +func (r *TeamAnswersRepo) GetAnswersByTeamID( + ctx context.Context, + teamId int, +) ([]*repos.TeamAnswer, error) { + rows, err := r.pool.Query( + ctx, + `SELECT + team_id, + question_code, + answer, + score + FROM team_answers + WHERE team_id = $1 + ORDER BY question_code ASC`, + teamId, + ) + if err != nil { + return nil, err + } + defer rows.Close() + + var answers []*repos.TeamAnswer + for rows.Next() { + answer := &repos.TeamAnswer{} + err := rows.Scan( + &answer.TeamId, + &answer.QuestionCode, + &answer.Text, + &answer.Score, + ) + if err != nil { + return nil, err + } + answers = append(answers, answer) + } + if err := rows.Err(); err != nil { + return nil, err + } + + return answers, nil +} + +// GetAnswersByGameID возвращает ответы всех команд игры (вместе с баллами). +func (r *TeamAnswersRepo) GetAnswersByGameID( + ctx context.Context, + gameId int, +) ([]*repos.TeamAnswer, error) { + rows, err := r.pool.Query( + ctx, + `SELECT + teams.id, + team_answers.question_code, + team_answers.answer, + team_answers.score + FROM team_answers + JOIN teams ON teams.id = team_answers.team_id + WHERE teams.game_id = $1 + ORDER BY teams.id ASC, team_answers.question_code ASC`, + gameId, + ) + if err != nil { + return nil, err + } + defer rows.Close() + + var answers []*repos.TeamAnswer + for rows.Next() { + answer := &repos.TeamAnswer{} + err := rows.Scan( + &answer.TeamId, + &answer.QuestionCode, + &answer.Text, + &answer.Score, + ) + if err != nil { + return nil, err + } + answers = append(answers, answer) + } + if err := rows.Err(); err != nil { + return nil, err + } + + return answers, nil +} + +// SetAnswerScore выставляет балл за ответ; score == nil сбрасывает балл. +func (r *TeamAnswersRepo) SetAnswerScore( + ctx context.Context, + teamId int, + questionCode string, + score *int, +) error { + tag, err := r.pool.Exec( + ctx, + `UPDATE team_answers + SET + score = $1, + updated_at = NOW() + WHERE team_id = $2 AND question_code = $3`, + score, + teamId, + questionCode, + ) + if err != nil { + return err + } + if tag.RowsAffected() == 0 { + return ErrAnswerNotFound + } + return nil +} diff --git a/internal/services/game_service/answer.go b/internal/services/game_service/answer.go new file mode 100644 index 0000000..c57a0d1 --- /dev/null +++ b/internal/services/game_service/answer.go @@ -0,0 +1,30 @@ +package game_service + +import "evening_detective_server/internal/modules/storytelling" + +// Answer — ответ команды на вопрос дела (для публичного API команды). +type Answer struct { + QuestionCode string + Text string +} + +// AnswerScore — ответ команды с баллом организатора (для панели оценки). +type AnswerScore struct { + QuestionCode string + Text string + // Score — балл; nil — ещё не оценено. + Score *int +} + +// TeamAnswers — ответы одной команды игры. +type TeamAnswers struct { + Team *Team + Answers []AnswerScore +} + +// GameAnswers — полная картина для оценки организатором: вопросы сценария +// (с правильными ответами) и ответы всех команд с баллами. +type GameAnswers struct { + Questions []*storytelling.Question + Teams []TeamAnswers +} diff --git a/internal/services/game_service/service.go b/internal/services/game_service/service.go index afd6158..3c1635d 100644 --- a/internal/services/game_service/service.go +++ b/internal/services/game_service/service.go @@ -2,13 +2,16 @@ package game_service import ( "context" + "errors" "evening_detective_server/internal/modules/cleaner" "evening_detective_server/internal/modules/password_generator" "evening_detective_server/internal/modules/storytelling" + "evening_detective_server/internal/repos" "evening_detective_server/internal/repos/actions_repo" "evening_detective_server/internal/repos/applications_repo" "evening_detective_server/internal/repos/games_repo" "evening_detective_server/internal/repos/scenarios_repo" + "evening_detective_server/internal/repos/team_answers_repo" "evening_detective_server/internal/repos/teams_repo" "evening_detective_server/internal/services/scenarios_service" "time" @@ -24,6 +27,7 @@ type GameService struct { storyteller storytelling.IStory actionsRepo *actions_repo.ActionsRepo applicationsRepo *applications_repo.ApplicationsRepo + answersRepo *team_answers_repo.TeamAnswersRepo cleaner cleaner.ICleaner } @@ -37,6 +41,7 @@ func NewGameService( storyteller storytelling.IStory, actionsRepo *actions_repo.ActionsRepo, applicationsRepo *applications_repo.ApplicationsRepo, + answersRepo *team_answers_repo.TeamAnswersRepo, cleaner cleaner.ICleaner, ) *GameService { return &GameService{ @@ -49,6 +54,7 @@ func NewGameService( storyteller: storyteller, actionsRepo: actionsRepo, applicationsRepo: applicationsRepo, + answersRepo: answersRepo, cleaner: cleaner, } } @@ -306,3 +312,175 @@ func (s *GameService) DeleteLastTeamAction(ctx context.Context, teamId int) erro return s.actionsRepo.DeleteLastActionByTeamId(ctx, teamId) } + +var ( + // ErrGameFinished — после завершения игры ответы команд больше нельзя + // изменять: организатор оценивает их в панели игры. + ErrGameFinished = errors.New("Игра завершена, ответы больше нельзя изменять") + // ErrGameNotStarted — игра ещё не начата, отвечать на вопросы нельзя. + ErrGameNotStarted = errors.New("Игра не начата, отвечать на вопросы нельзя") + // ErrQuestionNotFound — вопрос с таким кодом отсутствует в сценарии игры. + ErrQuestionNotFound = errors.New("Вопрос не найден") +) + +// getTeamAndGame проверяет команду по паролю и возвращает её вместе с игрой. +func (s *GameService) getTeamAndGame(ctx context.Context, teamId int, password string) (*repos.Team, *repos.Game, error) { + team, err := s.teamsRepo.GetTeamByID(ctx, teamId) + if err != nil { + return nil, nil, err + } + if team.Password != password { + return nil, nil, teams_repo.ErrTeamNotFound + } + game, err := s.gamesRepo.GetGameByID(ctx, team.GameId) + if err != nil { + return nil, nil, err + } + return team, game, nil +} + +// getScenarioQuestionsByCode возвращает вопросы сценария игры с индексацией по коду. +func (s *GameService) getScenarioQuestionsByCode(ctx context.Context, scenarioId int) ([]*storytelling.Question, map[string]*storytelling.Question, error) { + scenario, err := s.scenarioService.GetFullScenarioByID(ctx, scenarioId) + if err != nil { + return nil, nil, err + } + byCode := make(map[string]*storytelling.Question, len(scenario.Story.Questions)) + for _, question := range scenario.Story.Questions { + byCode[question.Code] = question + } + return scenario.Story.Questions, byCode, nil +} + +// GetTeamAnswers возвращает ответы команды на вопросы дела (без баллов: +// баллы видны только организаторам). Ответы на удалённые из сценария +// вопросы не возвращаются. +func (s *GameService) GetTeamAnswers(ctx context.Context, teamId int, password string) ([]Answer, error) { + _, game, err := s.getTeamAndGame(ctx, teamId, password) + if err != nil { + return nil, err + } + _, byCode, err := s.getScenarioQuestionsByCode(ctx, game.ScenarioId) + if err != nil { + return nil, err + } + teamAnswers, err := s.answersRepo.GetAnswersByTeamID(ctx, teamId) + if err != nil { + return nil, err + } + answers := make([]Answer, 0, len(teamAnswers)) + for _, teamAnswer := range teamAnswers { + if _, ok := byCode[teamAnswer.QuestionCode]; !ok { + continue + } + answers = append(answers, Answer{ + QuestionCode: teamAnswer.QuestionCode, + Text: teamAnswer.Text, + }) + } + return answers, nil +} + +// SubmitTeamAnswers сохраняет ответы команды на вопросы дела (upsert). +// Доступно только пока игра идёт (статусы run/pause): после завершения +// ответы фиксируются для оценки организатором. Переданные коды должны +// существовать в сценарии игры; пустая строка очищает ответ. +func (s *GameService) SubmitTeamAnswers(ctx context.Context, teamId int, password string, answers []Answer) error { + _, game, err := s.getTeamAndGame(ctx, teamId, password) + if err != nil { + return err + } + switch game.Status { + case "run", "pause": + // игра идёт — можно отвечать + default: + if game.Status == "finish" { + return ErrGameFinished + } + return ErrGameNotStarted + } + _, byCode, err := s.getScenarioQuestionsByCode(ctx, game.ScenarioId) + if err != nil { + return err + } + rows := make([]repos.TeamAnswer, 0, len(answers)) + for _, answer := range answers { + if _, ok := byCode[answer.QuestionCode]; !ok { + return ErrQuestionNotFound + } + rows = append(rows, repos.TeamAnswer{ + QuestionCode: answer.QuestionCode, + Text: answer.Text, + }) + } + return s.answersRepo.UpsertAnswers(ctx, teamId, rows) +} + +// GetGameAnswers возвращает полную картину для оценки организатором: +// вопросы сценария с правильными ответами и ответы всех команд с баллами. +// Ответы на удалённые из сценария вопросы не возвращаются (как в +// GetTeamAnswers). +func (s *GameService) GetGameAnswers(ctx context.Context, gameId int) (*GameAnswers, error) { + game, err := s.gamesRepo.GetGameByID(ctx, gameId) + if err != nil { + return nil, err + } + questions, byCode, err := s.getScenarioQuestionsByCode(ctx, game.ScenarioId) + if err != nil { + return nil, err + } + teams, err := s.teamsRepo.GetTeamsByGameID(ctx, gameId) + if err != nil { + return nil, err + } + rows, err := s.answersRepo.GetAnswersByGameID(ctx, gameId) + if err != nil { + return nil, err + } + answersByTeam := make(map[int][]AnswerScore, len(teams)) + for _, row := range rows { + if _, ok := byCode[row.QuestionCode]; !ok { + continue + } + score := row.Score + answersByTeam[row.TeamId] = append(answersByTeam[row.TeamId], AnswerScore{ + QuestionCode: row.QuestionCode, + Text: row.Text, + Score: score, + }) + } + teamAnswers := make([]TeamAnswers, 0, len(teams)) + for _, team := range teams { + teamAnswers = append(teamAnswers, TeamAnswers{ + Team: mapTeam(team), + Answers: answersByTeam[team.ID], + }) + } + return &GameAnswers{ + Questions: questions, + Teams: teamAnswers, + }, nil +} + +// SetTeamAnswerScore выставляет балл команде за ответ на вопрос дела; +// score == nil сбрасывает балл. Балл может быть любым целым числом +// (в т.ч. отрицательным — штрафные баллы). Вопрос должен существовать +// в сценарии игры. +func (s *GameService) SetTeamAnswerScore(ctx context.Context, teamId int, questionCode string, score *int) error { + team, err := s.teamsRepo.GetTeamByID(ctx, teamId) + if err != nil { + return err + } + game, err := s.gamesRepo.GetGameByID(ctx, team.GameId) + if err != nil { + return err + } + _, byCode, err := s.getScenarioQuestionsByCode(ctx, game.ScenarioId) + if err != nil { + return err + } + if _, ok := byCode[questionCode]; !ok { + return ErrQuestionNotFound + } + return s.answersRepo.SetAnswerScore(ctx, teamId, questionCode, score) +} diff --git a/internal/services/mcp_service/service.go b/internal/services/mcp_service/service.go index 43fd018..a04cb58 100644 --- a/internal/services/mcp_service/service.go +++ b/internal/services/mcp_service/service.go @@ -31,6 +31,7 @@ const defaultCallTimeout = 10 * time.Second type GamePlayer interface { GetTeamActions(ctx context.Context, teamId int, password string) (*storytelling.Story, *game_service.Game, error) AddTeamAction(ctx context.Context, teamId int, password, actionCode string) error + SubmitTeamAnswers(ctx context.Context, teamId int, password string, answers []game_service.Answer) error } // MCPService собирает MCP-сервер с игровыми инструментами. Сервис не @@ -52,7 +53,7 @@ func (s *MCPService) Server() *server.MCPServer { srv := server.NewMCPServer( "evening-detective-mcp", "0.1.0", - server.WithInstructions("Инструменты для игры «Вечерний детектив»: подключитесь к игре по ссылке (connect) — организатор выдаёт ссылку вида /team-story/{id}?password=..., — затем смотрите историю команды (get_team_story) и делайте ходы (make_move) по кодам точек сценария."), + server.WithInstructions("Инструменты для игры «Вечерний детектив»: подключитесь к игре по ссылке (connect) — организатор выдаёт ссылку вида /team-story/{id}?password=..., — затем смотрите историю команды (get_team_story), делайте ходы (make_move) по кодам точек сценария и отвечайте на вопросы дела (submit_answers)."), ) srv.AddTool( @@ -85,6 +86,34 @@ func (s *MCPService) Server() *server.MCPServer { s.handleMakeMove, ) + srv.AddTool( + mcp.NewToolWithRawSchema( + "submit_answers", + "Отправить ответы команды на вопросы дела (список вопросов — в истории команды через get_team_story). Работает, пока игра идёт; после завершения игры ответы изменить нельзя. После успешной отправки возвращает обновлённую историю команды. Команда идентифицируется паролем.", + json.RawMessage(`{ + "type": "object", + "properties": { + "team_id": {"type": "number", "description": "ID команды"}, + "password": {"type": "string", "description": "Пароль команды"}, + "answers": { + "type": "array", + "description": "Ответы команды на вопросы дела; переданные коды перезаписываются, пустая строка очищает ответ", + "items": { + "type": "object", + "properties": { + "questionCode": {"type": "string", "description": "Код вопроса из истории команды"}, + "answer": {"type": "string", "description": "Текст ответа команды"} + }, + "required": ["questionCode", "answer"] + } + } + }, + "required": ["team_id", "password", "answers"] + }`), + ), + s.handleSubmitAnswers, + ) + return srv } @@ -248,6 +277,78 @@ func (s *MCPService) handleMakeMove(ctx context.Context, req mcp.CallToolRequest return mcp.NewToolResultText(jsonBody), nil } +// submitAnswersArgs — разобранные аргументы инструмента submit_answers. +type submitAnswersArgs struct { + teamID int64 + password string + answers []game_service.Answer +} + +// parseSubmitAnswersArgs разбирает аргументы инструмента submit_answers: +// answers — массив объектов {questionCode, answer} (JSON-массив приходит +// как []any с map[string]any элементами). Ключ questionCode совпадает с +// REST JSON (camelCase) — единый формат для клиентов. +func parseSubmitAnswersArgs(args map[string]any) (submitAnswersArgs, error) { + teamID, ok := argInt64(args["team_id"]) + if !ok { + return submitAnswersArgs{}, fmt.Errorf("требуется team_id (число)") + } + password, _ := args["password"].(string) + if password == "" { + return submitAnswersArgs{}, fmt.Errorf("требуется password") + } + rawAnswers, ok := args["answers"].([]any) + if !ok { + return submitAnswersArgs{}, fmt.Errorf("требуется answers (массив ответов)") + } + answers := make([]game_service.Answer, 0, len(rawAnswers)) + for i, raw := range rawAnswers { + item, ok := raw.(map[string]any) + if !ok { + return submitAnswersArgs{}, fmt.Errorf("answers[%d]: ожидается объект {questionCode, answer}", i) + } + questionCode, _ := item["questionCode"].(string) + answerText, _ := item["answer"].(string) + if questionCode == "" { + return submitAnswersArgs{}, fmt.Errorf("answers[%d]: требуется questionCode", i) + } + answers = append(answers, game_service.Answer{ + QuestionCode: questionCode, + Text: answerText, + }) + } + return submitAnswersArgs{ + teamID: teamID, + password: password, + answers: answers, + }, nil +} + +func (s *MCPService) handleSubmitAnswers(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { + args, err := parseSubmitAnswersArgs(req.GetArguments()) + if err != nil { + return mcp.NewToolResultError(fmt.Sprintf("submit_answers: %v", err)), nil + } + + ctx, cancel := context.WithTimeout(ctx, defaultCallTimeout) + defer cancel() + + if err := s.game.SubmitTeamAnswers(ctx, int(args.teamID), args.password, args.answers); err != nil { + return mcp.NewToolResultError(fmt.Sprintf("submit_answers: %v", err)), nil + } + + story, game, err := s.game.GetTeamActions(ctx, int(args.teamID), args.password) + if err != nil { + return mcp.NewToolResultError(fmt.Sprintf("submit_answers: %v", err)), nil + } + + jsonBody, err := storyJSON(story, game) + if err != nil { + return mcp.NewToolResultError(fmt.Sprintf("submit_answers: %v", err)), nil + } + return mcp.NewToolResultText(jsonBody), nil +} + // argInt64 достаёт int64 из аргумента инструмента: числа приходят как // float64 (JSON), строки — как string. func argInt64(v any) (int64, bool) { diff --git a/internal/services/mcp_service/service_test.go b/internal/services/mcp_service/service_test.go index 7146c8c..b08690b 100644 --- a/internal/services/mcp_service/service_test.go +++ b/internal/services/mcp_service/service_test.go @@ -36,6 +36,13 @@ func (f *fakeGamePlayer) AddTeamAction(_ context.Context, teamID int, password, return nil } +func (f *fakeGamePlayer) SubmitTeamAnswers(_ context.Context, teamID int, password string, answers []game_service.Answer) error { + if f.err != nil { + return f.err + } + return nil +} + func defaultStory() *storytelling.Story { return &storytelling.Story{ Introduction: &storytelling.Introduction{ @@ -136,10 +143,10 @@ func (f *mcpFixture) toolNames(t *testing.T) []string { func assertExactTools(t *testing.T, names []string) { t.Helper() - if len(names) != 3 { - t.Fatalf("tools = %v; want ровно 3 инструмента", names) + if len(names) != 4 { + t.Fatalf("tools = %v; want ровно 4 инструмента", names) } - for _, want := range []string{"connect", "get_team_story", "make_move"} { + for _, want := range []string{"connect", "get_team_story", "make_move", "submit_answers"} { found := false for _, name := range names { if name == want { @@ -400,3 +407,56 @@ func TestDefaultCallTimeout(t *testing.T) { t.Fatalf("defaultCallTimeout = %v; want 10s", defaultCallTimeout) } } + +func TestSubmitAnswers(t *testing.T) { + f := newMCPFixture(t, &fakeGamePlayer{story: defaultStory(), game: defaultGame()}) + + got := f.call(t, "submit_answers", map[string]any{ + "team_id": float64(10), + "password": "team-pass-1", + "answers": []any{ + map[string]any{"questionCode": "q1", "answer": "Дворецкий"}, + map[string]any{"questionCode": "q2", "answer": ""}, + }, + }) + if !strings.Contains(got, "entrance") { + t.Fatalf("submit_answers: %q; want story JSON в ответе", got) + } +} + +func TestSubmitAnswersValidation(t *testing.T) { + f := newMCPFixture(t, &fakeGamePlayer{}) + + cases := []struct { + name string + args map[string]any + want string + }{ + {"нет team_id", map[string]any{"password": "x", "answers": []any{}}, "team_id"}, + {"нет password", map[string]any{"team_id": float64(1), "answers": []any{}}, "password"}, + {"нет answers", map[string]any{"team_id": float64(1), "password": "x"}, "answers"}, + {"элемент не объект", map[string]any{"team_id": float64(1), "password": "x", "answers": []any{"str"}}, "answers[0]"}, + {"нет questionCode", map[string]any{"team_id": float64(1), "password": "x", "answers": []any{map[string]any{"answer": "x"}}}, "questionCode"}, + } + for _, tc := range cases { + t.Run(tc.name, func(t *testing.T) { + got := f.call(t, "submit_answers", tc.args) + if !strings.Contains(got, tc.want) { + t.Fatalf("submit_answers: %q; want подстроку %q", got, tc.want) + } + }) + } +} + +func TestSubmitAnswersBusinessError(t *testing.T) { + f := newMCPFixture(t, &fakeGamePlayer{err: errors.New("Игра завершена, ответы больше нельзя изменять")}) + + got := f.call(t, "submit_answers", map[string]any{ + "team_id": float64(10), + "password": "wrong", + "answers": []any{map[string]any{"questionCode": "q1", "answer": "x"}}, + }) + if !strings.Contains(got, "Игра завершена") { + t.Fatalf("submit_answers с ошибкой сервиса: %q; want error text", got) + } +} diff --git a/internal/services/scenarios_service/service.go b/internal/services/scenarios_service/service.go index 6f3f440..157fcbf 100644 --- a/internal/services/scenarios_service/service.go +++ b/internal/services/scenarios_service/service.go @@ -295,6 +295,75 @@ func (s *ScenarioService) UpdateScenarioIntro( return s.updateStory(ctx, id, story) } +// AddScenarioQuestion добавляет вопрос дела в конец списка вопросов сценария. +func (s *ScenarioService) AddScenarioQuestion( + ctx context.Context, + id int, + question *storytelling.Question, + actorId int, + isAdmin bool, +) error { + if _, err := s.getScenarioForChange(ctx, id, actorId, isAdmin); err != nil { + return err + } + story, err := s.getStory(ctx, id) + if err != nil { + return err + } + story.Questions = append(story.Questions, question) + return s.updateStory(ctx, id, story) +} + +// UpdateScenarioQuestion обновляет вопрос дела по его коду. Смена кода +// оставляет строки team_answers старого кода в БД +func (s *ScenarioService) UpdateScenarioQuestion( + ctx context.Context, + id int, + code string, + question *storytelling.Question, + actorId int, + isAdmin bool, +) error { + if _, err := s.getScenarioForChange(ctx, id, actorId, isAdmin); err != nil { + return err + } + story, err := s.getStory(ctx, id) + if err != nil { + return err + } + for i := range story.Questions { + if story.Questions[i].Code == code { + story.Questions[i] = question + break + } + } + return s.updateStory(ctx, id, story) +} + +// DeleteScenarioQuestion удаляет вопрос дела по его коду. +func (s *ScenarioService) DeleteScenarioQuestion( + ctx context.Context, + id int, + code string, + actorId int, + isAdmin bool, +) error { + if _, err := s.getScenarioForChange(ctx, id, actorId, isAdmin); err != nil { + return err + } + story, err := s.getStory(ctx, id) + if err != nil { + return err + } + for i := range story.Questions { + if story.Questions[i].Code == code { + story.Questions = append(story.Questions[:i], story.Questions[i+1:]...) + break + } + } + return s.updateStory(ctx, id, story) +} + func (s *ScenarioService) getStory(ctx context.Context, id int) (*storytelling.Story, error) { storyString, err := s.scenariosRepo.GetStoryByScenarioID(ctx, id) if err != nil { @@ -432,7 +501,6 @@ func (s *ScenarioService) UploadArchive( return id, nil } - func (s *ScenarioService) updateStory(ctx context.Context, id int, story *storytelling.Story) error { for _, place := range story.Places { place.Image = strings.TrimPrefix(place.Image, s.domain) @@ -478,6 +546,23 @@ func normalizeStory(story *storytelling.Story) (string, error) { } story.Places = cleanPlaces + // Коды вопросов уникальны, пустые коды отбрасываются (как у точек). + questionCodes := map[string]struct{}{} + for _, question := range story.Questions { + questionCodes[question.Code] = struct{}{} + } + if len(questionCodes) != len(story.Questions) { + return "", errors.New("Такой код вопроса уже существует") + } + cleanQuestions := make([]*storytelling.Question, 0, len(story.Questions)) + for _, question := range story.Questions { + if question.Code == "" { + continue + } + cleanQuestions = append(cleanQuestions, question) + } + story.Questions = cleanQuestions + return convertStory(story) } diff --git a/internal/services/scenarios_service/service_test.go b/internal/services/scenarios_service/service_test.go index 199fec4..11adbeb 100644 --- a/internal/services/scenarios_service/service_test.go +++ b/internal/services/scenarios_service/service_test.go @@ -686,3 +686,132 @@ func mustJSON(t *testing.T, v scenario_archive.ScenarioJSON) []byte { } return b } + +func TestScenarioQuestionsCRUD(t *testing.T) { + repo := newFakeScenariosRepo() + storage := newFakeStorage() + seedScenario(t, repo, storage) + svc := newTestService(repo, storage) + + // Добавление вопроса автором. + err := svc.AddScenarioQuestion(context.Background(), 1, &storytelling.Question{ + Code: "q1", + Text: "Кто убийца?", + Answer: "Дворецкий", + }, 7, false) + if err != nil { + t.Fatalf("AddScenarioQuestion: %v", err) + } + err = svc.AddScenarioQuestion(context.Background(), 1, &storytelling.Question{ + Code: "q2", + Text: "Орудие?", + Answer: "Канделябр", + }, 7, false) + if err != nil { + t.Fatalf("AddScenarioQuestion: %v", err) + } + + full, err := svc.GetFullScenarioByID(context.Background(), 1) + if err != nil { + t.Fatalf("GetFullScenarioByID: %v", err) + } + if len(full.Story.Questions) != 2 { + t.Fatalf("len(Questions) = %d, want 2", len(full.Story.Questions)) + } + // Вопросы добавляются в конец списка: q1 добавлен первым. + if full.Story.Questions[0].Code != "q1" || full.Story.Questions[0].Answer != "Дворецкий" { + t.Errorf("Questions[0] = %+v, want q1 с правильным ответом", full.Story.Questions[0]) + } + if full.Story.Questions[1].Code != "q2" || full.Story.Questions[1].Answer != "Канделябр" { + t.Errorf("Questions[1] = %+v, want q2 с правильным ответом", full.Story.Questions[1]) + } + + // Обновление вопроса по коду. + err = svc.UpdateScenarioQuestion(context.Background(), 1, "q1", &storytelling.Question{ + Code: "q1", + Text: "Кто убийца на самом деле?", + Answer: "Экономка", + }, 7, false) + if err != nil { + t.Fatalf("UpdateScenarioQuestion: %v", err) + } + full, err = svc.GetFullScenarioByID(context.Background(), 1) + if err != nil { + t.Fatalf("GetFullScenarioByID: %v", err) + } + found := false + for _, q := range full.Story.Questions { + if q.Code == "q1" { + found = true + if q.Text != "Кто убийца на самом деле?" || q.Answer != "Экономка" { + t.Errorf("q1 = %+v, want обновлённый вопрос", q) + } + } + } + if !found { + t.Error("вопрос q1 не найден после обновления") + } + + // Удаление вопроса. + err = svc.DeleteScenarioQuestion(context.Background(), 1, "q2", 7, false) + if err != nil { + t.Fatalf("DeleteScenarioQuestion: %v", err) + } + full, err = svc.GetFullScenarioByID(context.Background(), 1) + if err != nil { + t.Fatalf("GetFullScenarioByID: %v", err) + } + if len(full.Story.Questions) != 1 || full.Story.Questions[0].Code != "q1" { + t.Errorf("Questions = %+v, want только q1", full.Story.Questions) + } + + // Чужой автор не может менять вопросы. + err = svc.AddScenarioQuestion(context.Background(), 1, &storytelling.Question{Code: "q3"}, 99, false) + if !errors.Is(err, ErrScenarioNotOwner) { + t.Errorf("AddScenarioQuestion чужой автор: err = %v, want ErrScenarioNotOwner", err) + } + err = svc.DeleteScenarioQuestion(context.Background(), 1, "q1", 99, false) + if !errors.Is(err, ErrScenarioNotOwner) { + t.Errorf("DeleteScenarioQuestion чужой автор: err = %v, want ErrScenarioNotOwner", err) + } + + // Админ может менять вопросы чужого сценария. + err = svc.AddScenarioQuestion(context.Background(), 1, &storytelling.Question{ + Code: "q3", Text: "Вопрос админа", + }, 1, true) + if err != nil { + t.Fatalf("AddScenarioQuestion админ: %v", err) + } +} + +func TestNormalizeStoryQuestionCodes(t *testing.T) { + repo := newFakeScenariosRepo() + storage := newFakeStorage() + seedScenario(t, repo, storage) + svc := newTestService(repo, storage) + + // Дубликат кода вопроса — ошибка. + err := svc.AddScenarioQuestion(context.Background(), 1, &storytelling.Question{Code: "q1"}, 7, false) + if err != nil { + t.Fatalf("AddScenarioQuestion q1: %v", err) + } + err = svc.AddScenarioQuestion(context.Background(), 1, &storytelling.Question{Code: "q1"}, 7, false) + if err == nil || !strings.Contains(err.Error(), "Такой код вопроса уже существует") { + t.Errorf("AddScenarioQuestion с дублем кода: err = %v, want ошибку о дубле", err) + } + + // Пустой код — вопрос отбрасывается при сохранении. + err = svc.AddScenarioQuestion(context.Background(), 1, &storytelling.Question{Code: "", Text: "без кода"}, 7, false) + if err != nil { + t.Fatalf("AddScenarioQuestion с пустым кодом: %v", err) + } + full, err := svc.GetFullScenarioByID(context.Background(), 1) + if err != nil { + t.Fatalf("GetFullScenarioByID: %v", err) + } + for _, q := range full.Story.Questions { + if q.Code == "" { + t.Error("вопрос с пустым кодом сохранился") + } + } +} diff --git a/migrations/20260831120000_create_team_answers_table.sql b/migrations/20260831120000_create_team_answers_table.sql new file mode 100644 index 0000000..c079785 --- /dev/null +++ b/migrations/20260831120000_create_team_answers_table.sql @@ -0,0 +1,17 @@ +-- +goose Up +CREATE TABLE + IF NOT EXISTS team_answers ( + id SERIAL PRIMARY KEY, + team_id INTEGER NOT NULL, + question_code TEXT NOT NULL, + answer TEXT NOT NULL DEFAULT '', + score INTEGER, + created_at TIMESTAMP NOT NULL DEFAULT NOW (), + updated_at TIMESTAMP NOT NULL DEFAULT NOW (), + + CONSTRAINT fk_team_answers_team FOREIGN KEY (team_id) REFERENCES teams (id) ON DELETE CASCADE, + CONSTRAINT uq_team_answer UNIQUE (team_id, question_code) + ); + +-- +goose Down +DROP TABLE IF EXISTS team_answers; diff --git a/proto/main.pb.go b/proto/main.pb.go index 0722c10..d706b82 100644 --- a/proto/main.pb.go +++ b/proto/main.pb.go @@ -2233,6 +2233,7 @@ type Story struct { state protoimpl.MessageState `protogen:"open.v1"` Introduction *Introduction `protobuf:"bytes,2,opt,name=introduction,proto3" json:"introduction,omitempty"` Places []*Place `protobuf:"bytes,1,rep,name=places,proto3" json:"places,omitempty"` + Questions []*Question `protobuf:"bytes,3,rep,name=questions,proto3" json:"questions,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -2281,6 +2282,13 @@ func (x *Story) GetPlaces() []*Place { return nil } +func (x *Story) GetQuestions() []*Question { + if x != nil { + return x.Questions + } + return nil +} + type Introduction struct { state protoimpl.MessageState `protogen:"open.v1"` Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` @@ -2439,9 +2447,7 @@ type Application struct { Image string `protobuf:"bytes,2,opt,name=image,proto3" json:"image,omitempty"` // Тип файла улики: image | pdf | audio. Значение выводится сервером из // расширения файла (см. file_storage.FileType); пустое значение возможно - // только для legacy-строк без расширения. Явный json_name — осознанное - // отклонение от camelCase-конвенции REST (единый snake_case с внутренним - // JSON истории). + // только для legacy-строк без расширения. FileType string `protobuf:"bytes,3,opt,name=file_type,proto3" json:"file_type,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -2602,6 +2608,242 @@ func (x *Key) GetName() string { return "" } +// Вопрос дела - вопрос, на который команда должна ответить в конце игры. +// Правильный ответ (answer) виден только автору сценария и организаторам +// (при оценке ответов команд), команде не передаётся. +type Question struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Код вопроса - используется при отправке ответов командой + Code string `protobuf:"bytes,1,opt,name=code,proto3" json:"code,omitempty"` + // Текст вопроса + Text string `protobuf:"bytes,2,opt,name=text,proto3" json:"text,omitempty"` + // Правильный ответ (справка для организатора при оценке) + Answer string `protobuf:"bytes,3,opt,name=answer,proto3" json:"answer,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Question) Reset() { + *x = Question{} + mi := &file_main_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Question) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Question) ProtoMessage() {} + +func (x *Question) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[51] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Question.ProtoReflect.Descriptor instead. +func (*Question) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{51} +} + +func (x *Question) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *Question) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +func (x *Question) GetAnswer() string { + if x != nil { + return x.Answer + } + return "" +} + +// Ответ команды на вопрос дела +type Answer struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Код вопроса + QuestionCode string `protobuf:"bytes,1,opt,name=questionCode,proto3" json:"questionCode,omitempty"` + // Текст ответа команды + Answer string `protobuf:"bytes,2,opt,name=answer,proto3" json:"answer,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Answer) Reset() { + *x = Answer{} + mi := &file_main_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Answer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Answer) ProtoMessage() {} + +func (x *Answer) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[52] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Answer.ProtoReflect.Descriptor instead. +func (*Answer) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{52} +} + +func (x *Answer) GetQuestionCode() string { + if x != nil { + return x.QuestionCode + } + return "" +} + +func (x *Answer) GetAnswer() string { + if x != nil { + return x.Answer + } + return "" +} + +// Ответ команды с баллом (для панели организатора) +type AnswerScore struct { + state protoimpl.MessageState `protogen:"open.v1"` + QuestionCode string `protobuf:"bytes,1,opt,name=questionCode,proto3" json:"questionCode,omitempty"` + Answer string `protobuf:"bytes,2,opt,name=answer,proto3" json:"answer,omitempty"` + // Балл, выставленный организатором; отсутствует, если ещё не оценено + Score *int32 `protobuf:"varint,3,opt,name=score,proto3,oneof" json:"score,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AnswerScore) Reset() { + *x = AnswerScore{} + mi := &file_main_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AnswerScore) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AnswerScore) ProtoMessage() {} + +func (x *AnswerScore) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[53] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AnswerScore.ProtoReflect.Descriptor instead. +func (*AnswerScore) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{53} +} + +func (x *AnswerScore) GetQuestionCode() string { + if x != nil { + return x.QuestionCode + } + return "" +} + +func (x *AnswerScore) GetAnswer() string { + if x != nil { + return x.Answer + } + return "" +} + +func (x *AnswerScore) GetScore() int32 { + if x != nil && x.Score != nil { + return *x.Score + } + return 0 +} + +// Ответы одной команды на вопросы дела +type TeamAnswers struct { + state protoimpl.MessageState `protogen:"open.v1"` + Team *Team `protobuf:"bytes,1,opt,name=team,proto3" json:"team,omitempty"` + Answers []*AnswerScore `protobuf:"bytes,2,rep,name=answers,proto3" json:"answers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TeamAnswers) Reset() { + *x = TeamAnswers{} + mi := &file_main_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TeamAnswers) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamAnswers) ProtoMessage() {} + +func (x *TeamAnswers) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[54] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TeamAnswers.ProtoReflect.Descriptor instead. +func (*TeamAnswers) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{54} +} + +func (x *TeamAnswers) GetTeam() *Team { + if x != nil { + return x.Team + } + return nil +} + +func (x *TeamAnswers) GetAnswers() []*AnswerScore { + if x != nil { + return x.Answers + } + return nil +} + type UpdateScenarioReq struct { state protoimpl.MessageState `protogen:"open.v1"` Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` @@ -2614,7 +2856,7 @@ type UpdateScenarioReq struct { func (x *UpdateScenarioReq) Reset() { *x = UpdateScenarioReq{} - mi := &file_main_proto_msgTypes[51] + mi := &file_main_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2626,7 +2868,7 @@ func (x *UpdateScenarioReq) String() string { func (*UpdateScenarioReq) ProtoMessage() {} func (x *UpdateScenarioReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[51] + mi := &file_main_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2639,7 +2881,7 @@ func (x *UpdateScenarioReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioReq.ProtoReflect.Descriptor instead. func (*UpdateScenarioReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{51} + return file_main_proto_rawDescGZIP(), []int{55} } func (x *UpdateScenarioReq) GetId() int32 { @@ -2679,7 +2921,7 @@ type UpdateScenarioRsp struct { func (x *UpdateScenarioRsp) Reset() { *x = UpdateScenarioRsp{} - mi := &file_main_proto_msgTypes[52] + mi := &file_main_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2691,7 +2933,7 @@ func (x *UpdateScenarioRsp) String() string { func (*UpdateScenarioRsp) ProtoMessage() {} func (x *UpdateScenarioRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[52] + mi := &file_main_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2704,7 +2946,7 @@ func (x *UpdateScenarioRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioRsp.ProtoReflect.Descriptor instead. func (*UpdateScenarioRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{52} + return file_main_proto_rawDescGZIP(), []int{56} } func (x *UpdateScenarioRsp) GetError() string { @@ -2723,7 +2965,7 @@ type PublicScenarioReq struct { func (x *PublicScenarioReq) Reset() { *x = PublicScenarioReq{} - mi := &file_main_proto_msgTypes[53] + mi := &file_main_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2735,7 +2977,7 @@ func (x *PublicScenarioReq) String() string { func (*PublicScenarioReq) ProtoMessage() {} func (x *PublicScenarioReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[53] + mi := &file_main_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2748,7 +2990,7 @@ func (x *PublicScenarioReq) ProtoReflect() protoreflect.Message { // Deprecated: Use PublicScenarioReq.ProtoReflect.Descriptor instead. func (*PublicScenarioReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{53} + return file_main_proto_rawDescGZIP(), []int{57} } func (x *PublicScenarioReq) GetId() int32 { @@ -2767,7 +3009,7 @@ type PublicScenarioRsp struct { func (x *PublicScenarioRsp) Reset() { *x = PublicScenarioRsp{} - mi := &file_main_proto_msgTypes[54] + mi := &file_main_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2779,7 +3021,7 @@ func (x *PublicScenarioRsp) String() string { func (*PublicScenarioRsp) ProtoMessage() {} func (x *PublicScenarioRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[54] + mi := &file_main_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2792,7 +3034,7 @@ func (x *PublicScenarioRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use PublicScenarioRsp.ProtoReflect.Descriptor instead. func (*PublicScenarioRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{54} + return file_main_proto_rawDescGZIP(), []int{58} } func (x *PublicScenarioRsp) GetError() string { @@ -2811,7 +3053,7 @@ type DraftScenarioReq struct { func (x *DraftScenarioReq) Reset() { *x = DraftScenarioReq{} - mi := &file_main_proto_msgTypes[55] + mi := &file_main_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2823,7 +3065,7 @@ func (x *DraftScenarioReq) String() string { func (*DraftScenarioReq) ProtoMessage() {} func (x *DraftScenarioReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[55] + mi := &file_main_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2836,7 +3078,7 @@ func (x *DraftScenarioReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DraftScenarioReq.ProtoReflect.Descriptor instead. func (*DraftScenarioReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{55} + return file_main_proto_rawDescGZIP(), []int{59} } func (x *DraftScenarioReq) GetId() int32 { @@ -2855,7 +3097,7 @@ type DraftScenarioRsp struct { func (x *DraftScenarioRsp) Reset() { *x = DraftScenarioRsp{} - mi := &file_main_proto_msgTypes[56] + mi := &file_main_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2867,7 +3109,7 @@ func (x *DraftScenarioRsp) String() string { func (*DraftScenarioRsp) ProtoMessage() {} func (x *DraftScenarioRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[56] + mi := &file_main_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2880,7 +3122,7 @@ func (x *DraftScenarioRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DraftScenarioRsp.ProtoReflect.Descriptor instead. func (*DraftScenarioRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{56} + return file_main_proto_rawDescGZIP(), []int{60} } func (x *DraftScenarioRsp) GetError() string { @@ -2899,7 +3141,7 @@ type DeleteScenarioReq struct { func (x *DeleteScenarioReq) Reset() { *x = DeleteScenarioReq{} - mi := &file_main_proto_msgTypes[57] + mi := &file_main_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2911,7 +3153,7 @@ func (x *DeleteScenarioReq) String() string { func (*DeleteScenarioReq) ProtoMessage() {} func (x *DeleteScenarioReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[57] + mi := &file_main_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2924,7 +3166,7 @@ func (x *DeleteScenarioReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteScenarioReq.ProtoReflect.Descriptor instead. func (*DeleteScenarioReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{57} + return file_main_proto_rawDescGZIP(), []int{61} } func (x *DeleteScenarioReq) GetId() int32 { @@ -2943,7 +3185,7 @@ type DeleteScenarioRsp struct { func (x *DeleteScenarioRsp) Reset() { *x = DeleteScenarioRsp{} - mi := &file_main_proto_msgTypes[58] + mi := &file_main_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2955,7 +3197,7 @@ func (x *DeleteScenarioRsp) String() string { func (*DeleteScenarioRsp) ProtoMessage() {} func (x *DeleteScenarioRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[58] + mi := &file_main_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2968,7 +3210,7 @@ func (x *DeleteScenarioRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteScenarioRsp.ProtoReflect.Descriptor instead. func (*DeleteScenarioRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{58} + return file_main_proto_rawDescGZIP(), []int{62} } func (x *DeleteScenarioRsp) GetError() string { @@ -2988,7 +3230,7 @@ type AddScenarioPlaceReq struct { func (x *AddScenarioPlaceReq) Reset() { *x = AddScenarioPlaceReq{} - mi := &file_main_proto_msgTypes[59] + mi := &file_main_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3000,7 +3242,7 @@ func (x *AddScenarioPlaceReq) String() string { func (*AddScenarioPlaceReq) ProtoMessage() {} func (x *AddScenarioPlaceReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[59] + mi := &file_main_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3013,7 +3255,7 @@ func (x *AddScenarioPlaceReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddScenarioPlaceReq.ProtoReflect.Descriptor instead. func (*AddScenarioPlaceReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{59} + return file_main_proto_rawDescGZIP(), []int{63} } func (x *AddScenarioPlaceReq) GetId() int32 { @@ -3039,7 +3281,7 @@ type AddScenarioPlaceRsp struct { func (x *AddScenarioPlaceRsp) Reset() { *x = AddScenarioPlaceRsp{} - mi := &file_main_proto_msgTypes[60] + mi := &file_main_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3051,7 +3293,7 @@ func (x *AddScenarioPlaceRsp) String() string { func (*AddScenarioPlaceRsp) ProtoMessage() {} func (x *AddScenarioPlaceRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[60] + mi := &file_main_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3064,7 +3306,7 @@ func (x *AddScenarioPlaceRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddScenarioPlaceRsp.ProtoReflect.Descriptor instead. func (*AddScenarioPlaceRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{60} + return file_main_proto_rawDescGZIP(), []int{64} } func (x *AddScenarioPlaceRsp) GetError() string { @@ -3085,7 +3327,7 @@ type UpdateScenarioPlaceReq struct { func (x *UpdateScenarioPlaceReq) Reset() { *x = UpdateScenarioPlaceReq{} - mi := &file_main_proto_msgTypes[61] + mi := &file_main_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3097,7 +3339,7 @@ func (x *UpdateScenarioPlaceReq) String() string { func (*UpdateScenarioPlaceReq) ProtoMessage() {} func (x *UpdateScenarioPlaceReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[61] + mi := &file_main_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3110,7 +3352,7 @@ func (x *UpdateScenarioPlaceReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioPlaceReq.ProtoReflect.Descriptor instead. func (*UpdateScenarioPlaceReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{61} + return file_main_proto_rawDescGZIP(), []int{65} } func (x *UpdateScenarioPlaceReq) GetId() int32 { @@ -3143,7 +3385,7 @@ type UpdateScenarioPlaceRsp struct { func (x *UpdateScenarioPlaceRsp) Reset() { *x = UpdateScenarioPlaceRsp{} - mi := &file_main_proto_msgTypes[62] + mi := &file_main_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3155,7 +3397,7 @@ func (x *UpdateScenarioPlaceRsp) String() string { func (*UpdateScenarioPlaceRsp) ProtoMessage() {} func (x *UpdateScenarioPlaceRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[62] + mi := &file_main_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3168,7 +3410,7 @@ func (x *UpdateScenarioPlaceRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioPlaceRsp.ProtoReflect.Descriptor instead. func (*UpdateScenarioPlaceRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{62} + return file_main_proto_rawDescGZIP(), []int{66} } func (x *UpdateScenarioPlaceRsp) GetError() string { @@ -3188,7 +3430,7 @@ type DeleteScenarioPlaceReq struct { func (x *DeleteScenarioPlaceReq) Reset() { *x = DeleteScenarioPlaceReq{} - mi := &file_main_proto_msgTypes[63] + mi := &file_main_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3200,7 +3442,7 @@ func (x *DeleteScenarioPlaceReq) String() string { func (*DeleteScenarioPlaceReq) ProtoMessage() {} func (x *DeleteScenarioPlaceReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[63] + mi := &file_main_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3213,7 +3455,7 @@ func (x *DeleteScenarioPlaceReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteScenarioPlaceReq.ProtoReflect.Descriptor instead. func (*DeleteScenarioPlaceReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{63} + return file_main_proto_rawDescGZIP(), []int{67} } func (x *DeleteScenarioPlaceReq) GetId() int32 { @@ -3239,7 +3481,7 @@ type DeleteScenarioPlaceRsp struct { func (x *DeleteScenarioPlaceRsp) Reset() { *x = DeleteScenarioPlaceRsp{} - mi := &file_main_proto_msgTypes[64] + mi := &file_main_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3251,7 +3493,7 @@ func (x *DeleteScenarioPlaceRsp) String() string { func (*DeleteScenarioPlaceRsp) ProtoMessage() {} func (x *DeleteScenarioPlaceRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[64] + mi := &file_main_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3264,7 +3506,7 @@ func (x *DeleteScenarioPlaceRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteScenarioPlaceRsp.ProtoReflect.Descriptor instead. func (*DeleteScenarioPlaceRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{64} + return file_main_proto_rawDescGZIP(), []int{68} } func (x *DeleteScenarioPlaceRsp) GetError() string { @@ -3284,7 +3526,7 @@ type UpdateScenarioIntroReq struct { func (x *UpdateScenarioIntroReq) Reset() { *x = UpdateScenarioIntroReq{} - mi := &file_main_proto_msgTypes[65] + mi := &file_main_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3296,7 +3538,7 @@ func (x *UpdateScenarioIntroReq) String() string { func (*UpdateScenarioIntroReq) ProtoMessage() {} func (x *UpdateScenarioIntroReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[65] + mi := &file_main_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3309,7 +3551,7 @@ func (x *UpdateScenarioIntroReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioIntroReq.ProtoReflect.Descriptor instead. func (*UpdateScenarioIntroReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{65} + return file_main_proto_rawDescGZIP(), []int{69} } func (x *UpdateScenarioIntroReq) GetId() int32 { @@ -3335,7 +3577,7 @@ type UpdateScenarioIntroRsp struct { func (x *UpdateScenarioIntroRsp) Reset() { *x = UpdateScenarioIntroRsp{} - mi := &file_main_proto_msgTypes[66] + mi := &file_main_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3347,7 +3589,7 @@ func (x *UpdateScenarioIntroRsp) String() string { func (*UpdateScenarioIntroRsp) ProtoMessage() {} func (x *UpdateScenarioIntroRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[66] + mi := &file_main_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3360,7 +3602,7 @@ func (x *UpdateScenarioIntroRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateScenarioIntroRsp.ProtoReflect.Descriptor instead. func (*UpdateScenarioIntroRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{66} + return file_main_proto_rawDescGZIP(), []int{70} } func (x *UpdateScenarioIntroRsp) GetError() string { @@ -3370,6 +3612,302 @@ func (x *UpdateScenarioIntroRsp) GetError() string { return "" } +type AddScenarioQuestionReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Question *Question `protobuf:"bytes,2,opt,name=question,proto3" json:"question,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AddScenarioQuestionReq) Reset() { + *x = AddScenarioQuestionReq{} + mi := &file_main_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AddScenarioQuestionReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddScenarioQuestionReq) ProtoMessage() {} + +func (x *AddScenarioQuestionReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[71] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddScenarioQuestionReq.ProtoReflect.Descriptor instead. +func (*AddScenarioQuestionReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{71} +} + +func (x *AddScenarioQuestionReq) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *AddScenarioQuestionReq) GetQuestion() *Question { + if x != nil { + return x.Question + } + return nil +} + +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 +} + +func (x *AddScenarioQuestionRsp) Reset() { + *x = AddScenarioQuestionRsp{} + mi := &file_main_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AddScenarioQuestionRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddScenarioQuestionRsp) ProtoMessage() {} + +func (x *AddScenarioQuestionRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[72] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddScenarioQuestionRsp.ProtoReflect.Descriptor instead. +func (*AddScenarioQuestionRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{72} +} + +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"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + Question *Question `protobuf:"bytes,3,opt,name=question,proto3" json:"question,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateScenarioQuestionReq) Reset() { + *x = UpdateScenarioQuestionReq{} + mi := &file_main_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateScenarioQuestionReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateScenarioQuestionReq) ProtoMessage() {} + +func (x *UpdateScenarioQuestionReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[73] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateScenarioQuestionReq.ProtoReflect.Descriptor instead. +func (*UpdateScenarioQuestionReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{73} +} + +func (x *UpdateScenarioQuestionReq) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *UpdateScenarioQuestionReq) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *UpdateScenarioQuestionReq) GetQuestion() *Question { + if x != nil { + return x.Question + } + return nil +} + +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 +} + +func (x *UpdateScenarioQuestionRsp) Reset() { + *x = UpdateScenarioQuestionRsp{} + mi := &file_main_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateScenarioQuestionRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateScenarioQuestionRsp) ProtoMessage() {} + +func (x *UpdateScenarioQuestionRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[74] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateScenarioQuestionRsp.ProtoReflect.Descriptor instead. +func (*UpdateScenarioQuestionRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{74} +} + +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"` + Code string `protobuf:"bytes,2,opt,name=code,proto3" json:"code,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteScenarioQuestionReq) Reset() { + *x = DeleteScenarioQuestionReq{} + mi := &file_main_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteScenarioQuestionReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteScenarioQuestionReq) ProtoMessage() {} + +func (x *DeleteScenarioQuestionReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[75] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteScenarioQuestionReq.ProtoReflect.Descriptor instead. +func (*DeleteScenarioQuestionReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{75} +} + +func (x *DeleteScenarioQuestionReq) GetId() int32 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *DeleteScenarioQuestionReq) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +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 +} + +func (x *DeleteScenarioQuestionRsp) Reset() { + *x = DeleteScenarioQuestionRsp{} + mi := &file_main_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteScenarioQuestionRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteScenarioQuestionRsp) ProtoMessage() {} + +func (x *DeleteScenarioQuestionRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[76] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteScenarioQuestionRsp.ProtoReflect.Descriptor instead. +func (*DeleteScenarioQuestionRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{76} +} + +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"` @@ -3379,7 +3917,7 @@ type DownloadScenarioArchiveReq struct { func (x *DownloadScenarioArchiveReq) Reset() { *x = DownloadScenarioArchiveReq{} - mi := &file_main_proto_msgTypes[67] + mi := &file_main_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3391,7 +3929,7 @@ func (x *DownloadScenarioArchiveReq) String() string { func (*DownloadScenarioArchiveReq) ProtoMessage() {} func (x *DownloadScenarioArchiveReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[67] + mi := &file_main_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3404,7 +3942,7 @@ func (x *DownloadScenarioArchiveReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DownloadScenarioArchiveReq.ProtoReflect.Descriptor instead. func (*DownloadScenarioArchiveReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{67} + return file_main_proto_rawDescGZIP(), []int{77} } func (x *DownloadScenarioArchiveReq) GetId() int32 { @@ -3424,7 +3962,7 @@ type UploadScenarioArchiveRsp struct { func (x *UploadScenarioArchiveRsp) Reset() { *x = UploadScenarioArchiveRsp{} - mi := &file_main_proto_msgTypes[68] + mi := &file_main_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3436,7 +3974,7 @@ func (x *UploadScenarioArchiveRsp) String() string { func (*UploadScenarioArchiveRsp) ProtoMessage() {} func (x *UploadScenarioArchiveRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[68] + mi := &file_main_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3449,7 +3987,7 @@ func (x *UploadScenarioArchiveRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadScenarioArchiveRsp.ProtoReflect.Descriptor instead. func (*UploadScenarioArchiveRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{68} + return file_main_proto_rawDescGZIP(), []int{78} } func (x *UploadScenarioArchiveRsp) GetError() string { @@ -3478,7 +4016,7 @@ type AddGameReq struct { func (x *AddGameReq) Reset() { *x = AddGameReq{} - mi := &file_main_proto_msgTypes[69] + mi := &file_main_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3490,7 +4028,7 @@ func (x *AddGameReq) String() string { func (*AddGameReq) ProtoMessage() {} func (x *AddGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[69] + mi := &file_main_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3503,7 +4041,7 @@ func (x *AddGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddGameReq.ProtoReflect.Descriptor instead. func (*AddGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{69} + return file_main_proto_rawDescGZIP(), []int{79} } func (x *AddGameReq) GetName() string { @@ -3544,7 +4082,7 @@ type AddGameRsp struct { func (x *AddGameRsp) Reset() { *x = AddGameRsp{} - mi := &file_main_proto_msgTypes[70] + mi := &file_main_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3556,7 +4094,7 @@ func (x *AddGameRsp) String() string { func (*AddGameRsp) ProtoMessage() {} func (x *AddGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[70] + mi := &file_main_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3569,7 +4107,7 @@ func (x *AddGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddGameRsp.ProtoReflect.Descriptor instead. func (*AddGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{70} + return file_main_proto_rawDescGZIP(), []int{80} } func (x *AddGameRsp) GetError() string { @@ -3594,7 +4132,7 @@ type GetGamesReq struct { func (x *GetGamesReq) Reset() { *x = GetGamesReq{} - mi := &file_main_proto_msgTypes[71] + mi := &file_main_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3606,7 +4144,7 @@ func (x *GetGamesReq) String() string { func (*GetGamesReq) ProtoMessage() {} func (x *GetGamesReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[71] + mi := &file_main_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3619,7 +4157,7 @@ func (x *GetGamesReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGamesReq.ProtoReflect.Descriptor instead. func (*GetGamesReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{71} + return file_main_proto_rawDescGZIP(), []int{81} } type GetGamesRsp struct { @@ -3632,7 +4170,7 @@ type GetGamesRsp struct { func (x *GetGamesRsp) Reset() { *x = GetGamesRsp{} - mi := &file_main_proto_msgTypes[72] + mi := &file_main_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3644,7 +4182,7 @@ func (x *GetGamesRsp) String() string { func (*GetGamesRsp) ProtoMessage() {} func (x *GetGamesRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[72] + mi := &file_main_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3657,7 +4195,7 @@ func (x *GetGamesRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGamesRsp.ProtoReflect.Descriptor instead. func (*GetGamesRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{72} + return file_main_proto_rawDescGZIP(), []int{82} } func (x *GetGamesRsp) GetError() string { @@ -3691,7 +4229,7 @@ type Game struct { func (x *Game) Reset() { *x = Game{} - mi := &file_main_proto_msgTypes[73] + mi := &file_main_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3703,7 +4241,7 @@ func (x *Game) String() string { func (*Game) ProtoMessage() {} func (x *Game) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[73] + mi := &file_main_proto_msgTypes[83] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3716,7 +4254,7 @@ func (x *Game) ProtoReflect() protoreflect.Message { // Deprecated: Use Game.ProtoReflect.Descriptor instead. func (*Game) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{73} + return file_main_proto_rawDescGZIP(), []int{83} } func (x *Game) GetId() int32 { @@ -3796,7 +4334,7 @@ type Team struct { func (x *Team) Reset() { *x = Team{} - mi := &file_main_proto_msgTypes[74] + mi := &file_main_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3808,7 +4346,7 @@ func (x *Team) String() string { func (*Team) ProtoMessage() {} func (x *Team) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[74] + mi := &file_main_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3821,7 +4359,7 @@ func (x *Team) ProtoReflect() protoreflect.Message { // Deprecated: Use Team.ProtoReflect.Descriptor instead. func (*Team) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{74} + return file_main_proto_rawDescGZIP(), []int{84} } func (x *Team) GetId() int32 { @@ -3875,7 +4413,7 @@ type GetGameReq struct { func (x *GetGameReq) Reset() { *x = GetGameReq{} - mi := &file_main_proto_msgTypes[75] + mi := &file_main_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3887,7 +4425,7 @@ func (x *GetGameReq) String() string { func (*GetGameReq) ProtoMessage() {} func (x *GetGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[75] + mi := &file_main_proto_msgTypes[85] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3900,7 +4438,7 @@ func (x *GetGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameReq.ProtoReflect.Descriptor instead. func (*GetGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{75} + return file_main_proto_rawDescGZIP(), []int{85} } func (x *GetGameReq) GetId() int32 { @@ -3920,7 +4458,7 @@ type GetGameRsp struct { func (x *GetGameRsp) Reset() { *x = GetGameRsp{} - mi := &file_main_proto_msgTypes[76] + mi := &file_main_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3932,7 +4470,7 @@ func (x *GetGameRsp) String() string { func (*GetGameRsp) ProtoMessage() {} func (x *GetGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[76] + mi := &file_main_proto_msgTypes[86] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3945,7 +4483,7 @@ func (x *GetGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGameRsp.ProtoReflect.Descriptor instead. func (*GetGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{76} + return file_main_proto_rawDescGZIP(), []int{86} } func (x *GetGameRsp) GetError() string { @@ -3962,6 +4500,110 @@ func (x *GetGameRsp) GetGame() *Game { return nil } +type GetGameAnswersReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + GameId int32 `protobuf:"varint,1,opt,name=gameId,proto3" json:"gameId,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetGameAnswersReq) Reset() { + *x = GetGameAnswersReq{} + mi := &file_main_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetGameAnswersReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGameAnswersReq) ProtoMessage() {} + +func (x *GetGameAnswersReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[87] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGameAnswersReq.ProtoReflect.Descriptor instead. +func (*GetGameAnswersReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{87} +} + +func (x *GetGameAnswersReq) GetGameId() int32 { + if x != nil { + return x.GameId + } + return 0 +} + +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"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetGameAnswersRsp) Reset() { + *x = GetGameAnswersRsp{} + mi := &file_main_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetGameAnswersRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGameAnswersRsp) ProtoMessage() {} + +func (x *GetGameAnswersRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[88] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetGameAnswersRsp.ProtoReflect.Descriptor instead. +func (*GetGameAnswersRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{88} +} + +func (x *GetGameAnswersRsp) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +func (x *GetGameAnswersRsp) GetQuestions() []*Question { + if x != nil { + return x.Questions + } + return nil +} + +func (x *GetGameAnswersRsp) GetTeams() []*TeamAnswers { + if x != nil { + return x.Teams + } + return nil +} + type UpdateGameReq struct { state protoimpl.MessageState `protogen:"open.v1"` Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` @@ -3975,7 +4617,7 @@ type UpdateGameReq struct { func (x *UpdateGameReq) Reset() { *x = UpdateGameReq{} - mi := &file_main_proto_msgTypes[77] + mi := &file_main_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3987,7 +4629,7 @@ func (x *UpdateGameReq) String() string { func (*UpdateGameReq) ProtoMessage() {} func (x *UpdateGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[77] + mi := &file_main_proto_msgTypes[89] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4000,7 +4642,7 @@ func (x *UpdateGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGameReq.ProtoReflect.Descriptor instead. func (*UpdateGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{77} + return file_main_proto_rawDescGZIP(), []int{89} } func (x *UpdateGameReq) GetId() int32 { @@ -4047,7 +4689,7 @@ type UpdateGameRsp struct { func (x *UpdateGameRsp) Reset() { *x = UpdateGameRsp{} - mi := &file_main_proto_msgTypes[78] + mi := &file_main_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4059,7 +4701,7 @@ func (x *UpdateGameRsp) String() string { func (*UpdateGameRsp) ProtoMessage() {} func (x *UpdateGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[78] + mi := &file_main_proto_msgTypes[90] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4072,7 +4714,7 @@ func (x *UpdateGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGameRsp.ProtoReflect.Descriptor instead. func (*UpdateGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{78} + return file_main_proto_rawDescGZIP(), []int{90} } func (x *UpdateGameRsp) GetError() string { @@ -4091,7 +4733,7 @@ type StartGameReq struct { func (x *StartGameReq) Reset() { *x = StartGameReq{} - mi := &file_main_proto_msgTypes[79] + mi := &file_main_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4103,7 +4745,7 @@ func (x *StartGameReq) String() string { func (*StartGameReq) ProtoMessage() {} func (x *StartGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[79] + mi := &file_main_proto_msgTypes[91] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4116,7 +4758,7 @@ func (x *StartGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use StartGameReq.ProtoReflect.Descriptor instead. func (*StartGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{79} + return file_main_proto_rawDescGZIP(), []int{91} } func (x *StartGameReq) GetId() int32 { @@ -4135,7 +4777,7 @@ type StartGameRsp struct { func (x *StartGameRsp) Reset() { *x = StartGameRsp{} - mi := &file_main_proto_msgTypes[80] + mi := &file_main_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4147,7 +4789,7 @@ func (x *StartGameRsp) String() string { func (*StartGameRsp) ProtoMessage() {} func (x *StartGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[80] + mi := &file_main_proto_msgTypes[92] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4160,7 +4802,7 @@ func (x *StartGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use StartGameRsp.ProtoReflect.Descriptor instead. func (*StartGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{80} + return file_main_proto_rawDescGZIP(), []int{92} } func (x *StartGameRsp) GetError() string { @@ -4179,7 +4821,7 @@ type PauseGameReq struct { func (x *PauseGameReq) Reset() { *x = PauseGameReq{} - mi := &file_main_proto_msgTypes[81] + mi := &file_main_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4191,7 +4833,7 @@ func (x *PauseGameReq) String() string { func (*PauseGameReq) ProtoMessage() {} func (x *PauseGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[81] + mi := &file_main_proto_msgTypes[93] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4204,7 +4846,7 @@ func (x *PauseGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use PauseGameReq.ProtoReflect.Descriptor instead. func (*PauseGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{81} + return file_main_proto_rawDescGZIP(), []int{93} } func (x *PauseGameReq) GetId() int32 { @@ -4223,7 +4865,7 @@ type PauseGameRsp struct { func (x *PauseGameRsp) Reset() { *x = PauseGameRsp{} - mi := &file_main_proto_msgTypes[82] + mi := &file_main_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4235,7 +4877,7 @@ func (x *PauseGameRsp) String() string { func (*PauseGameRsp) ProtoMessage() {} func (x *PauseGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[82] + mi := &file_main_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4248,7 +4890,7 @@ func (x *PauseGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use PauseGameRsp.ProtoReflect.Descriptor instead. func (*PauseGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{82} + return file_main_proto_rawDescGZIP(), []int{94} } func (x *PauseGameRsp) GetError() string { @@ -4267,7 +4909,7 @@ type PlayGameReq struct { func (x *PlayGameReq) Reset() { *x = PlayGameReq{} - mi := &file_main_proto_msgTypes[83] + mi := &file_main_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4279,7 +4921,7 @@ func (x *PlayGameReq) String() string { func (*PlayGameReq) ProtoMessage() {} func (x *PlayGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[83] + mi := &file_main_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4292,7 +4934,7 @@ func (x *PlayGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayGameReq.ProtoReflect.Descriptor instead. func (*PlayGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{83} + return file_main_proto_rawDescGZIP(), []int{95} } func (x *PlayGameReq) GetId() int32 { @@ -4311,7 +4953,7 @@ type PlayGameRsp struct { func (x *PlayGameRsp) Reset() { *x = PlayGameRsp{} - mi := &file_main_proto_msgTypes[84] + mi := &file_main_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4323,7 +4965,7 @@ func (x *PlayGameRsp) String() string { func (*PlayGameRsp) ProtoMessage() {} func (x *PlayGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[84] + mi := &file_main_proto_msgTypes[96] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4336,7 +4978,7 @@ func (x *PlayGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayGameRsp.ProtoReflect.Descriptor instead. func (*PlayGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{84} + return file_main_proto_rawDescGZIP(), []int{96} } func (x *PlayGameRsp) GetError() string { @@ -4355,7 +4997,7 @@ type FinishGameReq struct { func (x *FinishGameReq) Reset() { *x = FinishGameReq{} - mi := &file_main_proto_msgTypes[85] + mi := &file_main_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4367,7 +5009,7 @@ func (x *FinishGameReq) String() string { func (*FinishGameReq) ProtoMessage() {} func (x *FinishGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[85] + mi := &file_main_proto_msgTypes[97] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4380,7 +5022,7 @@ func (x *FinishGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use FinishGameReq.ProtoReflect.Descriptor instead. func (*FinishGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{85} + return file_main_proto_rawDescGZIP(), []int{97} } func (x *FinishGameReq) GetId() int32 { @@ -4399,7 +5041,7 @@ type FinishGameRsp struct { func (x *FinishGameRsp) Reset() { *x = FinishGameRsp{} - mi := &file_main_proto_msgTypes[86] + mi := &file_main_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4411,7 +5053,7 @@ func (x *FinishGameRsp) String() string { func (*FinishGameRsp) ProtoMessage() {} func (x *FinishGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[86] + mi := &file_main_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4424,7 +5066,7 @@ func (x *FinishGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use FinishGameRsp.ProtoReflect.Descriptor instead. func (*FinishGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{86} + return file_main_proto_rawDescGZIP(), []int{98} } func (x *FinishGameRsp) GetError() string { @@ -4443,7 +5085,7 @@ type ResetGameReq struct { func (x *ResetGameReq) Reset() { *x = ResetGameReq{} - mi := &file_main_proto_msgTypes[87] + mi := &file_main_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4455,7 +5097,7 @@ func (x *ResetGameReq) String() string { func (*ResetGameReq) ProtoMessage() {} func (x *ResetGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[87] + mi := &file_main_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4468,7 +5110,7 @@ func (x *ResetGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetGameReq.ProtoReflect.Descriptor instead. func (*ResetGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{87} + return file_main_proto_rawDescGZIP(), []int{99} } func (x *ResetGameReq) GetId() int32 { @@ -4487,7 +5129,7 @@ type ResetGameRsp struct { func (x *ResetGameRsp) Reset() { *x = ResetGameRsp{} - mi := &file_main_proto_msgTypes[88] + mi := &file_main_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4499,7 +5141,7 @@ func (x *ResetGameRsp) String() string { func (*ResetGameRsp) ProtoMessage() {} func (x *ResetGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[88] + mi := &file_main_proto_msgTypes[100] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4512,7 +5154,7 @@ func (x *ResetGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetGameRsp.ProtoReflect.Descriptor instead. func (*ResetGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{88} + return file_main_proto_rawDescGZIP(), []int{100} } func (x *ResetGameRsp) GetError() string { @@ -4531,7 +5173,7 @@ type DeleteGameReq struct { func (x *DeleteGameReq) Reset() { *x = DeleteGameReq{} - mi := &file_main_proto_msgTypes[89] + mi := &file_main_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4543,7 +5185,7 @@ func (x *DeleteGameReq) String() string { func (*DeleteGameReq) ProtoMessage() {} func (x *DeleteGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[89] + mi := &file_main_proto_msgTypes[101] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4556,7 +5198,7 @@ func (x *DeleteGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteGameReq.ProtoReflect.Descriptor instead. func (*DeleteGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{89} + return file_main_proto_rawDescGZIP(), []int{101} } func (x *DeleteGameReq) GetId() int32 { @@ -4575,7 +5217,7 @@ type DeleteGameRsp struct { func (x *DeleteGameRsp) Reset() { *x = DeleteGameRsp{} - mi := &file_main_proto_msgTypes[90] + mi := &file_main_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4587,7 +5229,7 @@ func (x *DeleteGameRsp) String() string { func (*DeleteGameRsp) ProtoMessage() {} func (x *DeleteGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[90] + mi := &file_main_proto_msgTypes[102] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4600,7 +5242,7 @@ func (x *DeleteGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteGameRsp.ProtoReflect.Descriptor instead. func (*DeleteGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{90} + return file_main_proto_rawDescGZIP(), []int{102} } func (x *DeleteGameRsp) GetError() string { @@ -4620,7 +5262,7 @@ type AddTeamReq struct { func (x *AddTeamReq) Reset() { *x = AddTeamReq{} - mi := &file_main_proto_msgTypes[91] + mi := &file_main_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4632,7 +5274,7 @@ func (x *AddTeamReq) String() string { func (*AddTeamReq) ProtoMessage() {} func (x *AddTeamReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[91] + mi := &file_main_proto_msgTypes[103] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4645,7 +5287,7 @@ func (x *AddTeamReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamReq.ProtoReflect.Descriptor instead. func (*AddTeamReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{91} + return file_main_proto_rawDescGZIP(), []int{103} } func (x *AddTeamReq) GetGameId() int32 { @@ -4673,7 +5315,7 @@ type AddTeamRsp struct { func (x *AddTeamRsp) Reset() { *x = AddTeamRsp{} - mi := &file_main_proto_msgTypes[92] + mi := &file_main_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4685,7 +5327,7 @@ func (x *AddTeamRsp) String() string { func (*AddTeamRsp) ProtoMessage() {} func (x *AddTeamRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[92] + mi := &file_main_proto_msgTypes[104] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4698,7 +5340,7 @@ func (x *AddTeamRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamRsp.ProtoReflect.Descriptor instead. func (*AddTeamRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{92} + return file_main_proto_rawDescGZIP(), []int{104} } func (x *AddTeamRsp) GetError() string { @@ -4732,7 +5374,7 @@ type UpdateTeamReq struct { func (x *UpdateTeamReq) Reset() { *x = UpdateTeamReq{} - mi := &file_main_proto_msgTypes[93] + mi := &file_main_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4744,7 +5386,7 @@ func (x *UpdateTeamReq) String() string { func (*UpdateTeamReq) ProtoMessage() {} func (x *UpdateTeamReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[93] + mi := &file_main_proto_msgTypes[105] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4757,7 +5399,7 @@ func (x *UpdateTeamReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTeamReq.ProtoReflect.Descriptor instead. func (*UpdateTeamReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{93} + return file_main_proto_rawDescGZIP(), []int{105} } func (x *UpdateTeamReq) GetId() int32 { @@ -4783,7 +5425,7 @@ type UpdateTeamRsp struct { func (x *UpdateTeamRsp) Reset() { *x = UpdateTeamRsp{} - mi := &file_main_proto_msgTypes[94] + mi := &file_main_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4795,7 +5437,7 @@ func (x *UpdateTeamRsp) String() string { func (*UpdateTeamRsp) ProtoMessage() {} func (x *UpdateTeamRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[94] + mi := &file_main_proto_msgTypes[106] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4808,7 +5450,7 @@ func (x *UpdateTeamRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTeamRsp.ProtoReflect.Descriptor instead. func (*UpdateTeamRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{94} + return file_main_proto_rawDescGZIP(), []int{106} } func (x *UpdateTeamRsp) GetError() string { @@ -4827,7 +5469,7 @@ type DeleteTeamReq struct { func (x *DeleteTeamReq) Reset() { *x = DeleteTeamReq{} - mi := &file_main_proto_msgTypes[95] + mi := &file_main_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4839,7 +5481,7 @@ func (x *DeleteTeamReq) String() string { func (*DeleteTeamReq) ProtoMessage() {} func (x *DeleteTeamReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[95] + mi := &file_main_proto_msgTypes[107] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4852,7 +5494,7 @@ func (x *DeleteTeamReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTeamReq.ProtoReflect.Descriptor instead. func (*DeleteTeamReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{95} + return file_main_proto_rawDescGZIP(), []int{107} } func (x *DeleteTeamReq) GetId() int64 { @@ -4871,7 +5513,7 @@ type DeleteTeamRsp struct { func (x *DeleteTeamRsp) Reset() { *x = DeleteTeamRsp{} - mi := &file_main_proto_msgTypes[96] + mi := &file_main_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4883,7 +5525,7 @@ func (x *DeleteTeamRsp) String() string { func (*DeleteTeamRsp) ProtoMessage() {} func (x *DeleteTeamRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[96] + mi := &file_main_proto_msgTypes[108] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4896,7 +5538,7 @@ func (x *DeleteTeamRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTeamRsp.ProtoReflect.Descriptor instead. func (*DeleteTeamRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{96} + return file_main_proto_rawDescGZIP(), []int{108} } func (x *DeleteTeamRsp) GetError() string { @@ -4916,7 +5558,7 @@ type GiveTeamApplicationsReq struct { func (x *GiveTeamApplicationsReq) Reset() { *x = GiveTeamApplicationsReq{} - mi := &file_main_proto_msgTypes[97] + mi := &file_main_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4928,7 +5570,7 @@ func (x *GiveTeamApplicationsReq) String() string { func (*GiveTeamApplicationsReq) ProtoMessage() {} func (x *GiveTeamApplicationsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[97] + mi := &file_main_proto_msgTypes[109] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4941,7 +5583,7 @@ func (x *GiveTeamApplicationsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GiveTeamApplicationsReq.ProtoReflect.Descriptor instead. func (*GiveTeamApplicationsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{97} + return file_main_proto_rawDescGZIP(), []int{109} } func (x *GiveTeamApplicationsReq) GetId() int64 { @@ -4967,7 +5609,7 @@ type GiveTeamApplicationsRsp struct { func (x *GiveTeamApplicationsRsp) Reset() { *x = GiveTeamApplicationsRsp{} - mi := &file_main_proto_msgTypes[98] + mi := &file_main_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4979,7 +5621,7 @@ func (x *GiveTeamApplicationsRsp) String() string { func (*GiveTeamApplicationsRsp) ProtoMessage() {} func (x *GiveTeamApplicationsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[98] + mi := &file_main_proto_msgTypes[110] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4992,7 +5634,7 @@ func (x *GiveTeamApplicationsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GiveTeamApplicationsRsp.ProtoReflect.Descriptor instead. func (*GiveTeamApplicationsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{98} + return file_main_proto_rawDescGZIP(), []int{110} } func (x *GiveTeamApplicationsRsp) GetError() string { @@ -5012,7 +5654,7 @@ type GetTeamStoryReq struct { func (x *GetTeamStoryReq) Reset() { *x = GetTeamStoryReq{} - mi := &file_main_proto_msgTypes[99] + mi := &file_main_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5024,7 +5666,7 @@ func (x *GetTeamStoryReq) String() string { func (*GetTeamStoryReq) ProtoMessage() {} func (x *GetTeamStoryReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[99] + mi := &file_main_proto_msgTypes[111] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5037,7 +5679,7 @@ func (x *GetTeamStoryReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamStoryReq.ProtoReflect.Descriptor instead. func (*GetTeamStoryReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{99} + return file_main_proto_rawDescGZIP(), []int{111} } func (x *GetTeamStoryReq) GetId() int64 { @@ -5065,7 +5707,7 @@ type GetTeamStoryRsp struct { func (x *GetTeamStoryRsp) Reset() { *x = GetTeamStoryRsp{} - mi := &file_main_proto_msgTypes[100] + mi := &file_main_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5077,7 +5719,7 @@ func (x *GetTeamStoryRsp) String() string { func (*GetTeamStoryRsp) ProtoMessage() {} func (x *GetTeamStoryRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[100] + mi := &file_main_proto_msgTypes[112] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5090,7 +5732,7 @@ func (x *GetTeamStoryRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamStoryRsp.ProtoReflect.Descriptor instead. func (*GetTeamStoryRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{100} + return file_main_proto_rawDescGZIP(), []int{112} } func (x *GetTeamStoryRsp) GetError() string { @@ -5125,7 +5767,7 @@ type AddTeamActionReq struct { func (x *AddTeamActionReq) Reset() { *x = AddTeamActionReq{} - mi := &file_main_proto_msgTypes[101] + mi := &file_main_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5137,7 +5779,7 @@ func (x *AddTeamActionReq) String() string { func (*AddTeamActionReq) ProtoMessage() {} func (x *AddTeamActionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[101] + mi := &file_main_proto_msgTypes[113] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5150,7 +5792,7 @@ func (x *AddTeamActionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamActionReq.ProtoReflect.Descriptor instead. func (*AddTeamActionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{101} + return file_main_proto_rawDescGZIP(), []int{113} } func (x *AddTeamActionReq) GetId() int64 { @@ -5183,7 +5825,7 @@ type AddTeamActionRsp struct { func (x *AddTeamActionRsp) Reset() { *x = AddTeamActionRsp{} - mi := &file_main_proto_msgTypes[102] + mi := &file_main_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5195,7 +5837,7 @@ func (x *AddTeamActionRsp) String() string { func (*AddTeamActionRsp) ProtoMessage() {} func (x *AddTeamActionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[102] + mi := &file_main_proto_msgTypes[114] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5208,7 +5850,7 @@ func (x *AddTeamActionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamActionRsp.ProtoReflect.Descriptor instead. func (*AddTeamActionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{102} + return file_main_proto_rawDescGZIP(), []int{114} } func (x *AddTeamActionRsp) GetError() string { @@ -5227,7 +5869,7 @@ type DeleteLastTeamActionReq struct { func (x *DeleteLastTeamActionReq) Reset() { *x = DeleteLastTeamActionReq{} - mi := &file_main_proto_msgTypes[103] + mi := &file_main_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5239,7 +5881,7 @@ func (x *DeleteLastTeamActionReq) String() string { func (*DeleteLastTeamActionReq) ProtoMessage() {} func (x *DeleteLastTeamActionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[103] + mi := &file_main_proto_msgTypes[115] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5252,7 +5894,7 @@ func (x *DeleteLastTeamActionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteLastTeamActionReq.ProtoReflect.Descriptor instead. func (*DeleteLastTeamActionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{103} + return file_main_proto_rawDescGZIP(), []int{115} } func (x *DeleteLastTeamActionReq) GetId() int64 { @@ -5271,7 +5913,7 @@ type DeleteLastTeamActionRsp struct { func (x *DeleteLastTeamActionRsp) Reset() { *x = DeleteLastTeamActionRsp{} - mi := &file_main_proto_msgTypes[104] + mi := &file_main_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5283,7 +5925,7 @@ func (x *DeleteLastTeamActionRsp) String() string { func (*DeleteLastTeamActionRsp) ProtoMessage() {} func (x *DeleteLastTeamActionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[104] + mi := &file_main_proto_msgTypes[116] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5296,7 +5938,7 @@ func (x *DeleteLastTeamActionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteLastTeamActionRsp.ProtoReflect.Descriptor instead. func (*DeleteLastTeamActionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{104} + return file_main_proto_rawDescGZIP(), []int{116} } func (x *DeleteLastTeamActionRsp) GetError() string { @@ -5306,6 +5948,319 @@ func (x *DeleteLastTeamActionRsp) GetError() string { return "" } +type GetTeamAnswersReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int64 `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 +} + +func (x *GetTeamAnswersReq) Reset() { + *x = GetTeamAnswersReq{} + mi := &file_main_proto_msgTypes[117] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetTeamAnswersReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTeamAnswersReq) ProtoMessage() {} + +func (x *GetTeamAnswersReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[117] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTeamAnswersReq.ProtoReflect.Descriptor instead. +func (*GetTeamAnswersReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{117} +} + +func (x *GetTeamAnswersReq) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *GetTeamAnswersReq) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +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"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetTeamAnswersRsp) Reset() { + *x = GetTeamAnswersRsp{} + mi := &file_main_proto_msgTypes[118] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetTeamAnswersRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetTeamAnswersRsp) ProtoMessage() {} + +func (x *GetTeamAnswersRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[118] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetTeamAnswersRsp.ProtoReflect.Descriptor instead. +func (*GetTeamAnswersRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{118} +} + +func (x *GetTeamAnswersRsp) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +func (x *GetTeamAnswersRsp) GetAnswers() []*Answer { + if x != nil { + return x.Answers + } + return nil +} + +type SubmitTeamAnswersReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` + Password string `protobuf:"bytes,2,opt,name=password,proto3" json:"password,omitempty"` + Answers []*Answer `protobuf:"bytes,3,rep,name=answers,proto3" json:"answers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubmitTeamAnswersReq) Reset() { + *x = SubmitTeamAnswersReq{} + mi := &file_main_proto_msgTypes[119] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubmitTeamAnswersReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubmitTeamAnswersReq) ProtoMessage() {} + +func (x *SubmitTeamAnswersReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[119] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubmitTeamAnswersReq.ProtoReflect.Descriptor instead. +func (*SubmitTeamAnswersReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{119} +} + +func (x *SubmitTeamAnswersReq) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *SubmitTeamAnswersReq) GetPassword() string { + if x != nil { + return x.Password + } + return "" +} + +func (x *SubmitTeamAnswersReq) GetAnswers() []*Answer { + if x != nil { + return x.Answers + } + return nil +} + +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 +} + +func (x *SubmitTeamAnswersRsp) Reset() { + *x = SubmitTeamAnswersRsp{} + mi := &file_main_proto_msgTypes[120] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubmitTeamAnswersRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubmitTeamAnswersRsp) ProtoMessage() {} + +func (x *SubmitTeamAnswersRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[120] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubmitTeamAnswersRsp.ProtoReflect.Descriptor instead. +func (*SubmitTeamAnswersRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{120} +} + +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"` + QuestionCode string `protobuf:"bytes,2,opt,name=questionCode,proto3" json:"questionCode,omitempty"` + // Балл; отсутствует — сбросить выставленный балл + Score *int32 `protobuf:"varint,3,opt,name=score,proto3,oneof" json:"score,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SetTeamAnswerScoreReq) Reset() { + *x = SetTeamAnswerScoreReq{} + mi := &file_main_proto_msgTypes[121] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetTeamAnswerScoreReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetTeamAnswerScoreReq) ProtoMessage() {} + +func (x *SetTeamAnswerScoreReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[121] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetTeamAnswerScoreReq.ProtoReflect.Descriptor instead. +func (*SetTeamAnswerScoreReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{121} +} + +func (x *SetTeamAnswerScoreReq) GetId() int64 { + if x != nil { + return x.Id + } + return 0 +} + +func (x *SetTeamAnswerScoreReq) GetQuestionCode() string { + if x != nil { + return x.QuestionCode + } + return "" +} + +func (x *SetTeamAnswerScoreReq) GetScore() int32 { + if x != nil && x.Score != nil { + return *x.Score + } + return 0 +} + +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 +} + +func (x *SetTeamAnswerScoreRsp) Reset() { + *x = SetTeamAnswerScoreRsp{} + mi := &file_main_proto_msgTypes[122] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetTeamAnswerScoreRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetTeamAnswerScoreRsp) ProtoMessage() {} + +func (x *SetTeamAnswerScoreRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[122] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetTeamAnswerScoreRsp.ProtoReflect.Descriptor instead. +func (*SetTeamAnswerScoreRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{122} +} + +func (x *SetTeamAnswerScoreRsp) GetError() string { + if x != nil { + return x.Error + } + return "" +} + var File_main_proto protoreflect.FileDescriptor const file_main_proto_rawDesc = "" + @@ -5437,10 +6392,11 @@ const file_main_proto_rawDesc = "" + "\fpublished_at\x18\n" + " \x01(\v2\x1a.google.protobuf.TimestampR\vpublishedAtB\x0e\n" + "\f_descriptionB\b\n" + - "\x06_image\"\x98\x01\n" + + "\x06_image\"\xe0\x01\n" + "\x05Story\x12P\n" + "\fintroduction\x18\x02 \x01(\v2,.crabs.evening_detective_server.IntroductionR\fintroduction\x12=\n" + - "\x06places\x18\x01 \x03(\v2%.crabs.evening_detective_server.PlaceR\x06places\"8\n" + + "\x06places\x18\x01 \x03(\v2%.crabs.evening_detective_server.PlaceR\x06places\x12F\n" + + "\tquestions\x18\x03 \x03(\v2(.crabs.evening_detective_server.QuestionR\tquestions\"8\n" + "\fIntroduction\x12\x12\n" + "\x04text\x18\x01 \x01(\tR\x04text\x12\x14\n" + "\x05audio\x18\x02 \x01(\tR\x05audio\"\xb7\x02\n" + @@ -5462,7 +6418,22 @@ const file_main_proto_rawDesc = "" + "\x04name\x18\x02 \x01(\tR\x04name\x127\n" + "\x04keys\x18\x03 \x03(\v2#.crabs.evening_detective_server.KeyR\x04keys\"\x19\n" + "\x03Key\x12\x12\n" + - "\x04name\x18\x01 \x01(\tR\x04name\"o\n" + + "\x04name\x18\x01 \x01(\tR\x04name\"J\n" + + "\bQuestion\x12\x12\n" + + "\x04code\x18\x01 \x01(\tR\x04code\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\x12\x16\n" + + "\x06answer\x18\x03 \x01(\tR\x06answer\"D\n" + + "\x06Answer\x12\"\n" + + "\fquestionCode\x18\x01 \x01(\tR\fquestionCode\x12\x16\n" + + "\x06answer\x18\x02 \x01(\tR\x06answer\"n\n" + + "\vAnswerScore\x12\"\n" + + "\fquestionCode\x18\x01 \x01(\tR\fquestionCode\x12\x16\n" + + "\x06answer\x18\x02 \x01(\tR\x06answer\x12\x19\n" + + "\x05score\x18\x03 \x01(\x05H\x00R\x05score\x88\x01\x01B\b\n" + + "\x06_score\"\x8e\x01\n" + + "\vTeamAnswers\x128\n" + + "\x04team\x18\x01 \x01(\v2$.crabs.evening_detective_server.TeamR\x04team\x12E\n" + + "\aanswers\x18\x02 \x03(\v2+.crabs.evening_detective_server.AnswerScoreR\aanswers\"o\n" + "\x11UpdateScenarioReq\x12\x0e\n" + "\x02id\x18\x01 \x01(\x05R\x02id\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12 \n" + @@ -5502,6 +6473,22 @@ const file_main_proto_rawDesc = "" + "\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" + + "\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" + + "\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" + + "\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" + "\x1aDownloadScenarioArchiveReq\x12\x0e\n" + "\x02id\x18\x01 \x01(\x05R\x02id\"@\n" + @@ -5549,7 +6536,13 @@ const file_main_proto_rawDesc = "" + "\n" + "GetGameRsp\x12\x14\n" + "\x05error\x18\x01 \x01(\tR\x05error\x128\n" + - "\x04game\x18\x02 \x01(\v2$.crabs.evening_detective_server.GameR\x04game\"\xad\x01\n" + + "\x04game\x18\x02 \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\"\xad\x01\n" + "\rUpdateGameReq\x12\x0e\n" + "\x02id\x18\x01 \x01(\x05R\x02id\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12 \n" + @@ -5622,7 +6615,26 @@ const file_main_proto_rawDesc = "" + "\x17DeleteLastTeamActionReq\x12\x0e\n" + "\x02id\x18\x01 \x01(\x03R\x02id\"/\n" + "\x17DeleteLastTeamActionRsp\x12\x14\n" + - "\x05error\x18\x01 \x01(\tR\x05error2\xc2U\n" + + "\x05error\x18\x01 \x01(\tR\x05error\"?\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" + + "\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" + + "\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\x05error2\xa2d\n" + "\x16EveningDetectiveServer\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" + @@ -5700,7 +6712,13 @@ const file_main_proto_rawDesc = "" + "\x13UpdateScenarioPlace\x126.crabs.evening_detective_server.UpdateScenarioPlaceReq\x1a6.crabs.evening_detective_server.UpdateScenarioPlaceRsp\"z\x92AK\n" + "\x1bТочки сценария\x12,Обновить точку сценария\x82\xd3\xe4\x93\x02&:\x01*\x1a!/api/scenarios/{id}/places/{code}\x12\xfc\x01\n" + "\x13DeleteScenarioPlace\x126.crabs.evening_detective_server.DeleteScenarioPlaceReq\x1a6.crabs.evening_detective_server.DeleteScenarioPlaceRsp\"u\x92AI\n" + - "\x1bТочки сценария\x12*Удалить точку сценария\x82\xd3\xe4\x93\x02#*!/api/scenarios/{id}/places/{code}\x12\xfb\x01\n" + + "\x1bТочки сценария\x12*Удалить точку сценария\x82\xd3\xe4\x93\x02#*!/api/scenarios/{id}/places/{code}\x12\xf9\x01\n" + + "\x13AddScenarioQuestion\x126.crabs.evening_detective_server.AddScenarioQuestionReq\x1a6.crabs.evening_detective_server.AddScenarioQuestionRsp\"r\x92AG\n" + + "\x1fВопросы сценария\x12$Создать вопрос дела\x82\xd3\xe4\x93\x02\":\x01*\"\x1d/api/scenarios/{id}/questions\x12\x8b\x02\n" + + "\x16UpdateScenarioQuestion\x129.crabs.evening_detective_server.UpdateScenarioQuestionReq\x1a9.crabs.evening_detective_server.UpdateScenarioQuestionRsp\"{\x92AI\n" + + "\x1fВопросы сценария\x12&Обновить вопрос дела\x82\xd3\xe4\x93\x02):\x01*\x1a$/api/scenarios/{id}/questions/{code}\x12\x86\x02\n" + + "\x16DeleteScenarioQuestion\x129.crabs.evening_detective_server.DeleteScenarioQuestionReq\x1a9.crabs.evening_detective_server.DeleteScenarioQuestionRsp\"v\x92AG\n" + + "\x1fВопросы сценария\x12$Удалить вопрос дела\x82\xd3\xe4\x93\x02&*$/api/scenarios/{id}/questions/{code}\x12\xfb\x01\n" + "\x13UpdateScenarioIntro\x126.crabs.evening_detective_server.UpdateScenarioIntroReq\x1a6.crabs.evening_detective_server.UpdateScenarioIntroRsp\"t\x92AF\n" + "\x10Сценарии\x122Обновить введение сценария\x82\xd3\xe4\x93\x02%:\x01*\x1a /api/scenarios/{id}/introduction\x12\x98\x02\n" + "\x17DownloadScenarioArchive\x12:.crabs.evening_detective_server.DownloadScenarioArchiveReq\x1a\x14.google.api.HttpBody\"\xaa\x01\x92A\x83\x01\n" + @@ -5714,7 +6732,9 @@ const file_main_proto_rawDesc = "" + "\bИгры\x12\x19Получить игры\x82\xd3\xe4\x93\x02\f\x12\n" + "/api/games\x12\xa2\x01\n" + "\aGetGame\x12*.crabs.evening_detective_server.GetGameReq\x1a*.crabs.evening_detective_server.GetGameRsp\"?\x92A%\n" + - "\bИгры\x12\x19Получить игру\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/games/{id}\x12\xae\x01\n" + + "\bИгры\x12\x19Получить игру\x82\xd3\xe4\x93\x02\x11\x12\x0f/api/games/{id}\x12\xa4\x02\n" + + "\x0eGetGameAnswers\x121.crabs.evening_detective_server.GetGameAnswersReq\x1a1.crabs.evening_detective_server.GetGameAnswersRsp\"\xab\x01\x92A\x84\x01\n" + + "\bИгры\x12xПолучить ответы команд на вопросы дела (для оценки организатором)\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/games/{gameId}/answers\x12\xae\x01\n" + "\n" + "UpdateGame\x12-.crabs.evening_detective_server.UpdateGameReq\x1a-.crabs.evening_detective_server.UpdateGameRsp\"B\x92A%\n" + "\bИгры\x12\x19Обновить игру\x82\xd3\xe4\x93\x02\x14:\x01*\x1a\x0f/api/games/{id}\x12\xad\x01\n" + @@ -5752,7 +6772,17 @@ const file_main_proto_rawDesc = "" + "\x04\n" + "\x00\x12\x00\x82\xd3\xe4\x93\x02\x1c:\x01*\"\x17/api/teams/{id}/actions\x12\xe5\x01\n" + "\x14DeleteLastTeamAction\x127.crabs.evening_detective_server.DeleteLastTeamActionReq\x1a7.crabs.evening_detective_server.DeleteLastTeamActionRsp\"[\x92A4\n" + - "\bХоды\x12(Удалить последний ход\x82\xd3\xe4\x93\x02\x1e*\x1c/api/teams/{id}/last-actionsB\xd7\x01\x92A\xc8\x01\x12U\n" + + "\bХоды\x12(Удалить последний ход\x82\xd3\xe4\x93\x02\x1e*\x1c/api/teams/{id}/last-actions\x12\xf7\x01\n" + + "\x0eGetTeamAnswers\x121.crabs.evening_detective_server.GetTeamAnswersReq\x1a1.crabs.evening_detective_server.GetTeamAnswersRsp\"\x7f\x92A]\n" + + "\bХоды\x12IПолучить ответы команды на вопросы делаb\x06\n" + + "\x04\n" + + "\x00\x12\x00\x82\xd3\xe4\x93\x02\x19\x12\x17/api/teams/{id}/answers\x12\x86\x02\n" + + "\x11SubmitTeamAnswers\x124.crabs.evening_detective_server.SubmitTeamAnswersReq\x1a4.crabs.evening_detective_server.SubmitTeamAnswersRsp\"\x84\x01\x92A_\n" + + "\bХоды\x12KОтправить ответы команды на вопросы делаb\x06\n" + + "\x04\n" + + "\x00\x12\x00\x82\xd3\xe4\x93\x02\x1c:\x01*\"\x17/api/teams/{id}/answers\x12\xa0\x02\n" + + "\x12SetTeamAnswerScore\x125.crabs.evening_detective_server.SetTeamAnswerScoreReq\x1a5.crabs.evening_detective_server.SetTeamAnswerScoreRsp\"\x9b\x01\x92Aa\n" + + "\bИгры\x12UВыставить балл команде за ответ на вопрос дела\x82\xd3\xe4\x93\x021:\x01*\x1a,/api/teams/{id}/answers/{questionCode}/scoreB\xd7\x01\x92A\xc8\x01\x12U\n" + "KДокументация сервиса \"Вечерний детектив\"2\x06v0.1.0Z]\n" + "[\n" + "\n" + @@ -5773,7 +6803,7 @@ func file_main_proto_rawDescGZIP() []byte { return file_main_proto_rawDescData } -var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 105) +var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 123) var file_main_proto_goTypes = []any{ (*PingReq)(nil), // 0: crabs.evening_detective_server.PingReq (*PingRsp)(nil), // 1: crabs.evening_detective_server.PingRsp @@ -5826,66 +6856,84 @@ var file_main_proto_goTypes = []any{ (*Application)(nil), // 48: crabs.evening_detective_server.Application (*Door)(nil), // 49: crabs.evening_detective_server.Door (*Key)(nil), // 50: crabs.evening_detective_server.Key - (*UpdateScenarioReq)(nil), // 51: crabs.evening_detective_server.UpdateScenarioReq - (*UpdateScenarioRsp)(nil), // 52: crabs.evening_detective_server.UpdateScenarioRsp - (*PublicScenarioReq)(nil), // 53: crabs.evening_detective_server.PublicScenarioReq - (*PublicScenarioRsp)(nil), // 54: crabs.evening_detective_server.PublicScenarioRsp - (*DraftScenarioReq)(nil), // 55: crabs.evening_detective_server.DraftScenarioReq - (*DraftScenarioRsp)(nil), // 56: crabs.evening_detective_server.DraftScenarioRsp - (*DeleteScenarioReq)(nil), // 57: crabs.evening_detective_server.DeleteScenarioReq - (*DeleteScenarioRsp)(nil), // 58: crabs.evening_detective_server.DeleteScenarioRsp - (*AddScenarioPlaceReq)(nil), // 59: crabs.evening_detective_server.AddScenarioPlaceReq - (*AddScenarioPlaceRsp)(nil), // 60: crabs.evening_detective_server.AddScenarioPlaceRsp - (*UpdateScenarioPlaceReq)(nil), // 61: crabs.evening_detective_server.UpdateScenarioPlaceReq - (*UpdateScenarioPlaceRsp)(nil), // 62: crabs.evening_detective_server.UpdateScenarioPlaceRsp - (*DeleteScenarioPlaceReq)(nil), // 63: crabs.evening_detective_server.DeleteScenarioPlaceReq - (*DeleteScenarioPlaceRsp)(nil), // 64: crabs.evening_detective_server.DeleteScenarioPlaceRsp - (*UpdateScenarioIntroReq)(nil), // 65: crabs.evening_detective_server.UpdateScenarioIntroReq - (*UpdateScenarioIntroRsp)(nil), // 66: crabs.evening_detective_server.UpdateScenarioIntroRsp - (*DownloadScenarioArchiveReq)(nil), // 67: crabs.evening_detective_server.DownloadScenarioArchiveReq - (*UploadScenarioArchiveRsp)(nil), // 68: crabs.evening_detective_server.UploadScenarioArchiveRsp - (*AddGameReq)(nil), // 69: crabs.evening_detective_server.AddGameReq - (*AddGameRsp)(nil), // 70: crabs.evening_detective_server.AddGameRsp - (*GetGamesReq)(nil), // 71: crabs.evening_detective_server.GetGamesReq - (*GetGamesRsp)(nil), // 72: crabs.evening_detective_server.GetGamesRsp - (*Game)(nil), // 73: crabs.evening_detective_server.Game - (*Team)(nil), // 74: crabs.evening_detective_server.Team - (*GetGameReq)(nil), // 75: crabs.evening_detective_server.GetGameReq - (*GetGameRsp)(nil), // 76: crabs.evening_detective_server.GetGameRsp - (*UpdateGameReq)(nil), // 77: crabs.evening_detective_server.UpdateGameReq - (*UpdateGameRsp)(nil), // 78: crabs.evening_detective_server.UpdateGameRsp - (*StartGameReq)(nil), // 79: crabs.evening_detective_server.StartGameReq - (*StartGameRsp)(nil), // 80: crabs.evening_detective_server.StartGameRsp - (*PauseGameReq)(nil), // 81: crabs.evening_detective_server.PauseGameReq - (*PauseGameRsp)(nil), // 82: crabs.evening_detective_server.PauseGameRsp - (*PlayGameReq)(nil), // 83: crabs.evening_detective_server.PlayGameReq - (*PlayGameRsp)(nil), // 84: crabs.evening_detective_server.PlayGameRsp - (*FinishGameReq)(nil), // 85: crabs.evening_detective_server.FinishGameReq - (*FinishGameRsp)(nil), // 86: crabs.evening_detective_server.FinishGameRsp - (*ResetGameReq)(nil), // 87: crabs.evening_detective_server.ResetGameReq - (*ResetGameRsp)(nil), // 88: crabs.evening_detective_server.ResetGameRsp - (*DeleteGameReq)(nil), // 89: crabs.evening_detective_server.DeleteGameReq - (*DeleteGameRsp)(nil), // 90: crabs.evening_detective_server.DeleteGameRsp - (*AddTeamReq)(nil), // 91: crabs.evening_detective_server.AddTeamReq - (*AddTeamRsp)(nil), // 92: crabs.evening_detective_server.AddTeamRsp - (*UpdateTeamReq)(nil), // 93: crabs.evening_detective_server.UpdateTeamReq - (*UpdateTeamRsp)(nil), // 94: crabs.evening_detective_server.UpdateTeamRsp - (*DeleteTeamReq)(nil), // 95: crabs.evening_detective_server.DeleteTeamReq - (*DeleteTeamRsp)(nil), // 96: crabs.evening_detective_server.DeleteTeamRsp - (*GiveTeamApplicationsReq)(nil), // 97: crabs.evening_detective_server.GiveTeamApplicationsReq - (*GiveTeamApplicationsRsp)(nil), // 98: crabs.evening_detective_server.GiveTeamApplicationsRsp - (*GetTeamStoryReq)(nil), // 99: crabs.evening_detective_server.GetTeamStoryReq - (*GetTeamStoryRsp)(nil), // 100: crabs.evening_detective_server.GetTeamStoryRsp - (*AddTeamActionReq)(nil), // 101: crabs.evening_detective_server.AddTeamActionReq - (*AddTeamActionRsp)(nil), // 102: crabs.evening_detective_server.AddTeamActionRsp - (*DeleteLastTeamActionReq)(nil), // 103: crabs.evening_detective_server.DeleteLastTeamActionReq - (*DeleteLastTeamActionRsp)(nil), // 104: crabs.evening_detective_server.DeleteLastTeamActionRsp - (*timestamppb.Timestamp)(nil), // 105: google.protobuf.Timestamp - (*httpbody.HttpBody)(nil), // 106: google.api.HttpBody + (*Question)(nil), // 51: crabs.evening_detective_server.Question + (*Answer)(nil), // 52: crabs.evening_detective_server.Answer + (*AnswerScore)(nil), // 53: crabs.evening_detective_server.AnswerScore + (*TeamAnswers)(nil), // 54: crabs.evening_detective_server.TeamAnswers + (*UpdateScenarioReq)(nil), // 55: crabs.evening_detective_server.UpdateScenarioReq + (*UpdateScenarioRsp)(nil), // 56: crabs.evening_detective_server.UpdateScenarioRsp + (*PublicScenarioReq)(nil), // 57: crabs.evening_detective_server.PublicScenarioReq + (*PublicScenarioRsp)(nil), // 58: crabs.evening_detective_server.PublicScenarioRsp + (*DraftScenarioReq)(nil), // 59: crabs.evening_detective_server.DraftScenarioReq + (*DraftScenarioRsp)(nil), // 60: crabs.evening_detective_server.DraftScenarioRsp + (*DeleteScenarioReq)(nil), // 61: crabs.evening_detective_server.DeleteScenarioReq + (*DeleteScenarioRsp)(nil), // 62: crabs.evening_detective_server.DeleteScenarioRsp + (*AddScenarioPlaceReq)(nil), // 63: crabs.evening_detective_server.AddScenarioPlaceReq + (*AddScenarioPlaceRsp)(nil), // 64: crabs.evening_detective_server.AddScenarioPlaceRsp + (*UpdateScenarioPlaceReq)(nil), // 65: crabs.evening_detective_server.UpdateScenarioPlaceReq + (*UpdateScenarioPlaceRsp)(nil), // 66: crabs.evening_detective_server.UpdateScenarioPlaceRsp + (*DeleteScenarioPlaceReq)(nil), // 67: crabs.evening_detective_server.DeleteScenarioPlaceReq + (*DeleteScenarioPlaceRsp)(nil), // 68: crabs.evening_detective_server.DeleteScenarioPlaceRsp + (*UpdateScenarioIntroReq)(nil), // 69: crabs.evening_detective_server.UpdateScenarioIntroReq + (*UpdateScenarioIntroRsp)(nil), // 70: crabs.evening_detective_server.UpdateScenarioIntroRsp + (*AddScenarioQuestionReq)(nil), // 71: crabs.evening_detective_server.AddScenarioQuestionReq + (*AddScenarioQuestionRsp)(nil), // 72: crabs.evening_detective_server.AddScenarioQuestionRsp + (*UpdateScenarioQuestionReq)(nil), // 73: crabs.evening_detective_server.UpdateScenarioQuestionReq + (*UpdateScenarioQuestionRsp)(nil), // 74: crabs.evening_detective_server.UpdateScenarioQuestionRsp + (*DeleteScenarioQuestionReq)(nil), // 75: crabs.evening_detective_server.DeleteScenarioQuestionReq + (*DeleteScenarioQuestionRsp)(nil), // 76: crabs.evening_detective_server.DeleteScenarioQuestionRsp + (*DownloadScenarioArchiveReq)(nil), // 77: crabs.evening_detective_server.DownloadScenarioArchiveReq + (*UploadScenarioArchiveRsp)(nil), // 78: crabs.evening_detective_server.UploadScenarioArchiveRsp + (*AddGameReq)(nil), // 79: crabs.evening_detective_server.AddGameReq + (*AddGameRsp)(nil), // 80: crabs.evening_detective_server.AddGameRsp + (*GetGamesReq)(nil), // 81: crabs.evening_detective_server.GetGamesReq + (*GetGamesRsp)(nil), // 82: crabs.evening_detective_server.GetGamesRsp + (*Game)(nil), // 83: crabs.evening_detective_server.Game + (*Team)(nil), // 84: crabs.evening_detective_server.Team + (*GetGameReq)(nil), // 85: crabs.evening_detective_server.GetGameReq + (*GetGameRsp)(nil), // 86: crabs.evening_detective_server.GetGameRsp + (*GetGameAnswersReq)(nil), // 87: crabs.evening_detective_server.GetGameAnswersReq + (*GetGameAnswersRsp)(nil), // 88: crabs.evening_detective_server.GetGameAnswersRsp + (*UpdateGameReq)(nil), // 89: crabs.evening_detective_server.UpdateGameReq + (*UpdateGameRsp)(nil), // 90: crabs.evening_detective_server.UpdateGameRsp + (*StartGameReq)(nil), // 91: crabs.evening_detective_server.StartGameReq + (*StartGameRsp)(nil), // 92: crabs.evening_detective_server.StartGameRsp + (*PauseGameReq)(nil), // 93: crabs.evening_detective_server.PauseGameReq + (*PauseGameRsp)(nil), // 94: crabs.evening_detective_server.PauseGameRsp + (*PlayGameReq)(nil), // 95: crabs.evening_detective_server.PlayGameReq + (*PlayGameRsp)(nil), // 96: crabs.evening_detective_server.PlayGameRsp + (*FinishGameReq)(nil), // 97: crabs.evening_detective_server.FinishGameReq + (*FinishGameRsp)(nil), // 98: crabs.evening_detective_server.FinishGameRsp + (*ResetGameReq)(nil), // 99: crabs.evening_detective_server.ResetGameReq + (*ResetGameRsp)(nil), // 100: crabs.evening_detective_server.ResetGameRsp + (*DeleteGameReq)(nil), // 101: crabs.evening_detective_server.DeleteGameReq + (*DeleteGameRsp)(nil), // 102: crabs.evening_detective_server.DeleteGameRsp + (*AddTeamReq)(nil), // 103: crabs.evening_detective_server.AddTeamReq + (*AddTeamRsp)(nil), // 104: crabs.evening_detective_server.AddTeamRsp + (*UpdateTeamReq)(nil), // 105: crabs.evening_detective_server.UpdateTeamReq + (*UpdateTeamRsp)(nil), // 106: crabs.evening_detective_server.UpdateTeamRsp + (*DeleteTeamReq)(nil), // 107: crabs.evening_detective_server.DeleteTeamReq + (*DeleteTeamRsp)(nil), // 108: crabs.evening_detective_server.DeleteTeamRsp + (*GiveTeamApplicationsReq)(nil), // 109: crabs.evening_detective_server.GiveTeamApplicationsReq + (*GiveTeamApplicationsRsp)(nil), // 110: crabs.evening_detective_server.GiveTeamApplicationsRsp + (*GetTeamStoryReq)(nil), // 111: crabs.evening_detective_server.GetTeamStoryReq + (*GetTeamStoryRsp)(nil), // 112: crabs.evening_detective_server.GetTeamStoryRsp + (*AddTeamActionReq)(nil), // 113: crabs.evening_detective_server.AddTeamActionReq + (*AddTeamActionRsp)(nil), // 114: crabs.evening_detective_server.AddTeamActionRsp + (*DeleteLastTeamActionReq)(nil), // 115: crabs.evening_detective_server.DeleteLastTeamActionReq + (*DeleteLastTeamActionRsp)(nil), // 116: crabs.evening_detective_server.DeleteLastTeamActionRsp + (*GetTeamAnswersReq)(nil), // 117: crabs.evening_detective_server.GetTeamAnswersReq + (*GetTeamAnswersRsp)(nil), // 118: crabs.evening_detective_server.GetTeamAnswersRsp + (*SubmitTeamAnswersReq)(nil), // 119: crabs.evening_detective_server.SubmitTeamAnswersReq + (*SubmitTeamAnswersRsp)(nil), // 120: crabs.evening_detective_server.SubmitTeamAnswersRsp + (*SetTeamAnswerScoreReq)(nil), // 121: crabs.evening_detective_server.SetTeamAnswerScoreReq + (*SetTeamAnswerScoreRsp)(nil), // 122: crabs.evening_detective_server.SetTeamAnswerScoreRsp + (*timestamppb.Timestamp)(nil), // 123: google.protobuf.Timestamp + (*httpbody.HttpBody)(nil), // 124: google.api.HttpBody } var file_main_proto_depIdxs = []int32{ 22, // 0: crabs.evening_detective_server.GetUsersRsp.users:type_name -> crabs.evening_detective_server.User - 105, // 1: crabs.evening_detective_server.User.created_at:type_name -> google.protobuf.Timestamp + 123, // 1: crabs.evening_detective_server.User.created_at:type_name -> google.protobuf.Timestamp 22, // 2: crabs.evening_detective_server.GetUserByIdRsp.user:type_name -> crabs.evening_detective_server.User 22, // 3: crabs.evening_detective_server.GetMeRsp.user:type_name -> crabs.evening_detective_server.User 44, // 4: crabs.evening_detective_server.GetMyScenariosRsp.scenarios:type_name -> crabs.evening_detective_server.Scenario @@ -5893,135 +6941,158 @@ var file_main_proto_depIdxs = []int32{ 44, // 6: crabs.evening_detective_server.GetScenarioRsp.scenario:type_name -> crabs.evening_detective_server.Scenario 45, // 7: crabs.evening_detective_server.Scenario.story:type_name -> crabs.evening_detective_server.Story 22, // 8: crabs.evening_detective_server.Scenario.author:type_name -> crabs.evening_detective_server.User - 105, // 9: crabs.evening_detective_server.Scenario.updated_at:type_name -> google.protobuf.Timestamp - 105, // 10: crabs.evening_detective_server.Scenario.created_at:type_name -> google.protobuf.Timestamp - 105, // 11: crabs.evening_detective_server.Scenario.published_at:type_name -> google.protobuf.Timestamp + 123, // 9: crabs.evening_detective_server.Scenario.updated_at:type_name -> google.protobuf.Timestamp + 123, // 10: crabs.evening_detective_server.Scenario.created_at:type_name -> google.protobuf.Timestamp + 123, // 11: crabs.evening_detective_server.Scenario.published_at:type_name -> google.protobuf.Timestamp 46, // 12: crabs.evening_detective_server.Story.introduction:type_name -> crabs.evening_detective_server.Introduction 47, // 13: crabs.evening_detective_server.Story.places:type_name -> crabs.evening_detective_server.Place - 48, // 14: crabs.evening_detective_server.Place.applications:type_name -> crabs.evening_detective_server.Application - 49, // 15: crabs.evening_detective_server.Place.doors:type_name -> crabs.evening_detective_server.Door - 50, // 16: crabs.evening_detective_server.Place.keys:type_name -> crabs.evening_detective_server.Key - 50, // 17: crabs.evening_detective_server.Door.keys:type_name -> crabs.evening_detective_server.Key - 47, // 18: crabs.evening_detective_server.AddScenarioPlaceReq.place:type_name -> crabs.evening_detective_server.Place - 47, // 19: crabs.evening_detective_server.UpdateScenarioPlaceReq.place:type_name -> crabs.evening_detective_server.Place - 46, // 20: crabs.evening_detective_server.UpdateScenarioIntroReq.introduction:type_name -> crabs.evening_detective_server.Introduction - 105, // 21: crabs.evening_detective_server.AddGameReq.start_at:type_name -> google.protobuf.Timestamp - 73, // 22: crabs.evening_detective_server.GetGamesRsp.games:type_name -> crabs.evening_detective_server.Game - 105, // 23: crabs.evening_detective_server.Game.start_at:type_name -> google.protobuf.Timestamp - 44, // 24: crabs.evening_detective_server.Game.scenario:type_name -> crabs.evening_detective_server.Scenario - 74, // 25: crabs.evening_detective_server.Game.teams:type_name -> crabs.evening_detective_server.Team - 105, // 26: crabs.evening_detective_server.Game.started_at:type_name -> google.protobuf.Timestamp - 105, // 27: crabs.evening_detective_server.Game.ended_at:type_name -> google.protobuf.Timestamp - 48, // 28: crabs.evening_detective_server.Team.applications:type_name -> crabs.evening_detective_server.Application - 73, // 29: crabs.evening_detective_server.GetGameRsp.game:type_name -> crabs.evening_detective_server.Game - 105, // 30: crabs.evening_detective_server.UpdateGameReq.start_at:type_name -> google.protobuf.Timestamp - 45, // 31: crabs.evening_detective_server.GetTeamStoryRsp.story:type_name -> crabs.evening_detective_server.Story - 73, // 32: crabs.evening_detective_server.GetTeamStoryRsp.game:type_name -> crabs.evening_detective_server.Game - 0, // 33: crabs.evening_detective_server.EveningDetectiveServer.Ping:input_type -> crabs.evening_detective_server.PingReq - 2, // 34: crabs.evening_detective_server.EveningDetectiveServer.Echo:input_type -> crabs.evening_detective_server.EchoReq - 4, // 35: crabs.evening_detective_server.EveningDetectiveServer.Signup:input_type -> crabs.evening_detective_server.SignupReq - 6, // 36: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:input_type -> crabs.evening_detective_server.RefreshPasswordReq - 8, // 37: crabs.evening_detective_server.EveningDetectiveServer.Login:input_type -> crabs.evening_detective_server.LoginReq - 10, // 38: crabs.evening_detective_server.EveningDetectiveServer.Refresh:input_type -> crabs.evening_detective_server.RefreshReq - 12, // 39: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:input_type -> crabs.evening_detective_server.DeleteAccountReq - 14, // 40: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:input_type -> crabs.evening_detective_server.GetTermsReq - 16, // 41: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:input_type -> crabs.evening_detective_server.GetPrivacyReq - 18, // 42: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:input_type -> crabs.evening_detective_server.GetConsentReq - 20, // 43: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:input_type -> crabs.evening_detective_server.GetUsersReq - 23, // 44: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:input_type -> crabs.evening_detective_server.GetUserByIdReq - 25, // 45: crabs.evening_detective_server.EveningDetectiveServer.GetMe:input_type -> crabs.evening_detective_server.GetMeReq - 27, // 46: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:input_type -> crabs.evening_detective_server.AddUserRoleReq - 29, // 47: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:input_type -> crabs.evening_detective_server.DeleteUserRoleReq - 31, // 48: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:input_type -> crabs.evening_detective_server.GetPermissionsReq - 33, // 49: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:input_type -> crabs.evening_detective_server.UploadFileReq - 35, // 50: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:input_type -> crabs.evening_detective_server.DownloadFileReq - 36, // 51: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:input_type -> crabs.evening_detective_server.AddScenarioReq - 38, // 52: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:input_type -> crabs.evening_detective_server.GetMyScenariosReq - 40, // 53: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:input_type -> crabs.evening_detective_server.GetScenariosCatalogReq - 42, // 54: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:input_type -> crabs.evening_detective_server.GetScenarioReq - 42, // 55: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:input_type -> crabs.evening_detective_server.GetScenarioReq - 51, // 56: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:input_type -> crabs.evening_detective_server.UpdateScenarioReq - 53, // 57: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:input_type -> crabs.evening_detective_server.PublicScenarioReq - 55, // 58: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:input_type -> crabs.evening_detective_server.DraftScenarioReq - 57, // 59: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:input_type -> crabs.evening_detective_server.DeleteScenarioReq - 59, // 60: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:input_type -> crabs.evening_detective_server.AddScenarioPlaceReq - 61, // 61: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:input_type -> crabs.evening_detective_server.UpdateScenarioPlaceReq - 63, // 62: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:input_type -> crabs.evening_detective_server.DeleteScenarioPlaceReq - 65, // 63: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:input_type -> crabs.evening_detective_server.UpdateScenarioIntroReq - 67, // 64: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:input_type -> crabs.evening_detective_server.DownloadScenarioArchiveReq - 106, // 65: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:input_type -> google.api.HttpBody - 69, // 66: crabs.evening_detective_server.EveningDetectiveServer.AddGame:input_type -> crabs.evening_detective_server.AddGameReq - 71, // 67: crabs.evening_detective_server.EveningDetectiveServer.GetGames:input_type -> crabs.evening_detective_server.GetGamesReq - 75, // 68: crabs.evening_detective_server.EveningDetectiveServer.GetGame:input_type -> crabs.evening_detective_server.GetGameReq - 77, // 69: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:input_type -> crabs.evening_detective_server.UpdateGameReq - 79, // 70: crabs.evening_detective_server.EveningDetectiveServer.StartGame:input_type -> crabs.evening_detective_server.StartGameReq - 81, // 71: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:input_type -> crabs.evening_detective_server.PauseGameReq - 83, // 72: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:input_type -> crabs.evening_detective_server.PlayGameReq - 85, // 73: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:input_type -> crabs.evening_detective_server.FinishGameReq - 87, // 74: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:input_type -> crabs.evening_detective_server.ResetGameReq - 89, // 75: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:input_type -> crabs.evening_detective_server.DeleteGameReq - 91, // 76: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:input_type -> crabs.evening_detective_server.AddTeamReq - 93, // 77: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:input_type -> crabs.evening_detective_server.UpdateTeamReq - 95, // 78: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:input_type -> crabs.evening_detective_server.DeleteTeamReq - 97, // 79: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:input_type -> crabs.evening_detective_server.GiveTeamApplicationsReq - 99, // 80: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:input_type -> crabs.evening_detective_server.GetTeamStoryReq - 101, // 81: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:input_type -> crabs.evening_detective_server.AddTeamActionReq - 103, // 82: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:input_type -> crabs.evening_detective_server.DeleteLastTeamActionReq - 1, // 83: crabs.evening_detective_server.EveningDetectiveServer.Ping:output_type -> crabs.evening_detective_server.PingRsp - 3, // 84: crabs.evening_detective_server.EveningDetectiveServer.Echo:output_type -> crabs.evening_detective_server.EchoRsp - 5, // 85: crabs.evening_detective_server.EveningDetectiveServer.Signup:output_type -> crabs.evening_detective_server.SignupRsp - 7, // 86: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:output_type -> crabs.evening_detective_server.RefreshPasswordRsp - 9, // 87: crabs.evening_detective_server.EveningDetectiveServer.Login:output_type -> crabs.evening_detective_server.LoginRsp - 11, // 88: crabs.evening_detective_server.EveningDetectiveServer.Refresh:output_type -> crabs.evening_detective_server.RefreshRsp - 13, // 89: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:output_type -> crabs.evening_detective_server.DeleteAccountRsp - 15, // 90: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:output_type -> crabs.evening_detective_server.GetTermsRsp - 17, // 91: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:output_type -> crabs.evening_detective_server.GetPrivacyRsp - 19, // 92: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:output_type -> crabs.evening_detective_server.GetConsentRsp - 21, // 93: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:output_type -> crabs.evening_detective_server.GetUsersRsp - 24, // 94: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:output_type -> crabs.evening_detective_server.GetUserByIdRsp - 26, // 95: crabs.evening_detective_server.EveningDetectiveServer.GetMe:output_type -> crabs.evening_detective_server.GetMeRsp - 28, // 96: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:output_type -> crabs.evening_detective_server.AddUserRoleRsp - 30, // 97: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:output_type -> crabs.evening_detective_server.DeleteUserRoleRsp - 32, // 98: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:output_type -> crabs.evening_detective_server.GetPermissionsRsp - 34, // 99: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:output_type -> crabs.evening_detective_server.UploadFileRsp - 106, // 100: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:output_type -> google.api.HttpBody - 37, // 101: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:output_type -> crabs.evening_detective_server.AddScenarioRsp - 39, // 102: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:output_type -> crabs.evening_detective_server.GetMyScenariosRsp - 41, // 103: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:output_type -> crabs.evening_detective_server.GetScenariosCatalogRsp - 43, // 104: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp - 43, // 105: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp - 52, // 106: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:output_type -> crabs.evening_detective_server.UpdateScenarioRsp - 54, // 107: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:output_type -> crabs.evening_detective_server.PublicScenarioRsp - 56, // 108: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:output_type -> crabs.evening_detective_server.DraftScenarioRsp - 58, // 109: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:output_type -> crabs.evening_detective_server.DeleteScenarioRsp - 60, // 110: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:output_type -> crabs.evening_detective_server.AddScenarioPlaceRsp - 62, // 111: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:output_type -> crabs.evening_detective_server.UpdateScenarioPlaceRsp - 64, // 112: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:output_type -> crabs.evening_detective_server.DeleteScenarioPlaceRsp - 66, // 113: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:output_type -> crabs.evening_detective_server.UpdateScenarioIntroRsp - 106, // 114: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:output_type -> google.api.HttpBody - 68, // 115: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:output_type -> crabs.evening_detective_server.UploadScenarioArchiveRsp - 70, // 116: crabs.evening_detective_server.EveningDetectiveServer.AddGame:output_type -> crabs.evening_detective_server.AddGameRsp - 72, // 117: crabs.evening_detective_server.EveningDetectiveServer.GetGames:output_type -> crabs.evening_detective_server.GetGamesRsp - 76, // 118: crabs.evening_detective_server.EveningDetectiveServer.GetGame:output_type -> crabs.evening_detective_server.GetGameRsp - 78, // 119: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:output_type -> crabs.evening_detective_server.UpdateGameRsp - 80, // 120: crabs.evening_detective_server.EveningDetectiveServer.StartGame:output_type -> crabs.evening_detective_server.StartGameRsp - 82, // 121: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:output_type -> crabs.evening_detective_server.PauseGameRsp - 84, // 122: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:output_type -> crabs.evening_detective_server.PlayGameRsp - 86, // 123: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:output_type -> crabs.evening_detective_server.FinishGameRsp - 88, // 124: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:output_type -> crabs.evening_detective_server.ResetGameRsp - 90, // 125: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:output_type -> crabs.evening_detective_server.DeleteGameRsp - 92, // 126: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:output_type -> crabs.evening_detective_server.AddTeamRsp - 94, // 127: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:output_type -> crabs.evening_detective_server.UpdateTeamRsp - 96, // 128: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:output_type -> crabs.evening_detective_server.DeleteTeamRsp - 98, // 129: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:output_type -> crabs.evening_detective_server.GiveTeamApplicationsRsp - 100, // 130: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:output_type -> crabs.evening_detective_server.GetTeamStoryRsp - 102, // 131: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:output_type -> crabs.evening_detective_server.AddTeamActionRsp - 104, // 132: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:output_type -> crabs.evening_detective_server.DeleteLastTeamActionRsp - 83, // [83:133] is the sub-list for method output_type - 33, // [33:83] is the sub-list for method input_type - 33, // [33:33] is the sub-list for extension type_name - 33, // [33:33] is the sub-list for extension extendee - 0, // [0:33] is the sub-list for field type_name + 51, // 14: crabs.evening_detective_server.Story.questions:type_name -> crabs.evening_detective_server.Question + 48, // 15: crabs.evening_detective_server.Place.applications:type_name -> crabs.evening_detective_server.Application + 49, // 16: crabs.evening_detective_server.Place.doors:type_name -> crabs.evening_detective_server.Door + 50, // 17: crabs.evening_detective_server.Place.keys:type_name -> crabs.evening_detective_server.Key + 50, // 18: crabs.evening_detective_server.Door.keys:type_name -> crabs.evening_detective_server.Key + 84, // 19: crabs.evening_detective_server.TeamAnswers.team:type_name -> crabs.evening_detective_server.Team + 53, // 20: crabs.evening_detective_server.TeamAnswers.answers:type_name -> crabs.evening_detective_server.AnswerScore + 47, // 21: crabs.evening_detective_server.AddScenarioPlaceReq.place:type_name -> crabs.evening_detective_server.Place + 47, // 22: crabs.evening_detective_server.UpdateScenarioPlaceReq.place:type_name -> crabs.evening_detective_server.Place + 46, // 23: crabs.evening_detective_server.UpdateScenarioIntroReq.introduction:type_name -> crabs.evening_detective_server.Introduction + 51, // 24: crabs.evening_detective_server.AddScenarioQuestionReq.question:type_name -> crabs.evening_detective_server.Question + 51, // 25: crabs.evening_detective_server.UpdateScenarioQuestionReq.question:type_name -> crabs.evening_detective_server.Question + 123, // 26: crabs.evening_detective_server.AddGameReq.start_at:type_name -> google.protobuf.Timestamp + 83, // 27: crabs.evening_detective_server.GetGamesRsp.games:type_name -> crabs.evening_detective_server.Game + 123, // 28: crabs.evening_detective_server.Game.start_at:type_name -> google.protobuf.Timestamp + 44, // 29: crabs.evening_detective_server.Game.scenario:type_name -> crabs.evening_detective_server.Scenario + 84, // 30: crabs.evening_detective_server.Game.teams:type_name -> crabs.evening_detective_server.Team + 123, // 31: crabs.evening_detective_server.Game.started_at:type_name -> google.protobuf.Timestamp + 123, // 32: crabs.evening_detective_server.Game.ended_at:type_name -> google.protobuf.Timestamp + 48, // 33: crabs.evening_detective_server.Team.applications:type_name -> crabs.evening_detective_server.Application + 83, // 34: crabs.evening_detective_server.GetGameRsp.game:type_name -> crabs.evening_detective_server.Game + 51, // 35: crabs.evening_detective_server.GetGameAnswersRsp.questions:type_name -> crabs.evening_detective_server.Question + 54, // 36: crabs.evening_detective_server.GetGameAnswersRsp.teams:type_name -> crabs.evening_detective_server.TeamAnswers + 123, // 37: crabs.evening_detective_server.UpdateGameReq.start_at:type_name -> google.protobuf.Timestamp + 45, // 38: crabs.evening_detective_server.GetTeamStoryRsp.story:type_name -> crabs.evening_detective_server.Story + 83, // 39: crabs.evening_detective_server.GetTeamStoryRsp.game:type_name -> crabs.evening_detective_server.Game + 52, // 40: crabs.evening_detective_server.GetTeamAnswersRsp.answers:type_name -> crabs.evening_detective_server.Answer + 52, // 41: crabs.evening_detective_server.SubmitTeamAnswersReq.answers:type_name -> crabs.evening_detective_server.Answer + 0, // 42: crabs.evening_detective_server.EveningDetectiveServer.Ping:input_type -> crabs.evening_detective_server.PingReq + 2, // 43: crabs.evening_detective_server.EveningDetectiveServer.Echo:input_type -> crabs.evening_detective_server.EchoReq + 4, // 44: crabs.evening_detective_server.EveningDetectiveServer.Signup:input_type -> crabs.evening_detective_server.SignupReq + 6, // 45: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:input_type -> crabs.evening_detective_server.RefreshPasswordReq + 8, // 46: crabs.evening_detective_server.EveningDetectiveServer.Login:input_type -> crabs.evening_detective_server.LoginReq + 10, // 47: crabs.evening_detective_server.EveningDetectiveServer.Refresh:input_type -> crabs.evening_detective_server.RefreshReq + 12, // 48: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:input_type -> crabs.evening_detective_server.DeleteAccountReq + 14, // 49: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:input_type -> crabs.evening_detective_server.GetTermsReq + 16, // 50: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:input_type -> crabs.evening_detective_server.GetPrivacyReq + 18, // 51: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:input_type -> crabs.evening_detective_server.GetConsentReq + 20, // 52: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:input_type -> crabs.evening_detective_server.GetUsersReq + 23, // 53: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:input_type -> crabs.evening_detective_server.GetUserByIdReq + 25, // 54: crabs.evening_detective_server.EveningDetectiveServer.GetMe:input_type -> crabs.evening_detective_server.GetMeReq + 27, // 55: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:input_type -> crabs.evening_detective_server.AddUserRoleReq + 29, // 56: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:input_type -> crabs.evening_detective_server.DeleteUserRoleReq + 31, // 57: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:input_type -> crabs.evening_detective_server.GetPermissionsReq + 33, // 58: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:input_type -> crabs.evening_detective_server.UploadFileReq + 35, // 59: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:input_type -> crabs.evening_detective_server.DownloadFileReq + 36, // 60: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:input_type -> crabs.evening_detective_server.AddScenarioReq + 38, // 61: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:input_type -> crabs.evening_detective_server.GetMyScenariosReq + 40, // 62: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:input_type -> crabs.evening_detective_server.GetScenariosCatalogReq + 42, // 63: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:input_type -> crabs.evening_detective_server.GetScenarioReq + 42, // 64: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:input_type -> crabs.evening_detective_server.GetScenarioReq + 55, // 65: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:input_type -> crabs.evening_detective_server.UpdateScenarioReq + 57, // 66: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:input_type -> crabs.evening_detective_server.PublicScenarioReq + 59, // 67: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:input_type -> crabs.evening_detective_server.DraftScenarioReq + 61, // 68: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:input_type -> crabs.evening_detective_server.DeleteScenarioReq + 63, // 69: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:input_type -> crabs.evening_detective_server.AddScenarioPlaceReq + 65, // 70: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:input_type -> crabs.evening_detective_server.UpdateScenarioPlaceReq + 67, // 71: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:input_type -> crabs.evening_detective_server.DeleteScenarioPlaceReq + 71, // 72: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:input_type -> crabs.evening_detective_server.AddScenarioQuestionReq + 73, // 73: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:input_type -> crabs.evening_detective_server.UpdateScenarioQuestionReq + 75, // 74: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:input_type -> crabs.evening_detective_server.DeleteScenarioQuestionReq + 69, // 75: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:input_type -> crabs.evening_detective_server.UpdateScenarioIntroReq + 77, // 76: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:input_type -> crabs.evening_detective_server.DownloadScenarioArchiveReq + 124, // 77: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:input_type -> google.api.HttpBody + 79, // 78: crabs.evening_detective_server.EveningDetectiveServer.AddGame:input_type -> crabs.evening_detective_server.AddGameReq + 81, // 79: crabs.evening_detective_server.EveningDetectiveServer.GetGames:input_type -> crabs.evening_detective_server.GetGamesReq + 85, // 80: crabs.evening_detective_server.EveningDetectiveServer.GetGame:input_type -> crabs.evening_detective_server.GetGameReq + 87, // 81: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:input_type -> crabs.evening_detective_server.GetGameAnswersReq + 89, // 82: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:input_type -> crabs.evening_detective_server.UpdateGameReq + 91, // 83: crabs.evening_detective_server.EveningDetectiveServer.StartGame:input_type -> crabs.evening_detective_server.StartGameReq + 93, // 84: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:input_type -> crabs.evening_detective_server.PauseGameReq + 95, // 85: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:input_type -> crabs.evening_detective_server.PlayGameReq + 97, // 86: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:input_type -> crabs.evening_detective_server.FinishGameReq + 99, // 87: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:input_type -> crabs.evening_detective_server.ResetGameReq + 101, // 88: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:input_type -> crabs.evening_detective_server.DeleteGameReq + 103, // 89: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:input_type -> crabs.evening_detective_server.AddTeamReq + 105, // 90: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:input_type -> crabs.evening_detective_server.UpdateTeamReq + 107, // 91: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:input_type -> crabs.evening_detective_server.DeleteTeamReq + 109, // 92: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:input_type -> crabs.evening_detective_server.GiveTeamApplicationsReq + 111, // 93: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:input_type -> crabs.evening_detective_server.GetTeamStoryReq + 113, // 94: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:input_type -> crabs.evening_detective_server.AddTeamActionReq + 115, // 95: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:input_type -> crabs.evening_detective_server.DeleteLastTeamActionReq + 117, // 96: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:input_type -> crabs.evening_detective_server.GetTeamAnswersReq + 119, // 97: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:input_type -> crabs.evening_detective_server.SubmitTeamAnswersReq + 121, // 98: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:input_type -> crabs.evening_detective_server.SetTeamAnswerScoreReq + 1, // 99: crabs.evening_detective_server.EveningDetectiveServer.Ping:output_type -> crabs.evening_detective_server.PingRsp + 3, // 100: crabs.evening_detective_server.EveningDetectiveServer.Echo:output_type -> crabs.evening_detective_server.EchoRsp + 5, // 101: crabs.evening_detective_server.EveningDetectiveServer.Signup:output_type -> crabs.evening_detective_server.SignupRsp + 7, // 102: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:output_type -> crabs.evening_detective_server.RefreshPasswordRsp + 9, // 103: crabs.evening_detective_server.EveningDetectiveServer.Login:output_type -> crabs.evening_detective_server.LoginRsp + 11, // 104: crabs.evening_detective_server.EveningDetectiveServer.Refresh:output_type -> crabs.evening_detective_server.RefreshRsp + 13, // 105: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:output_type -> crabs.evening_detective_server.DeleteAccountRsp + 15, // 106: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:output_type -> crabs.evening_detective_server.GetTermsRsp + 17, // 107: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:output_type -> crabs.evening_detective_server.GetPrivacyRsp + 19, // 108: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:output_type -> crabs.evening_detective_server.GetConsentRsp + 21, // 109: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:output_type -> crabs.evening_detective_server.GetUsersRsp + 24, // 110: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:output_type -> crabs.evening_detective_server.GetUserByIdRsp + 26, // 111: crabs.evening_detective_server.EveningDetectiveServer.GetMe:output_type -> crabs.evening_detective_server.GetMeRsp + 28, // 112: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:output_type -> crabs.evening_detective_server.AddUserRoleRsp + 30, // 113: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:output_type -> crabs.evening_detective_server.DeleteUserRoleRsp + 32, // 114: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:output_type -> crabs.evening_detective_server.GetPermissionsRsp + 34, // 115: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:output_type -> crabs.evening_detective_server.UploadFileRsp + 124, // 116: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:output_type -> google.api.HttpBody + 37, // 117: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:output_type -> crabs.evening_detective_server.AddScenarioRsp + 39, // 118: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:output_type -> crabs.evening_detective_server.GetMyScenariosRsp + 41, // 119: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:output_type -> crabs.evening_detective_server.GetScenariosCatalogRsp + 43, // 120: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp + 43, // 121: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp + 56, // 122: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:output_type -> crabs.evening_detective_server.UpdateScenarioRsp + 58, // 123: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:output_type -> crabs.evening_detective_server.PublicScenarioRsp + 60, // 124: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:output_type -> crabs.evening_detective_server.DraftScenarioRsp + 62, // 125: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:output_type -> crabs.evening_detective_server.DeleteScenarioRsp + 64, // 126: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:output_type -> crabs.evening_detective_server.AddScenarioPlaceRsp + 66, // 127: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:output_type -> crabs.evening_detective_server.UpdateScenarioPlaceRsp + 68, // 128: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:output_type -> crabs.evening_detective_server.DeleteScenarioPlaceRsp + 72, // 129: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:output_type -> crabs.evening_detective_server.AddScenarioQuestionRsp + 74, // 130: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:output_type -> crabs.evening_detective_server.UpdateScenarioQuestionRsp + 76, // 131: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:output_type -> crabs.evening_detective_server.DeleteScenarioQuestionRsp + 70, // 132: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:output_type -> crabs.evening_detective_server.UpdateScenarioIntroRsp + 124, // 133: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:output_type -> google.api.HttpBody + 78, // 134: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:output_type -> crabs.evening_detective_server.UploadScenarioArchiveRsp + 80, // 135: crabs.evening_detective_server.EveningDetectiveServer.AddGame:output_type -> crabs.evening_detective_server.AddGameRsp + 82, // 136: crabs.evening_detective_server.EveningDetectiveServer.GetGames:output_type -> crabs.evening_detective_server.GetGamesRsp + 86, // 137: crabs.evening_detective_server.EveningDetectiveServer.GetGame:output_type -> crabs.evening_detective_server.GetGameRsp + 88, // 138: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:output_type -> crabs.evening_detective_server.GetGameAnswersRsp + 90, // 139: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:output_type -> crabs.evening_detective_server.UpdateGameRsp + 92, // 140: crabs.evening_detective_server.EveningDetectiveServer.StartGame:output_type -> crabs.evening_detective_server.StartGameRsp + 94, // 141: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:output_type -> crabs.evening_detective_server.PauseGameRsp + 96, // 142: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:output_type -> crabs.evening_detective_server.PlayGameRsp + 98, // 143: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:output_type -> crabs.evening_detective_server.FinishGameRsp + 100, // 144: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:output_type -> crabs.evening_detective_server.ResetGameRsp + 102, // 145: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:output_type -> crabs.evening_detective_server.DeleteGameRsp + 104, // 146: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:output_type -> crabs.evening_detective_server.AddTeamRsp + 106, // 147: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:output_type -> crabs.evening_detective_server.UpdateTeamRsp + 108, // 148: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:output_type -> crabs.evening_detective_server.DeleteTeamRsp + 110, // 149: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:output_type -> crabs.evening_detective_server.GiveTeamApplicationsRsp + 112, // 150: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:output_type -> crabs.evening_detective_server.GetTeamStoryRsp + 114, // 151: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:output_type -> crabs.evening_detective_server.AddTeamActionRsp + 116, // 152: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:output_type -> crabs.evening_detective_server.DeleteLastTeamActionRsp + 118, // 153: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:output_type -> crabs.evening_detective_server.GetTeamAnswersRsp + 120, // 154: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:output_type -> crabs.evening_detective_server.SubmitTeamAnswersRsp + 122, // 155: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:output_type -> crabs.evening_detective_server.SetTeamAnswerScoreRsp + 99, // [99:156] is the sub-list for method output_type + 42, // [42:99] is the sub-list for method input_type + 42, // [42:42] is the sub-list for extension type_name + 42, // [42:42] is the sub-list for extension extendee + 0, // [0:42] is the sub-list for field type_name } func init() { file_main_proto_init() } @@ -6030,14 +7101,16 @@ func file_main_proto_init() { return } file_main_proto_msgTypes[44].OneofWrappers = []any{} - file_main_proto_msgTypes[73].OneofWrappers = []any{} + file_main_proto_msgTypes[53].OneofWrappers = []any{} + file_main_proto_msgTypes[83].OneofWrappers = []any{} + file_main_proto_msgTypes[121].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_main_proto_rawDesc), len(file_main_proto_rawDesc)), NumEnums: 0, - NumMessages: 105, + NumMessages: 123, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/main.pb.gw.go b/proto/main.pb.gw.go index d3d40a1..3b143d0 100644 --- a/proto/main.pb.gw.go +++ b/proto/main.pb.gw.go @@ -1024,6 +1024,167 @@ func local_request_EveningDetectiveServer_DeleteScenarioPlace_0(ctx context.Cont return msg, metadata, err } +func request_EveningDetectiveServer_AddScenarioQuestion_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq AddScenarioQuestionReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + msg, err := client.AddScenarioQuestion(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_AddScenarioQuestion_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq AddScenarioQuestionReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + msg, err := server.AddScenarioQuestion(ctx, &protoReq) + return msg, metadata, err +} + +func request_EveningDetectiveServer_UpdateScenarioQuestion_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq UpdateScenarioQuestionReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + val, ok = pathParams["code"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "code") + } + protoReq.Code, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "code", err) + } + msg, err := client.UpdateScenarioQuestion(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_UpdateScenarioQuestion_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq UpdateScenarioQuestionReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + val, ok = pathParams["code"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "code") + } + protoReq.Code, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "code", err) + } + msg, err := server.UpdateScenarioQuestion(ctx, &protoReq) + return msg, metadata, err +} + +func request_EveningDetectiveServer_DeleteScenarioQuestion_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq DeleteScenarioQuestionReq + metadata runtime.ServerMetadata + err error + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + val, ok = pathParams["code"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "code") + } + protoReq.Code, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "code", err) + } + msg, err := client.DeleteScenarioQuestion(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_DeleteScenarioQuestion_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq DeleteScenarioQuestionReq + metadata runtime.ServerMetadata + err error + ) + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + val, ok = pathParams["code"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "code") + } + protoReq.Code, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "code", err) + } + msg, err := server.DeleteScenarioQuestion(ctx, &protoReq) + return msg, metadata, err +} + func request_EveningDetectiveServer_UpdateScenarioIntro_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var ( protoReq UpdateScenarioIntroReq @@ -1222,6 +1383,45 @@ func local_request_EveningDetectiveServer_GetGame_0(ctx context.Context, marshal return msg, metadata, err } +func request_EveningDetectiveServer_GetGameAnswers_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetGameAnswersReq + metadata runtime.ServerMetadata + err error + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["gameId"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "gameId") + } + protoReq.GameId, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "gameId", err) + } + msg, err := client.GetGameAnswers(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_GetGameAnswers_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetGameAnswersReq + metadata runtime.ServerMetadata + err error + ) + val, ok := pathParams["gameId"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "gameId") + } + protoReq.GameId, err = runtime.Int32(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "gameId", err) + } + msg, err := server.GetGameAnswers(ctx, &protoReq) + return msg, metadata, err +} + func request_EveningDetectiveServer_UpdateGame_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var ( protoReq UpdateGameReq @@ -1824,6 +2024,165 @@ func local_request_EveningDetectiveServer_DeleteLastTeamAction_0(ctx context.Con return msg, metadata, err } +var filter_EveningDetectiveServer_GetTeamAnswers_0 = &utilities.DoubleArray{Encoding: map[string]int{"id": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} + +func request_EveningDetectiveServer_GetTeamAnswers_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetTeamAnswersReq + metadata runtime.ServerMetadata + err error + ) + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.Int64(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EveningDetectiveServer_GetTeamAnswers_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := client.GetTeamAnswers(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_GetTeamAnswers_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetTeamAnswersReq + metadata runtime.ServerMetadata + err error + ) + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.Int64(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_EveningDetectiveServer_GetTeamAnswers_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + msg, err := server.GetTeamAnswers(ctx, &protoReq) + return msg, metadata, err +} + +func request_EveningDetectiveServer_SubmitTeamAnswers_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq SubmitTeamAnswersReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.Int64(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + msg, err := client.SubmitTeamAnswers(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_SubmitTeamAnswers_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq SubmitTeamAnswersReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.Int64(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + msg, err := server.SubmitTeamAnswers(ctx, &protoReq) + return msg, metadata, err +} + +func request_EveningDetectiveServer_SetTeamAnswerScore_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq SetTeamAnswerScoreReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.Int64(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + val, ok = pathParams["questionCode"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "questionCode") + } + protoReq.QuestionCode, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "questionCode", err) + } + msg, err := client.SetTeamAnswerScore(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_SetTeamAnswerScore_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq SetTeamAnswerScoreReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "id") + } + protoReq.Id, err = runtime.Int64(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "id", err) + } + val, ok = pathParams["questionCode"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "questionCode") + } + protoReq.QuestionCode, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "questionCode", err) + } + msg, err := server.SetTeamAnswerScore(ctx, &protoReq) + return msg, metadata, err +} + // RegisterEveningDetectiveServerHandlerServer registers the http handlers for service EveningDetectiveServer to "mux". // UnaryRPC :call EveningDetectiveServerServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -2430,6 +2789,66 @@ func RegisterEveningDetectiveServerHandlerServer(ctx context.Context, mux *runti } forward_EveningDetectiveServer_DeleteScenarioPlace_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_AddScenarioQuestion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/AddScenarioQuestion", runtime.WithHTTPPathPattern("/api/scenarios/{id}/questions")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_AddScenarioQuestion_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_AddScenarioQuestion_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_UpdateScenarioQuestion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/UpdateScenarioQuestion", runtime.WithHTTPPathPattern("/api/scenarios/{id}/questions/{code}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_UpdateScenarioQuestion_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_UpdateScenarioQuestion_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodDelete, pattern_EveningDetectiveServer_DeleteScenarioQuestion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/DeleteScenarioQuestion", runtime.WithHTTPPathPattern("/api/scenarios/{id}/questions/{code}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_DeleteScenarioQuestion_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_DeleteScenarioQuestion_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_UpdateScenarioIntro_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2550,6 +2969,26 @@ func RegisterEveningDetectiveServerHandlerServer(ctx context.Context, mux *runti } forward_EveningDetectiveServer_GetGame_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodGet, pattern_EveningDetectiveServer_GetGameAnswers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/GetGameAnswers", runtime.WithHTTPPathPattern("/api/games/{gameId}/answers")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_GetGameAnswers_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_GetGameAnswers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_UpdateGame_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -2830,6 +3269,66 @@ func RegisterEveningDetectiveServerHandlerServer(ctx context.Context, mux *runti } forward_EveningDetectiveServer_DeleteLastTeamAction_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodGet, pattern_EveningDetectiveServer_GetTeamAnswers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/GetTeamAnswers", runtime.WithHTTPPathPattern("/api/teams/{id}/answers")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_GetTeamAnswers_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_GetTeamAnswers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_SubmitTeamAnswers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/SubmitTeamAnswers", runtime.WithHTTPPathPattern("/api/teams/{id}/answers")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_SubmitTeamAnswers_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_SubmitTeamAnswers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_SetTeamAnswerScore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateIncomingContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/SetTeamAnswerScore", runtime.WithHTTPPathPattern("/api/teams/{id}/answers/{questionCode}/score")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_SetTeamAnswerScore_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_SetTeamAnswerScore_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) return nil } @@ -3380,6 +3879,57 @@ func RegisterEveningDetectiveServerHandlerClient(ctx context.Context, mux *runti } forward_EveningDetectiveServer_DeleteScenarioPlace_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_AddScenarioQuestion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/AddScenarioQuestion", runtime.WithHTTPPathPattern("/api/scenarios/{id}/questions")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_AddScenarioQuestion_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_AddScenarioQuestion_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_UpdateScenarioQuestion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/UpdateScenarioQuestion", runtime.WithHTTPPathPattern("/api/scenarios/{id}/questions/{code}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_UpdateScenarioQuestion_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_UpdateScenarioQuestion_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodDelete, pattern_EveningDetectiveServer_DeleteScenarioQuestion_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/DeleteScenarioQuestion", runtime.WithHTTPPathPattern("/api/scenarios/{id}/questions/{code}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_DeleteScenarioQuestion_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_DeleteScenarioQuestion_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_UpdateScenarioIntro_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3482,6 +4032,23 @@ func RegisterEveningDetectiveServerHandlerClient(ctx context.Context, mux *runti } forward_EveningDetectiveServer_GetGame_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodGet, pattern_EveningDetectiveServer_GetGameAnswers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/GetGameAnswers", runtime.WithHTTPPathPattern("/api/games/{gameId}/answers")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_GetGameAnswers_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_GetGameAnswers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_UpdateGame_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -3720,6 +4287,57 @@ func RegisterEveningDetectiveServerHandlerClient(ctx context.Context, mux *runti } forward_EveningDetectiveServer_DeleteLastTeamAction_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodGet, pattern_EveningDetectiveServer_GetTeamAnswers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/GetTeamAnswers", runtime.WithHTTPPathPattern("/api/teams/{id}/answers")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_GetTeamAnswers_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_GetTeamAnswers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_SubmitTeamAnswers_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/SubmitTeamAnswers", runtime.WithHTTPPathPattern("/api/teams/{id}/answers")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_SubmitTeamAnswers_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_SubmitTeamAnswers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) + mux.Handle(http.MethodPut, pattern_EveningDetectiveServer_SetTeamAnswerScore_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + annotatedContext, err := runtime.AnnotateContext(ctx, mux, req, "/crabs.evening_detective_server.EveningDetectiveServer/SetTeamAnswerScore", runtime.WithHTTPPathPattern("/api/teams/{id}/answers/{questionCode}/score")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_SetTeamAnswerScore_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + forward_EveningDetectiveServer_SetTeamAnswerScore_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) return nil } @@ -3754,12 +4372,16 @@ var ( pattern_EveningDetectiveServer_AddScenarioPlace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "scenarios", "id", "places"}, "")) pattern_EveningDetectiveServer_UpdateScenarioPlace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "scenarios", "id", "places", "code"}, "")) pattern_EveningDetectiveServer_DeleteScenarioPlace_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "scenarios", "id", "places", "code"}, "")) + pattern_EveningDetectiveServer_AddScenarioQuestion_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "scenarios", "id", "questions"}, "")) + pattern_EveningDetectiveServer_UpdateScenarioQuestion_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "scenarios", "id", "questions", "code"}, "")) + pattern_EveningDetectiveServer_DeleteScenarioQuestion_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"api", "scenarios", "id", "questions", "code"}, "")) pattern_EveningDetectiveServer_UpdateScenarioIntro_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "scenarios", "id", "introduction"}, "")) pattern_EveningDetectiveServer_DownloadScenarioArchive_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "scenarios", "id", "archive"}, "")) pattern_EveningDetectiveServer_UploadScenarioArchive_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "scenarios", "archive"}, "")) pattern_EveningDetectiveServer_AddGame_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"api", "games"}, "")) pattern_EveningDetectiveServer_GetGames_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"api", "games"}, "")) pattern_EveningDetectiveServer_GetGame_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"api", "games", "id"}, "")) + pattern_EveningDetectiveServer_GetGameAnswers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "games", "gameId", "answers"}, "")) pattern_EveningDetectiveServer_UpdateGame_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"api", "games", "id"}, "")) pattern_EveningDetectiveServer_StartGame_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "games", "id", "start"}, "")) pattern_EveningDetectiveServer_PauseGame_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "games", "id", "pause"}, "")) @@ -3774,6 +4396,9 @@ var ( pattern_EveningDetectiveServer_GetTeamStory_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "teams", "id", "story"}, "")) pattern_EveningDetectiveServer_AddTeamAction_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "teams", "id", "actions"}, "")) pattern_EveningDetectiveServer_DeleteLastTeamAction_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "teams", "id", "last-actions"}, "")) + pattern_EveningDetectiveServer_GetTeamAnswers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "teams", "id", "answers"}, "")) + pattern_EveningDetectiveServer_SubmitTeamAnswers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "teams", "id", "answers"}, "")) + pattern_EveningDetectiveServer_SetTeamAnswerScore_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4, 2, 5}, []string{"api", "teams", "id", "answers", "questionCode", "score"}, "")) ) var ( @@ -3807,12 +4432,16 @@ var ( forward_EveningDetectiveServer_AddScenarioPlace_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_UpdateScenarioPlace_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_DeleteScenarioPlace_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_AddScenarioQuestion_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_UpdateScenarioQuestion_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_DeleteScenarioQuestion_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_UpdateScenarioIntro_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_DownloadScenarioArchive_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_UploadScenarioArchive_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_AddGame_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_GetGames_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_GetGame_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_GetGameAnswers_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_UpdateGame_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_StartGame_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_PauseGame_0 = runtime.ForwardResponseMessage @@ -3827,4 +4456,7 @@ var ( forward_EveningDetectiveServer_GetTeamStory_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_AddTeamAction_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_DeleteLastTeamAction_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_GetTeamAnswers_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_SubmitTeamAnswers_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_SetTeamAnswerScore_0 = runtime.ForwardResponseMessage ) diff --git a/proto/main_grpc.pb.go b/proto/main_grpc.pb.go index c888749..f6bcbde 100644 --- a/proto/main_grpc.pb.go +++ b/proto/main_grpc.pb.go @@ -50,12 +50,16 @@ const ( EveningDetectiveServer_AddScenarioPlace_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/AddScenarioPlace" EveningDetectiveServer_UpdateScenarioPlace_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/UpdateScenarioPlace" EveningDetectiveServer_DeleteScenarioPlace_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/DeleteScenarioPlace" + EveningDetectiveServer_AddScenarioQuestion_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/AddScenarioQuestion" + EveningDetectiveServer_UpdateScenarioQuestion_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/UpdateScenarioQuestion" + EveningDetectiveServer_DeleteScenarioQuestion_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/DeleteScenarioQuestion" EveningDetectiveServer_UpdateScenarioIntro_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/UpdateScenarioIntro" EveningDetectiveServer_DownloadScenarioArchive_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/DownloadScenarioArchive" EveningDetectiveServer_UploadScenarioArchive_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/UploadScenarioArchive" EveningDetectiveServer_AddGame_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/AddGame" EveningDetectiveServer_GetGames_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetGames" EveningDetectiveServer_GetGame_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetGame" + EveningDetectiveServer_GetGameAnswers_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetGameAnswers" EveningDetectiveServer_UpdateGame_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/UpdateGame" EveningDetectiveServer_StartGame_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/StartGame" EveningDetectiveServer_PauseGame_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/PauseGame" @@ -70,6 +74,9 @@ const ( EveningDetectiveServer_GetTeamStory_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetTeamStory" EveningDetectiveServer_AddTeamAction_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/AddTeamAction" EveningDetectiveServer_DeleteLastTeamAction_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/DeleteLastTeamAction" + EveningDetectiveServer_GetTeamAnswers_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetTeamAnswers" + EveningDetectiveServer_SubmitTeamAnswers_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/SubmitTeamAnswers" + EveningDetectiveServer_SetTeamAnswerScore_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/SetTeamAnswerScore" ) // EveningDetectiveServerClient is the client API for EveningDetectiveServer service. @@ -106,12 +113,16 @@ type EveningDetectiveServerClient interface { AddScenarioPlace(ctx context.Context, in *AddScenarioPlaceReq, opts ...grpc.CallOption) (*AddScenarioPlaceRsp, error) UpdateScenarioPlace(ctx context.Context, in *UpdateScenarioPlaceReq, opts ...grpc.CallOption) (*UpdateScenarioPlaceRsp, error) DeleteScenarioPlace(ctx context.Context, in *DeleteScenarioPlaceReq, opts ...grpc.CallOption) (*DeleteScenarioPlaceRsp, error) + AddScenarioQuestion(ctx context.Context, in *AddScenarioQuestionReq, opts ...grpc.CallOption) (*AddScenarioQuestionRsp, error) + UpdateScenarioQuestion(ctx context.Context, in *UpdateScenarioQuestionReq, opts ...grpc.CallOption) (*UpdateScenarioQuestionRsp, error) + DeleteScenarioQuestion(ctx context.Context, in *DeleteScenarioQuestionReq, opts ...grpc.CallOption) (*DeleteScenarioQuestionRsp, error) UpdateScenarioIntro(ctx context.Context, in *UpdateScenarioIntroReq, opts ...grpc.CallOption) (*UpdateScenarioIntroRsp, error) DownloadScenarioArchive(ctx context.Context, in *DownloadScenarioArchiveReq, opts ...grpc.CallOption) (*httpbody.HttpBody, error) UploadScenarioArchive(ctx context.Context, in *httpbody.HttpBody, opts ...grpc.CallOption) (*UploadScenarioArchiveRsp, error) AddGame(ctx context.Context, in *AddGameReq, opts ...grpc.CallOption) (*AddGameRsp, error) GetGames(ctx context.Context, in *GetGamesReq, opts ...grpc.CallOption) (*GetGamesRsp, error) GetGame(ctx context.Context, in *GetGameReq, opts ...grpc.CallOption) (*GetGameRsp, error) + GetGameAnswers(ctx context.Context, in *GetGameAnswersReq, opts ...grpc.CallOption) (*GetGameAnswersRsp, error) UpdateGame(ctx context.Context, in *UpdateGameReq, opts ...grpc.CallOption) (*UpdateGameRsp, error) StartGame(ctx context.Context, in *StartGameReq, opts ...grpc.CallOption) (*StartGameRsp, error) PauseGame(ctx context.Context, in *PauseGameReq, opts ...grpc.CallOption) (*PauseGameRsp, error) @@ -126,6 +137,9 @@ type EveningDetectiveServerClient interface { GetTeamStory(ctx context.Context, in *GetTeamStoryReq, opts ...grpc.CallOption) (*GetTeamStoryRsp, error) AddTeamAction(ctx context.Context, in *AddTeamActionReq, opts ...grpc.CallOption) (*AddTeamActionRsp, error) DeleteLastTeamAction(ctx context.Context, in *DeleteLastTeamActionReq, opts ...grpc.CallOption) (*DeleteLastTeamActionRsp, error) + GetTeamAnswers(ctx context.Context, in *GetTeamAnswersReq, opts ...grpc.CallOption) (*GetTeamAnswersRsp, error) + SubmitTeamAnswers(ctx context.Context, in *SubmitTeamAnswersReq, opts ...grpc.CallOption) (*SubmitTeamAnswersRsp, error) + SetTeamAnswerScore(ctx context.Context, in *SetTeamAnswerScoreReq, opts ...grpc.CallOption) (*SetTeamAnswerScoreRsp, error) } type eveningDetectiveServerClient struct { @@ -436,6 +450,36 @@ func (c *eveningDetectiveServerClient) DeleteScenarioPlace(ctx context.Context, return out, nil } +func (c *eveningDetectiveServerClient) AddScenarioQuestion(ctx context.Context, in *AddScenarioQuestionReq, opts ...grpc.CallOption) (*AddScenarioQuestionRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(AddScenarioQuestionRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_AddScenarioQuestion_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eveningDetectiveServerClient) UpdateScenarioQuestion(ctx context.Context, in *UpdateScenarioQuestionReq, opts ...grpc.CallOption) (*UpdateScenarioQuestionRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdateScenarioQuestionRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_UpdateScenarioQuestion_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eveningDetectiveServerClient) DeleteScenarioQuestion(ctx context.Context, in *DeleteScenarioQuestionReq, opts ...grpc.CallOption) (*DeleteScenarioQuestionRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(DeleteScenarioQuestionRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_DeleteScenarioQuestion_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *eveningDetectiveServerClient) UpdateScenarioIntro(ctx context.Context, in *UpdateScenarioIntroReq, opts ...grpc.CallOption) (*UpdateScenarioIntroRsp, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(UpdateScenarioIntroRsp) @@ -496,6 +540,16 @@ func (c *eveningDetectiveServerClient) GetGame(ctx context.Context, in *GetGameR return out, nil } +func (c *eveningDetectiveServerClient) GetGameAnswers(ctx context.Context, in *GetGameAnswersReq, opts ...grpc.CallOption) (*GetGameAnswersRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetGameAnswersRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_GetGameAnswers_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *eveningDetectiveServerClient) UpdateGame(ctx context.Context, in *UpdateGameReq, opts ...grpc.CallOption) (*UpdateGameRsp, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(UpdateGameRsp) @@ -636,6 +690,36 @@ func (c *eveningDetectiveServerClient) DeleteLastTeamAction(ctx context.Context, return out, nil } +func (c *eveningDetectiveServerClient) GetTeamAnswers(ctx context.Context, in *GetTeamAnswersReq, opts ...grpc.CallOption) (*GetTeamAnswersRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetTeamAnswersRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_GetTeamAnswers_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eveningDetectiveServerClient) SubmitTeamAnswers(ctx context.Context, in *SubmitTeamAnswersReq, opts ...grpc.CallOption) (*SubmitTeamAnswersRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SubmitTeamAnswersRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_SubmitTeamAnswers_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *eveningDetectiveServerClient) SetTeamAnswerScore(ctx context.Context, in *SetTeamAnswerScoreReq, opts ...grpc.CallOption) (*SetTeamAnswerScoreRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(SetTeamAnswerScoreRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_SetTeamAnswerScore_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // EveningDetectiveServerServer is the server API for EveningDetectiveServer service. // All implementations must embed UnimplementedEveningDetectiveServerServer // for forward compatibility. @@ -670,12 +754,16 @@ type EveningDetectiveServerServer interface { AddScenarioPlace(context.Context, *AddScenarioPlaceReq) (*AddScenarioPlaceRsp, error) UpdateScenarioPlace(context.Context, *UpdateScenarioPlaceReq) (*UpdateScenarioPlaceRsp, error) DeleteScenarioPlace(context.Context, *DeleteScenarioPlaceReq) (*DeleteScenarioPlaceRsp, error) + AddScenarioQuestion(context.Context, *AddScenarioQuestionReq) (*AddScenarioQuestionRsp, error) + UpdateScenarioQuestion(context.Context, *UpdateScenarioQuestionReq) (*UpdateScenarioQuestionRsp, error) + DeleteScenarioQuestion(context.Context, *DeleteScenarioQuestionReq) (*DeleteScenarioQuestionRsp, error) UpdateScenarioIntro(context.Context, *UpdateScenarioIntroReq) (*UpdateScenarioIntroRsp, error) DownloadScenarioArchive(context.Context, *DownloadScenarioArchiveReq) (*httpbody.HttpBody, error) UploadScenarioArchive(context.Context, *httpbody.HttpBody) (*UploadScenarioArchiveRsp, error) AddGame(context.Context, *AddGameReq) (*AddGameRsp, error) GetGames(context.Context, *GetGamesReq) (*GetGamesRsp, error) GetGame(context.Context, *GetGameReq) (*GetGameRsp, error) + GetGameAnswers(context.Context, *GetGameAnswersReq) (*GetGameAnswersRsp, error) UpdateGame(context.Context, *UpdateGameReq) (*UpdateGameRsp, error) StartGame(context.Context, *StartGameReq) (*StartGameRsp, error) PauseGame(context.Context, *PauseGameReq) (*PauseGameRsp, error) @@ -690,6 +778,9 @@ type EveningDetectiveServerServer interface { GetTeamStory(context.Context, *GetTeamStoryReq) (*GetTeamStoryRsp, error) AddTeamAction(context.Context, *AddTeamActionReq) (*AddTeamActionRsp, error) DeleteLastTeamAction(context.Context, *DeleteLastTeamActionReq) (*DeleteLastTeamActionRsp, error) + GetTeamAnswers(context.Context, *GetTeamAnswersReq) (*GetTeamAnswersRsp, error) + SubmitTeamAnswers(context.Context, *SubmitTeamAnswersReq) (*SubmitTeamAnswersRsp, error) + SetTeamAnswerScore(context.Context, *SetTeamAnswerScoreReq) (*SetTeamAnswerScoreRsp, error) mustEmbedUnimplementedEveningDetectiveServerServer() } @@ -790,6 +881,15 @@ func (UnimplementedEveningDetectiveServerServer) UpdateScenarioPlace(context.Con func (UnimplementedEveningDetectiveServerServer) DeleteScenarioPlace(context.Context, *DeleteScenarioPlaceReq) (*DeleteScenarioPlaceRsp, error) { return nil, status.Error(codes.Unimplemented, "method DeleteScenarioPlace not implemented") } +func (UnimplementedEveningDetectiveServerServer) AddScenarioQuestion(context.Context, *AddScenarioQuestionReq) (*AddScenarioQuestionRsp, error) { + return nil, status.Error(codes.Unimplemented, "method AddScenarioQuestion not implemented") +} +func (UnimplementedEveningDetectiveServerServer) UpdateScenarioQuestion(context.Context, *UpdateScenarioQuestionReq) (*UpdateScenarioQuestionRsp, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateScenarioQuestion not implemented") +} +func (UnimplementedEveningDetectiveServerServer) DeleteScenarioQuestion(context.Context, *DeleteScenarioQuestionReq) (*DeleteScenarioQuestionRsp, error) { + return nil, status.Error(codes.Unimplemented, "method DeleteScenarioQuestion not implemented") +} func (UnimplementedEveningDetectiveServerServer) UpdateScenarioIntro(context.Context, *UpdateScenarioIntroReq) (*UpdateScenarioIntroRsp, error) { return nil, status.Error(codes.Unimplemented, "method UpdateScenarioIntro not implemented") } @@ -808,6 +908,9 @@ func (UnimplementedEveningDetectiveServerServer) GetGames(context.Context, *GetG func (UnimplementedEveningDetectiveServerServer) GetGame(context.Context, *GetGameReq) (*GetGameRsp, error) { return nil, status.Error(codes.Unimplemented, "method GetGame not implemented") } +func (UnimplementedEveningDetectiveServerServer) GetGameAnswers(context.Context, *GetGameAnswersReq) (*GetGameAnswersRsp, error) { + return nil, status.Error(codes.Unimplemented, "method GetGameAnswers not implemented") +} func (UnimplementedEveningDetectiveServerServer) UpdateGame(context.Context, *UpdateGameReq) (*UpdateGameRsp, error) { return nil, status.Error(codes.Unimplemented, "method UpdateGame not implemented") } @@ -850,6 +953,15 @@ func (UnimplementedEveningDetectiveServerServer) AddTeamAction(context.Context, func (UnimplementedEveningDetectiveServerServer) DeleteLastTeamAction(context.Context, *DeleteLastTeamActionReq) (*DeleteLastTeamActionRsp, error) { return nil, status.Error(codes.Unimplemented, "method DeleteLastTeamAction not implemented") } +func (UnimplementedEveningDetectiveServerServer) GetTeamAnswers(context.Context, *GetTeamAnswersReq) (*GetTeamAnswersRsp, error) { + return nil, status.Error(codes.Unimplemented, "method GetTeamAnswers not implemented") +} +func (UnimplementedEveningDetectiveServerServer) SubmitTeamAnswers(context.Context, *SubmitTeamAnswersReq) (*SubmitTeamAnswersRsp, error) { + return nil, status.Error(codes.Unimplemented, "method SubmitTeamAnswers not implemented") +} +func (UnimplementedEveningDetectiveServerServer) SetTeamAnswerScore(context.Context, *SetTeamAnswerScoreReq) (*SetTeamAnswerScoreRsp, error) { + return nil, status.Error(codes.Unimplemented, "method SetTeamAnswerScore not implemented") +} func (UnimplementedEveningDetectiveServerServer) mustEmbedUnimplementedEveningDetectiveServerServer() { } func (UnimplementedEveningDetectiveServerServer) testEmbeddedByValue() {} @@ -1412,6 +1524,60 @@ func _EveningDetectiveServer_DeleteScenarioPlace_Handler(srv interface{}, ctx co return interceptor(ctx, in, info, handler) } +func _EveningDetectiveServer_AddScenarioQuestion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AddScenarioQuestionReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).AddScenarioQuestion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_AddScenarioQuestion_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).AddScenarioQuestion(ctx, req.(*AddScenarioQuestionReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _EveningDetectiveServer_UpdateScenarioQuestion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateScenarioQuestionReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).UpdateScenarioQuestion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_UpdateScenarioQuestion_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).UpdateScenarioQuestion(ctx, req.(*UpdateScenarioQuestionReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _EveningDetectiveServer_DeleteScenarioQuestion_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteScenarioQuestionReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).DeleteScenarioQuestion(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_DeleteScenarioQuestion_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).DeleteScenarioQuestion(ctx, req.(*DeleteScenarioQuestionReq)) + } + return interceptor(ctx, in, info, handler) +} + func _EveningDetectiveServer_UpdateScenarioIntro_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(UpdateScenarioIntroReq) if err := dec(in); err != nil { @@ -1520,6 +1686,24 @@ func _EveningDetectiveServer_GetGame_Handler(srv interface{}, ctx context.Contex return interceptor(ctx, in, info, handler) } +func _EveningDetectiveServer_GetGameAnswers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetGameAnswersReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).GetGameAnswers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_GetGameAnswers_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).GetGameAnswers(ctx, req.(*GetGameAnswersReq)) + } + return interceptor(ctx, in, info, handler) +} + func _EveningDetectiveServer_UpdateGame_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(UpdateGameReq) if err := dec(in); err != nil { @@ -1772,6 +1956,60 @@ func _EveningDetectiveServer_DeleteLastTeamAction_Handler(srv interface{}, ctx c return interceptor(ctx, in, info, handler) } +func _EveningDetectiveServer_GetTeamAnswers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetTeamAnswersReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).GetTeamAnswers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_GetTeamAnswers_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).GetTeamAnswers(ctx, req.(*GetTeamAnswersReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _EveningDetectiveServer_SubmitTeamAnswers_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SubmitTeamAnswersReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).SubmitTeamAnswers(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_SubmitTeamAnswers_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).SubmitTeamAnswers(ctx, req.(*SubmitTeamAnswersReq)) + } + return interceptor(ctx, in, info, handler) +} + +func _EveningDetectiveServer_SetTeamAnswerScore_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetTeamAnswerScoreReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).SetTeamAnswerScore(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_SetTeamAnswerScore_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).SetTeamAnswerScore(ctx, req.(*SetTeamAnswerScoreReq)) + } + return interceptor(ctx, in, info, handler) +} + // EveningDetectiveServer_ServiceDesc is the grpc.ServiceDesc for EveningDetectiveServer service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1899,6 +2137,18 @@ var EveningDetectiveServer_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeleteScenarioPlace", Handler: _EveningDetectiveServer_DeleteScenarioPlace_Handler, }, + { + MethodName: "AddScenarioQuestion", + Handler: _EveningDetectiveServer_AddScenarioQuestion_Handler, + }, + { + MethodName: "UpdateScenarioQuestion", + Handler: _EveningDetectiveServer_UpdateScenarioQuestion_Handler, + }, + { + MethodName: "DeleteScenarioQuestion", + Handler: _EveningDetectiveServer_DeleteScenarioQuestion_Handler, + }, { MethodName: "UpdateScenarioIntro", Handler: _EveningDetectiveServer_UpdateScenarioIntro_Handler, @@ -1923,6 +2173,10 @@ var EveningDetectiveServer_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetGame", Handler: _EveningDetectiveServer_GetGame_Handler, }, + { + MethodName: "GetGameAnswers", + Handler: _EveningDetectiveServer_GetGameAnswers_Handler, + }, { MethodName: "UpdateGame", Handler: _EveningDetectiveServer_UpdateGame_Handler, @@ -1979,6 +2233,18 @@ var EveningDetectiveServer_ServiceDesc = grpc.ServiceDesc{ MethodName: "DeleteLastTeamAction", Handler: _EveningDetectiveServer_DeleteLastTeamAction_Handler, }, + { + MethodName: "GetTeamAnswers", + Handler: _EveningDetectiveServer_GetTeamAnswers_Handler, + }, + { + MethodName: "SubmitTeamAnswers", + Handler: _EveningDetectiveServer_SubmitTeamAnswers_Handler, + }, + { + MethodName: "SetTeamAnswerScore", + Handler: _EveningDetectiveServer_SetTeamAnswerScore_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "main.proto",