diff --git a/api/main.proto b/api/main.proto index 6d7a34e..06f9d95 100644 --- a/api/main.proto +++ b/api/main.proto @@ -470,6 +470,16 @@ service EveningDetectiveServer { }; } + rpc GetGameResults(GetGameResultsReq) returns (GetGameResultsRsp) { + option (google.api.http) = { + get: "/api/games/{gameId}/results" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Игры"; + summary: "Получить итоговую таблицу игры (после завершения)"; + }; + } + rpc UpdateGame(UpdateGameReq) returns (UpdateGameRsp) { option (google.api.http) = { put : "/api/games/{id}" @@ -1115,6 +1125,37 @@ message GetGameAnswersRsp { repeated TeamAnswers teams = 3; } +message GetGameResultsReq { + int32 gameId = 1; +} + +// Вопрос в шапке итоговой таблицы: правильный ответ (поле answer сообщения +// Question) командам/таблице не передаётся — он виден только в панели оценки. +message ResultsQuestion { + string code = 1; + string text = 2; +} + +// Строка итоговой таблицы: команда, баллы по вопросам, сумма и место. +message TeamResult { + Team team = 1; + repeated AnswerScore answers = 2; + // Сумма баллов по всем вопросам сценария (неоценённые считаются как 0) + int32 total_score = 3; + // Место в итоговой таблице: команды с одинаковой суммой баллов и + // одинаковым числом ходов занимают одно место (следующее пропускается) + int32 place = 4; + // Количество ходов команды (дублирует team.actions_count для удобства + // таблицы; участвует в тай-брейке при равенстве суммы баллов) + int32 actions_count = 5; +} + +message GetGameResultsRsp { + string error = 1; + repeated ResultsQuestion questions = 2; + repeated TeamResult teams = 3; +} + message UpdateGameReq { int32 id = 1; string name = 2; diff --git a/bin/evening_detective_server b/bin/evening_detective_server index 3eb1722..a3b1683 100755 Binary files a/bin/evening_detective_server and b/bin/evening_detective_server differ diff --git a/cmd/evening_detective_server/main.swagger.json b/cmd/evening_detective_server/main.swagger.json index 99fb448..cd362ea 100644 --- a/cmd/evening_detective_server/main.swagger.json +++ b/cmd/evening_detective_server/main.swagger.json @@ -388,6 +388,38 @@ ] } }, + "/api/games/{gameId}/results": { + "get": { + "summary": "Получить итоговую таблицу игры (после завершения)", + "operationId": "EveningDetectiveServer_GetGameResults", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverGetGameResultsRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "gameId", + "in": "path", + "required": true, + "type": "integer", + "format": "int32" + } + ], + "tags": [ + "Игры" + ] + } + }, "/api/games/{id}": { "get": { "summary": "Получить игру", @@ -2514,6 +2546,28 @@ } } }, + "evening_detective_serverGetGameResultsRsp": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "questions": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/evening_detective_serverResultsQuestion" + } + }, + "teams": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/evening_detective_serverTeamResult" + } + } + } + }, "evening_detective_serverGetGameRsp": { "type": "object", "properties": { @@ -2867,6 +2921,18 @@ } } }, + "evening_detective_serverResultsQuestion": { + "type": "object", + "properties": { + "code": { + "type": "string" + }, + "text": { + "type": "string" + } + }, + "description": "Вопрос в шапке итоговой таблицы: правильный ответ (поле answer сообщения\nQuestion) командам/таблице не передаётся — он виден только в панели оценки." + }, "evening_detective_serverScenario": { "type": "object", "properties": { @@ -3022,6 +3088,37 @@ }, "title": "Ответы одной команды на вопросы дела" }, + "evening_detective_serverTeamResult": { + "type": "object", + "properties": { + "team": { + "$ref": "#/definitions/evening_detective_serverTeam" + }, + "answers": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/evening_detective_serverAnswerScore" + } + }, + "totalScore": { + "type": "integer", + "format": "int32", + "title": "Сумма баллов по всем вопросам сценария (неоценённые считаются как 0)" + }, + "place": { + "type": "integer", + "format": "int32", + "title": "Место в итоговой таблице: команды с одинаковой суммой баллов и\nодинаковым числом ходов занимают одно место (следующее пропускается)" + }, + "actionsCount": { + "type": "integer", + "format": "int32", + "title": "Количество ходов команды (дублирует team.actions_count для удобства\nтаблицы; участвует в тай-брейке при равенстве суммы баллов)" + } + }, + "description": "Строка итоговой таблицы: команда, баллы по вопросам, сумма и место." + }, "evening_detective_serverUpdateGameRsp": { "type": "object", "properties": { diff --git a/internal/app/results_mapper.go b/internal/app/results_mapper.go new file mode 100644 index 0000000..09b2e3e --- /dev/null +++ b/internal/app/results_mapper.go @@ -0,0 +1,38 @@ +package app + +import ( + "evening_detective_server/internal/modules/storytelling" + "evening_detective_server/internal/services/game_service" + proto "evening_detective_server/proto" +) + +// mapResultsQuestions мапит вопросы сценария в шапку итоговой таблицы: +// правильный ответ (поле Answer) не передаётся — он виден только в панели +// оценки (GetGameAnswers). +func mapResultsQuestions(o []*storytelling.Question) []*proto.ResultsQuestion { + res := make([]*proto.ResultsQuestion, 0, len(o)) + for _, item := range o { + res = append(res, &proto.ResultsQuestion{ + Code: item.Code, + Text: item.Text, + }) + } + return res +} + +// mapTeamResults мапит строки итоговой таблицы. Команда мапится целиком +// (включая password/applications — аудитория та же, что у GetGameAnswers: +// организатор/автор); actionsCount продублирован на уровне строки таблицы. +func mapTeamResults(o []game_service.TeamResult) []*proto.TeamResult { + res := make([]*proto.TeamResult, 0, len(o)) + for _, item := range o { + res = append(res, &proto.TeamResult{ + Team: mapTeam(item.Team), + Answers: mapAnswerScores(item.Answers), + TotalScore: int32(item.TotalScore), + Place: int32(item.Place), + ActionsCount: int32(item.Team.ActionsCount), + }) + } + return res +} diff --git a/internal/app/results_mapper_test.go b/internal/app/results_mapper_test.go new file mode 100644 index 0000000..865553b --- /dev/null +++ b/internal/app/results_mapper_test.go @@ -0,0 +1,45 @@ +package app + +import ( + "testing" + + "evening_detective_server/internal/services/game_service" +) + +func TestMapTeamResults(t *testing.T) { + sc := 5 + results := []game_service.TeamResult{ + { + Team: &game_service.Team{ + ID: 1, + Name: "Команда А", + Status: "play", + ActionsCount: 7, + }, + Answers: []game_service.AnswerScore{ + {QuestionCode: "q1", Text: "ответ", Score: &sc}, + }, + TotalScore: 5, + Place: 1, + }, + } + + got := mapTeamResults(results) + if len(got) != 1 { + t.Fatalf("len(mapTeamResults) = %d, want 1", len(got)) + } + row := got[0] + if row.Team == nil || row.Team.Id != 1 || row.Team.Name != "Команда А" { + t.Fatalf("row.Team = %+v, want id 1, name Команда А", row.Team) + } + // actionsCount продублирован на уровне строки таблицы. + if row.ActionsCount != 7 { + t.Fatalf("row.ActionsCount = %d, want 7", row.ActionsCount) + } + if row.TotalScore != 5 || row.Place != 1 { + t.Fatalf("row.TotalScore = %d, row.Place = %d; want 5 и 1", row.TotalScore, row.Place) + } + if len(row.Answers) != 1 || row.Answers[0].QuestionCode != "q1" { + t.Fatalf("row.Answers = %+v, want один ответ q1", row.Answers) + } +} diff --git a/internal/app/server.go b/internal/app/server.go index 8c693b2..50b4709 100644 --- a/internal/app/server.go +++ b/internal/app/server.go @@ -848,6 +848,25 @@ func (s *server) GetGameAnswers(ctx context.Context, req *proto.GetGameAnswersRe }, nil } +func (s *server) GetGameResults(ctx context.Context, req *proto.GetGameResultsReq) (*proto.GetGameResultsRsp, 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") + } + + results, err := s.gameService.GetGameResults(ctx, int(req.GameId)) + if err != nil { + return &proto.GetGameResultsRsp{ + Error: err.Error(), + }, nil + } + + return &proto.GetGameResultsRsp{ + Questions: mapResultsQuestions(results.Questions), + Teams: mapTeamResults(results.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) { diff --git a/internal/services/game_service/results.go b/internal/services/game_service/results.go new file mode 100644 index 0000000..52e3e00 --- /dev/null +++ b/internal/services/game_service/results.go @@ -0,0 +1,93 @@ +package game_service + +import ( + "sort" + + "evening_detective_server/internal/modules/storytelling" +) + +// TeamResult — строка итоговой таблицы: команда, баллы по вопросам (в порядке +// сценария), сумма баллов и место. +type TeamResult struct { + Team *Team + Answers []AnswerScore + // TotalScore — сумма баллов по всем вопросам сценария; неоценённые + // вопросы считаются как 0. + TotalScore int + // Place — место в итоговой таблице. Команды с одинаковой суммой баллов + // и одинаковым числом ходов занимают одно место (следующее место + // пропускается); проставляется функцией rankTeams. + Place int +} + +// GameResults — итоговая таблица игры: вопросы сценария (шапка таблицы) и +// результаты команд, отсортированные по сумме баллов. +type GameResults struct { + Questions []*storytelling.Question + Teams []TeamResult +} + +// buildTeamResults собирает строки итоговой таблицы по командам: баллы в +// порядке вопросов сценария (неотвеченный/неоценённый вопрос — с пустым +// текстом и Score=nil), сумма баллов (nil считается как 0). Команды в +// результате — в порядке переданного списка; сортировку и места делает +// rankTeams. +func buildTeamResults( + questions []*storytelling.Question, + teams []*Team, + answerByTeamAndCode map[int]map[string]AnswerScore, +) []TeamResult { + res := make([]TeamResult, 0, len(teams)) + for _, team := range teams { + byCode := answerByTeamAndCode[team.ID] + answers := make([]AnswerScore, 0, len(questions)) + total := 0 + for _, question := range questions { + answer, ok := byCode[question.Code] + if !ok { + answers = append(answers, AnswerScore{QuestionCode: question.Code}) + continue + } + answers = append(answers, answer) + if answer.Score != nil { + total += *answer.Score + } + } + res = append(res, TeamResult{ + Team: team, + Answers: answers, + TotalScore: total, + }) + } + return res +} + +// rankTeams сортирует строки итоговой таблицы по сумме баллов (убывание); +// при равенстве суммы выше команда с меньшим числом ходов. Команды с +// одинаковой суммой баллов И одинаковым числом ходов занимают одно место +// (следующее место пропускается — схема 1,2,2,4 по ключу (сумма, ходы)). +// id команды влияет только на порядок показа внутри группы (меньший id +// первым), не на место. Входной срез не изменяется. +func rankTeams(rows []TeamResult) []TeamResult { + sorted := make([]TeamResult, len(rows)) + copy(sorted, rows) + sort.SliceStable(sorted, func(i, j int) bool { + a, b := sorted[i], sorted[j] + if a.TotalScore != b.TotalScore { + return a.TotalScore > b.TotalScore + } + if a.Team.ActionsCount != b.Team.ActionsCount { + return a.Team.ActionsCount < b.Team.ActionsCount + } + return a.Team.ID < b.Team.ID + }) + place := 0 + for i := range sorted { + row := sorted[i] + if i == 0 || row.TotalScore != sorted[i-1].TotalScore || row.Team.ActionsCount != sorted[i-1].Team.ActionsCount { + place = i + 1 + } + sorted[i].Place = place + } + return sorted +} diff --git a/internal/services/game_service/results_test.go b/internal/services/game_service/results_test.go new file mode 100644 index 0000000..52e69e3 --- /dev/null +++ b/internal/services/game_service/results_test.go @@ -0,0 +1,153 @@ +package game_service + +import ( + "testing" + + "evening_detective_server/internal/modules/storytelling" +) + +func intPtr(v int) *int { return &v } + +func teamResult(id, actions, total int) TeamResult { + return TeamResult{ + Team: &Team{ID: id, ActionsCount: actions}, + TotalScore: total, + } +} + +func TestRankTeamsSortsByTotalThenActions(t *testing.T) { + // У всех команд разный ключ (сумма, ходы) — места идут подряд 1..N. + rows := []TeamResult{ + teamResult(3, 5, 10), + teamResult(1, 3, 10), + teamResult(2, 1, 12), + teamResult(4, 7, 8), + } + got := rankTeams(rows) + + wantIDs := []int{2, 1, 3, 4} + wantPlaces := []int{1, 2, 3, 4} + for i, id := range wantIDs { + if got[i].Team.ID != id { + t.Fatalf("rankTeams[%d].Team.ID = %d, want %d (порядок: total desc, actions asc)", i, got[i].Team.ID, id) + } + if got[i].Place != wantPlaces[i] { + t.Fatalf("rankTeams[%d].Place = %d, want %d", i, got[i].Place, wantPlaces[i]) + } + } + // Команды 1 и 3 имеют одинаковую сумму (10), но разные ходы — разные места. + if got[1].Place == got[2].Place { + t.Fatalf("равные суммы при разных ходах должны давать разные места: places = %d, %d", got[1].Place, got[2].Place) + } +} + +func TestRankTeamsSharesPlaceOnEqualTotalAndActions(t *testing.T) { + // Одинаковая сумма И одинаковое число ходов — одно место у всех трёх. + rows := []TeamResult{ + teamResult(5, 4, 9), + teamResult(2, 4, 9), + teamResult(7, 4, 9), + } + got := rankTeams(rows) + + // Внутри группы порядок показа — по id asc (детерминированный). + wantIDs := []int{2, 5, 7} + for i, id := range wantIDs { + if got[i].Team.ID != id { + t.Fatalf("rankTeams[%d].Team.ID = %d, want %d (порядок показа внутри группы — id asc)", i, got[i].Team.ID, id) + } + if got[i].Place != 1 { + t.Fatalf("rankTeams[%d].Place = %d, want 1 (одно место у равных по сумме и ходам)", i, got[i].Place) + } + } +} + +func TestRankTeamsSkipsPlaceAfterSharedTie(t *testing.T) { + // Две команды делят 1-е место, следующая получает 3-е (схема 1,1,3). + rows := []TeamResult{ + teamResult(3, 2, 7), + teamResult(1, 5, 10), + teamResult(2, 5, 10), + teamResult(4, 9, 5), + } + got := rankTeams(rows) + + wantIDs := []int{1, 2, 3, 4} + wantPlaces := []int{1, 1, 3, 4} + for i := range wantIDs { + if got[i].Team.ID != wantIDs[i] { + t.Fatalf("rankTeams[%d].Team.ID = %d, want %d", i, got[i].Team.ID, wantIDs[i]) + } + if got[i].Place != wantPlaces[i] { + t.Fatalf("rankTeams[%d].Place = %d, want %d (места 1,1,3,4)", i, got[i].Place, wantPlaces[i]) + } + } +} + +func TestRankTeamsDoesNotMutateInput(t *testing.T) { + rows := []TeamResult{ + teamResult(1, 1, 5), + teamResult(2, 1, 5), + } + rankTeams(rows) + + if rows[0].Place != 0 || rows[1].Place != 0 { + t.Fatalf("rankTeams изменил входной срез: places = %d, %d; want 0, 0", rows[0].Place, rows[1].Place) + } + if rows[0].Team.ID != 1 || rows[1].Team.ID != 2 { + t.Fatalf("rankTeams изменил порядок входного среза: ids = %d, %d; want 1, 2", rows[0].Team.ID, rows[1].Team.ID) + } +} + +func TestBuildTeamResultsScenarioOrderAndNilScores(t *testing.T) { + questions := []*storytelling.Question{ + {Code: "q1", Text: "Вопрос 1"}, + {Code: "q2", Text: "Вопрос 2"}, + {Code: "q3", Text: "Вопрос 3"}, + } + teams := []*Team{ + {ID: 1, Name: "А", ActionsCount: 4}, + {ID: 2, Name: "Б", ActionsCount: 2}, + } + answerByTeamAndCode := map[int]map[string]AnswerScore{ + 1: { + "q1": {QuestionCode: "q1", Text: "ответ 1", Score: intPtr(5)}, + "q3": {QuestionCode: "q3", Text: "ответ 3", Score: intPtr(-1)}, + }, + 2: { + "q2": {QuestionCode: "q2", Text: "ответ 2"}, // балл не выставлен + }, + } + + got := buildTeamResults(questions, teams, answerByTeamAndCode) + + if len(got) != 2 { + t.Fatalf("len(buildTeamResults) = %d, want 2", len(got)) + } + + // Команда 1: q1(5), q2 не отвечен, q3(-1) → сумма 4. + first := got[0] + if first.Team.ID != 1 || first.TotalScore != 4 { + t.Fatalf("команда 1: Team.ID = %d, TotalScore = %d; want ID 1, Total 4", first.Team.ID, first.TotalScore) + } + if len(first.Answers) != 3 { + t.Fatalf("команда 1: len(Answers) = %d, want 3 (порядок сценария)", len(first.Answers)) + } + for i, wantCode := range []string{"q1", "q2", "q3"} { + if first.Answers[i].QuestionCode != wantCode { + t.Fatalf("команда 1: Answers[%d].QuestionCode = %q, want %q", i, first.Answers[i].QuestionCode, wantCode) + } + } + if first.Answers[1].Score != nil || first.Answers[1].Text != "" { + t.Fatalf("команда 1: неотвеченный q2 = %+v, want Score=nil и Text=\"\"", first.Answers[1]) + } + + // Команда 2: все не оценены → сумма 0. + second := got[1] + if second.Team.ID != 2 || second.TotalScore != 0 { + t.Fatalf("команда 2: Team.ID = %d, TotalScore = %d; want ID 2, Total 0", second.Team.ID, second.TotalScore) + } + if second.Answers[1].Score != nil { + t.Fatalf("команда 2: неоценённый q2: Score = %v, want nil", second.Answers[1].Score) + } +} diff --git a/internal/services/game_service/service.go b/internal/services/game_service/service.go index 8bf9f7b..a6fa9c6 100644 --- a/internal/services/game_service/service.go +++ b/internal/services/game_service/service.go @@ -321,6 +321,8 @@ var ( ErrGameNotStarted = errors.New("Игра не начата, отвечать на вопросы нельзя") // ErrQuestionNotFound — вопрос с таким кодом отсутствует в сценарии игры. ErrQuestionNotFound = errors.New("Вопрос не найден") + // ErrGameNotFinished — итоги игры доступны только после её завершения. + ErrGameNotFinished = errors.New("Итоги доступны после завершения игры") ) // getTeamAndGame проверяет команду по паролю и возвращает её вместе с игрой. @@ -500,3 +502,62 @@ func (s *GameService) SetTeamAnswerScore(ctx context.Context, teamId int, questi } return s.answersRepo.SetAnswerScore(ctx, teamId, questionCode, score) } + +// GetGameResults возвращает итоговую таблицу игры: вопросы сценария (шапка +// таблицы, без правильных ответов) и команды, отсортированные по сумме +// баллов, с баллами по каждому вопросу (в порядке сценария), числом ходов и +// местом. Доступно только после завершения игры (статус finish); неоценённые +// вопросы в сумме считаются как 0. +func (s *GameService) GetGameResults(ctx context.Context, gameId int) (*GameResults, error) { + game, err := s.gamesRepo.GetGameByID(ctx, gameId) + if err != nil { + return nil, err + } + if game.Status != "finish" { + return nil, ErrGameNotFinished + } + 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 + } + teamIds := make([]int, 0, len(teams)) + for _, team := range teams { + teamIds = append(teamIds, team.ID) + } + actionsCountByTeamIDs, err := s.actionsRepo.GetActionsCountByTeamIDs(ctx, teamIds) + if err != nil { + return nil, err + } + rows, err := s.answersRepo.GetAnswersByGameID(ctx, gameId) + if err != nil { + return nil, err + } + answerByTeamAndCode := make(map[int]map[string]AnswerScore, len(teams)) + for _, row := range rows { + if _, ok := byCode[row.QuestionCode]; !ok { + continue + } + if answerByTeamAndCode[row.TeamId] == nil { + answerByTeamAndCode[row.TeamId] = make(map[string]AnswerScore, len(questions)) + } + answerByTeamAndCode[row.TeamId][row.QuestionCode] = AnswerScore{ + QuestionCode: row.QuestionCode, + Text: row.Text, + Score: row.Score, + } + } + mappedTeams := make([]*Team, 0, len(teams)) + for _, team := range teams { + mapped := mapTeam(team) + mapped.ActionsCount = actionsCountByTeamIDs[team.ID] + mappedTeams = append(mappedTeams, mapped) + } + return &GameResults{ + Questions: questions, + Teams: rankTeams(buildTeamResults(questions, mappedTeams, answerByTeamAndCode)), + }, nil +} diff --git a/proto/main.pb.go b/proto/main.pb.go index d706b82..522baf3 100644 --- a/proto/main.pb.go +++ b/proto/main.pb.go @@ -4604,6 +4604,246 @@ func (x *GetGameAnswersRsp) GetTeams() []*TeamAnswers { return nil } +type GetGameResultsReq 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 *GetGameResultsReq) Reset() { + *x = GetGameResultsReq{} + mi := &file_main_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetGameResultsReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGameResultsReq) ProtoMessage() {} + +func (x *GetGameResultsReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[89] + 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 GetGameResultsReq.ProtoReflect.Descriptor instead. +func (*GetGameResultsReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{89} +} + +func (x *GetGameResultsReq) GetGameId() int32 { + if x != nil { + return x.GameId + } + return 0 +} + +// Вопрос в шапке итоговой таблицы: правильный ответ (поле answer сообщения +// Question) командам/таблице не передаётся — он виден только в панели оценки. +type ResultsQuestion 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"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ResultsQuestion) Reset() { + *x = ResultsQuestion{} + mi := &file_main_proto_msgTypes[90] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ResultsQuestion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResultsQuestion) ProtoMessage() {} + +func (x *ResultsQuestion) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[90] + 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 ResultsQuestion.ProtoReflect.Descriptor instead. +func (*ResultsQuestion) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{90} +} + +func (x *ResultsQuestion) GetCode() string { + if x != nil { + return x.Code + } + return "" +} + +func (x *ResultsQuestion) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +// Строка итоговой таблицы: команда, баллы по вопросам, сумма и место. +type TeamResult 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"` + // Сумма баллов по всем вопросам сценария (неоценённые считаются как 0) + TotalScore int32 `protobuf:"varint,3,opt,name=total_score,json=totalScore,proto3" json:"total_score,omitempty"` + // Место в итоговой таблице: команды с одинаковой суммой баллов и + // одинаковым числом ходов занимают одно место (следующее пропускается) + Place int32 `protobuf:"varint,4,opt,name=place,proto3" json:"place,omitempty"` + // Количество ходов команды (дублирует team.actions_count для удобства + // таблицы; участвует в тай-брейке при равенстве суммы баллов) + ActionsCount int32 `protobuf:"varint,5,opt,name=actions_count,json=actionsCount,proto3" json:"actions_count,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TeamResult) Reset() { + *x = TeamResult{} + mi := &file_main_proto_msgTypes[91] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TeamResult) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TeamResult) ProtoMessage() {} + +func (x *TeamResult) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[91] + 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 TeamResult.ProtoReflect.Descriptor instead. +func (*TeamResult) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{91} +} + +func (x *TeamResult) GetTeam() *Team { + if x != nil { + return x.Team + } + return nil +} + +func (x *TeamResult) GetAnswers() []*AnswerScore { + if x != nil { + return x.Answers + } + return nil +} + +func (x *TeamResult) GetTotalScore() int32 { + if x != nil { + return x.TotalScore + } + return 0 +} + +func (x *TeamResult) GetPlace() int32 { + if x != nil { + return x.Place + } + return 0 +} + +func (x *TeamResult) GetActionsCount() int32 { + if x != nil { + return x.ActionsCount + } + return 0 +} + +type GetGameResultsRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + Questions []*ResultsQuestion `protobuf:"bytes,2,rep,name=questions,proto3" json:"questions,omitempty"` + Teams []*TeamResult `protobuf:"bytes,3,rep,name=teams,proto3" json:"teams,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GetGameResultsRsp) Reset() { + *x = GetGameResultsRsp{} + mi := &file_main_proto_msgTypes[92] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetGameResultsRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetGameResultsRsp) ProtoMessage() {} + +func (x *GetGameResultsRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[92] + 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 GetGameResultsRsp.ProtoReflect.Descriptor instead. +func (*GetGameResultsRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{92} +} + +func (x *GetGameResultsRsp) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +func (x *GetGameResultsRsp) GetQuestions() []*ResultsQuestion { + if x != nil { + return x.Questions + } + return nil +} + +func (x *GetGameResultsRsp) GetTeams() []*TeamResult { + 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"` @@ -4617,7 +4857,7 @@ type UpdateGameReq struct { func (x *UpdateGameReq) Reset() { *x = UpdateGameReq{} - mi := &file_main_proto_msgTypes[89] + mi := &file_main_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4629,7 +4869,7 @@ func (x *UpdateGameReq) String() string { func (*UpdateGameReq) ProtoMessage() {} func (x *UpdateGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[89] + mi := &file_main_proto_msgTypes[93] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4642,7 +4882,7 @@ func (x *UpdateGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGameReq.ProtoReflect.Descriptor instead. func (*UpdateGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{89} + return file_main_proto_rawDescGZIP(), []int{93} } func (x *UpdateGameReq) GetId() int32 { @@ -4689,7 +4929,7 @@ type UpdateGameRsp struct { func (x *UpdateGameRsp) Reset() { *x = UpdateGameRsp{} - mi := &file_main_proto_msgTypes[90] + mi := &file_main_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4701,7 +4941,7 @@ func (x *UpdateGameRsp) String() string { func (*UpdateGameRsp) ProtoMessage() {} func (x *UpdateGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[90] + mi := &file_main_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4714,7 +4954,7 @@ func (x *UpdateGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGameRsp.ProtoReflect.Descriptor instead. func (*UpdateGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{90} + return file_main_proto_rawDescGZIP(), []int{94} } func (x *UpdateGameRsp) GetError() string { @@ -4733,7 +4973,7 @@ type StartGameReq struct { func (x *StartGameReq) Reset() { *x = StartGameReq{} - mi := &file_main_proto_msgTypes[91] + mi := &file_main_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4745,7 +4985,7 @@ func (x *StartGameReq) String() string { func (*StartGameReq) ProtoMessage() {} func (x *StartGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[91] + mi := &file_main_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4758,7 +4998,7 @@ func (x *StartGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use StartGameReq.ProtoReflect.Descriptor instead. func (*StartGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{91} + return file_main_proto_rawDescGZIP(), []int{95} } func (x *StartGameReq) GetId() int32 { @@ -4777,7 +5017,7 @@ type StartGameRsp struct { func (x *StartGameRsp) Reset() { *x = StartGameRsp{} - mi := &file_main_proto_msgTypes[92] + mi := &file_main_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4789,7 +5029,7 @@ func (x *StartGameRsp) String() string { func (*StartGameRsp) ProtoMessage() {} func (x *StartGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[92] + mi := &file_main_proto_msgTypes[96] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4802,7 +5042,7 @@ func (x *StartGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use StartGameRsp.ProtoReflect.Descriptor instead. func (*StartGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{92} + return file_main_proto_rawDescGZIP(), []int{96} } func (x *StartGameRsp) GetError() string { @@ -4821,7 +5061,7 @@ type PauseGameReq struct { func (x *PauseGameReq) Reset() { *x = PauseGameReq{} - mi := &file_main_proto_msgTypes[93] + mi := &file_main_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4833,7 +5073,7 @@ func (x *PauseGameReq) String() string { func (*PauseGameReq) ProtoMessage() {} func (x *PauseGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[93] + mi := &file_main_proto_msgTypes[97] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4846,7 +5086,7 @@ func (x *PauseGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use PauseGameReq.ProtoReflect.Descriptor instead. func (*PauseGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{93} + return file_main_proto_rawDescGZIP(), []int{97} } func (x *PauseGameReq) GetId() int32 { @@ -4865,7 +5105,7 @@ type PauseGameRsp struct { func (x *PauseGameRsp) Reset() { *x = PauseGameRsp{} - mi := &file_main_proto_msgTypes[94] + mi := &file_main_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4877,7 +5117,7 @@ func (x *PauseGameRsp) String() string { func (*PauseGameRsp) ProtoMessage() {} func (x *PauseGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[94] + mi := &file_main_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4890,7 +5130,7 @@ func (x *PauseGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use PauseGameRsp.ProtoReflect.Descriptor instead. func (*PauseGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{94} + return file_main_proto_rawDescGZIP(), []int{98} } func (x *PauseGameRsp) GetError() string { @@ -4909,7 +5149,7 @@ type PlayGameReq struct { func (x *PlayGameReq) Reset() { *x = PlayGameReq{} - mi := &file_main_proto_msgTypes[95] + mi := &file_main_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4921,7 +5161,7 @@ func (x *PlayGameReq) String() string { func (*PlayGameReq) ProtoMessage() {} func (x *PlayGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[95] + mi := &file_main_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4934,7 +5174,7 @@ func (x *PlayGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayGameReq.ProtoReflect.Descriptor instead. func (*PlayGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{95} + return file_main_proto_rawDescGZIP(), []int{99} } func (x *PlayGameReq) GetId() int32 { @@ -4953,7 +5193,7 @@ type PlayGameRsp struct { func (x *PlayGameRsp) Reset() { *x = PlayGameRsp{} - mi := &file_main_proto_msgTypes[96] + mi := &file_main_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4965,7 +5205,7 @@ func (x *PlayGameRsp) String() string { func (*PlayGameRsp) ProtoMessage() {} func (x *PlayGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[96] + mi := &file_main_proto_msgTypes[100] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4978,7 +5218,7 @@ func (x *PlayGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use PlayGameRsp.ProtoReflect.Descriptor instead. func (*PlayGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{96} + return file_main_proto_rawDescGZIP(), []int{100} } func (x *PlayGameRsp) GetError() string { @@ -4997,7 +5237,7 @@ type FinishGameReq struct { func (x *FinishGameReq) Reset() { *x = FinishGameReq{} - mi := &file_main_proto_msgTypes[97] + mi := &file_main_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5009,7 +5249,7 @@ func (x *FinishGameReq) String() string { func (*FinishGameReq) ProtoMessage() {} func (x *FinishGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[97] + mi := &file_main_proto_msgTypes[101] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5022,7 +5262,7 @@ func (x *FinishGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use FinishGameReq.ProtoReflect.Descriptor instead. func (*FinishGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{97} + return file_main_proto_rawDescGZIP(), []int{101} } func (x *FinishGameReq) GetId() int32 { @@ -5041,7 +5281,7 @@ type FinishGameRsp struct { func (x *FinishGameRsp) Reset() { *x = FinishGameRsp{} - mi := &file_main_proto_msgTypes[98] + mi := &file_main_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5053,7 +5293,7 @@ func (x *FinishGameRsp) String() string { func (*FinishGameRsp) ProtoMessage() {} func (x *FinishGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[98] + mi := &file_main_proto_msgTypes[102] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5066,7 +5306,7 @@ func (x *FinishGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use FinishGameRsp.ProtoReflect.Descriptor instead. func (*FinishGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{98} + return file_main_proto_rawDescGZIP(), []int{102} } func (x *FinishGameRsp) GetError() string { @@ -5085,7 +5325,7 @@ type ResetGameReq struct { func (x *ResetGameReq) Reset() { *x = ResetGameReq{} - mi := &file_main_proto_msgTypes[99] + mi := &file_main_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5097,7 +5337,7 @@ func (x *ResetGameReq) String() string { func (*ResetGameReq) ProtoMessage() {} func (x *ResetGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[99] + mi := &file_main_proto_msgTypes[103] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5110,7 +5350,7 @@ func (x *ResetGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetGameReq.ProtoReflect.Descriptor instead. func (*ResetGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{99} + return file_main_proto_rawDescGZIP(), []int{103} } func (x *ResetGameReq) GetId() int32 { @@ -5129,7 +5369,7 @@ type ResetGameRsp struct { func (x *ResetGameRsp) Reset() { *x = ResetGameRsp{} - mi := &file_main_proto_msgTypes[100] + mi := &file_main_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5141,7 +5381,7 @@ func (x *ResetGameRsp) String() string { func (*ResetGameRsp) ProtoMessage() {} func (x *ResetGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[100] + mi := &file_main_proto_msgTypes[104] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5154,7 +5394,7 @@ func (x *ResetGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use ResetGameRsp.ProtoReflect.Descriptor instead. func (*ResetGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{100} + return file_main_proto_rawDescGZIP(), []int{104} } func (x *ResetGameRsp) GetError() string { @@ -5173,7 +5413,7 @@ type DeleteGameReq struct { func (x *DeleteGameReq) Reset() { *x = DeleteGameReq{} - mi := &file_main_proto_msgTypes[101] + mi := &file_main_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5185,7 +5425,7 @@ func (x *DeleteGameReq) String() string { func (*DeleteGameReq) ProtoMessage() {} func (x *DeleteGameReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[101] + mi := &file_main_proto_msgTypes[105] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5198,7 +5438,7 @@ func (x *DeleteGameReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteGameReq.ProtoReflect.Descriptor instead. func (*DeleteGameReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{101} + return file_main_proto_rawDescGZIP(), []int{105} } func (x *DeleteGameReq) GetId() int32 { @@ -5217,7 +5457,7 @@ type DeleteGameRsp struct { func (x *DeleteGameRsp) Reset() { *x = DeleteGameRsp{} - mi := &file_main_proto_msgTypes[102] + mi := &file_main_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5229,7 +5469,7 @@ func (x *DeleteGameRsp) String() string { func (*DeleteGameRsp) ProtoMessage() {} func (x *DeleteGameRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[102] + mi := &file_main_proto_msgTypes[106] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5242,7 +5482,7 @@ func (x *DeleteGameRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteGameRsp.ProtoReflect.Descriptor instead. func (*DeleteGameRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{102} + return file_main_proto_rawDescGZIP(), []int{106} } func (x *DeleteGameRsp) GetError() string { @@ -5262,7 +5502,7 @@ type AddTeamReq struct { func (x *AddTeamReq) Reset() { *x = AddTeamReq{} - mi := &file_main_proto_msgTypes[103] + mi := &file_main_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5274,7 +5514,7 @@ func (x *AddTeamReq) String() string { func (*AddTeamReq) ProtoMessage() {} func (x *AddTeamReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[103] + mi := &file_main_proto_msgTypes[107] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5287,7 +5527,7 @@ func (x *AddTeamReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamReq.ProtoReflect.Descriptor instead. func (*AddTeamReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{103} + return file_main_proto_rawDescGZIP(), []int{107} } func (x *AddTeamReq) GetGameId() int32 { @@ -5315,7 +5555,7 @@ type AddTeamRsp struct { func (x *AddTeamRsp) Reset() { *x = AddTeamRsp{} - mi := &file_main_proto_msgTypes[104] + mi := &file_main_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5327,7 +5567,7 @@ func (x *AddTeamRsp) String() string { func (*AddTeamRsp) ProtoMessage() {} func (x *AddTeamRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[104] + mi := &file_main_proto_msgTypes[108] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5340,7 +5580,7 @@ func (x *AddTeamRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamRsp.ProtoReflect.Descriptor instead. func (*AddTeamRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{104} + return file_main_proto_rawDescGZIP(), []int{108} } func (x *AddTeamRsp) GetError() string { @@ -5374,7 +5614,7 @@ type UpdateTeamReq struct { func (x *UpdateTeamReq) Reset() { *x = UpdateTeamReq{} - mi := &file_main_proto_msgTypes[105] + mi := &file_main_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5386,7 +5626,7 @@ func (x *UpdateTeamReq) String() string { func (*UpdateTeamReq) ProtoMessage() {} func (x *UpdateTeamReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[105] + mi := &file_main_proto_msgTypes[109] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5399,7 +5639,7 @@ func (x *UpdateTeamReq) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTeamReq.ProtoReflect.Descriptor instead. func (*UpdateTeamReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{105} + return file_main_proto_rawDescGZIP(), []int{109} } func (x *UpdateTeamReq) GetId() int32 { @@ -5425,7 +5665,7 @@ type UpdateTeamRsp struct { func (x *UpdateTeamRsp) Reset() { *x = UpdateTeamRsp{} - mi := &file_main_proto_msgTypes[106] + mi := &file_main_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5437,7 +5677,7 @@ func (x *UpdateTeamRsp) String() string { func (*UpdateTeamRsp) ProtoMessage() {} func (x *UpdateTeamRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[106] + mi := &file_main_proto_msgTypes[110] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5450,7 +5690,7 @@ func (x *UpdateTeamRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateTeamRsp.ProtoReflect.Descriptor instead. func (*UpdateTeamRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{106} + return file_main_proto_rawDescGZIP(), []int{110} } func (x *UpdateTeamRsp) GetError() string { @@ -5469,7 +5709,7 @@ type DeleteTeamReq struct { func (x *DeleteTeamReq) Reset() { *x = DeleteTeamReq{} - mi := &file_main_proto_msgTypes[107] + mi := &file_main_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5481,7 +5721,7 @@ func (x *DeleteTeamReq) String() string { func (*DeleteTeamReq) ProtoMessage() {} func (x *DeleteTeamReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[107] + mi := &file_main_proto_msgTypes[111] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5494,7 +5734,7 @@ func (x *DeleteTeamReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTeamReq.ProtoReflect.Descriptor instead. func (*DeleteTeamReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{107} + return file_main_proto_rawDescGZIP(), []int{111} } func (x *DeleteTeamReq) GetId() int64 { @@ -5513,7 +5753,7 @@ type DeleteTeamRsp struct { func (x *DeleteTeamRsp) Reset() { *x = DeleteTeamRsp{} - mi := &file_main_proto_msgTypes[108] + mi := &file_main_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5525,7 +5765,7 @@ func (x *DeleteTeamRsp) String() string { func (*DeleteTeamRsp) ProtoMessage() {} func (x *DeleteTeamRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[108] + mi := &file_main_proto_msgTypes[112] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5538,7 +5778,7 @@ func (x *DeleteTeamRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteTeamRsp.ProtoReflect.Descriptor instead. func (*DeleteTeamRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{108} + return file_main_proto_rawDescGZIP(), []int{112} } func (x *DeleteTeamRsp) GetError() string { @@ -5558,7 +5798,7 @@ type GiveTeamApplicationsReq struct { func (x *GiveTeamApplicationsReq) Reset() { *x = GiveTeamApplicationsReq{} - mi := &file_main_proto_msgTypes[109] + mi := &file_main_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5570,7 +5810,7 @@ func (x *GiveTeamApplicationsReq) String() string { func (*GiveTeamApplicationsReq) ProtoMessage() {} func (x *GiveTeamApplicationsReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[109] + mi := &file_main_proto_msgTypes[113] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5583,7 +5823,7 @@ func (x *GiveTeamApplicationsReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GiveTeamApplicationsReq.ProtoReflect.Descriptor instead. func (*GiveTeamApplicationsReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{109} + return file_main_proto_rawDescGZIP(), []int{113} } func (x *GiveTeamApplicationsReq) GetId() int64 { @@ -5609,7 +5849,7 @@ type GiveTeamApplicationsRsp struct { func (x *GiveTeamApplicationsRsp) Reset() { *x = GiveTeamApplicationsRsp{} - mi := &file_main_proto_msgTypes[110] + mi := &file_main_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5621,7 +5861,7 @@ func (x *GiveTeamApplicationsRsp) String() string { func (*GiveTeamApplicationsRsp) ProtoMessage() {} func (x *GiveTeamApplicationsRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[110] + mi := &file_main_proto_msgTypes[114] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5634,7 +5874,7 @@ func (x *GiveTeamApplicationsRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GiveTeamApplicationsRsp.ProtoReflect.Descriptor instead. func (*GiveTeamApplicationsRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{110} + return file_main_proto_rawDescGZIP(), []int{114} } func (x *GiveTeamApplicationsRsp) GetError() string { @@ -5654,7 +5894,7 @@ type GetTeamStoryReq struct { func (x *GetTeamStoryReq) Reset() { *x = GetTeamStoryReq{} - mi := &file_main_proto_msgTypes[111] + mi := &file_main_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5666,7 +5906,7 @@ func (x *GetTeamStoryReq) String() string { func (*GetTeamStoryReq) ProtoMessage() {} func (x *GetTeamStoryReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[111] + mi := &file_main_proto_msgTypes[115] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5679,7 +5919,7 @@ func (x *GetTeamStoryReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamStoryReq.ProtoReflect.Descriptor instead. func (*GetTeamStoryReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{111} + return file_main_proto_rawDescGZIP(), []int{115} } func (x *GetTeamStoryReq) GetId() int64 { @@ -5707,7 +5947,7 @@ type GetTeamStoryRsp struct { func (x *GetTeamStoryRsp) Reset() { *x = GetTeamStoryRsp{} - mi := &file_main_proto_msgTypes[112] + mi := &file_main_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5719,7 +5959,7 @@ func (x *GetTeamStoryRsp) String() string { func (*GetTeamStoryRsp) ProtoMessage() {} func (x *GetTeamStoryRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[112] + mi := &file_main_proto_msgTypes[116] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5732,7 +5972,7 @@ func (x *GetTeamStoryRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamStoryRsp.ProtoReflect.Descriptor instead. func (*GetTeamStoryRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{112} + return file_main_proto_rawDescGZIP(), []int{116} } func (x *GetTeamStoryRsp) GetError() string { @@ -5767,7 +6007,7 @@ type AddTeamActionReq struct { func (x *AddTeamActionReq) Reset() { *x = AddTeamActionReq{} - mi := &file_main_proto_msgTypes[113] + mi := &file_main_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5779,7 +6019,7 @@ func (x *AddTeamActionReq) String() string { func (*AddTeamActionReq) ProtoMessage() {} func (x *AddTeamActionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[113] + mi := &file_main_proto_msgTypes[117] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5792,7 +6032,7 @@ func (x *AddTeamActionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamActionReq.ProtoReflect.Descriptor instead. func (*AddTeamActionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{113} + return file_main_proto_rawDescGZIP(), []int{117} } func (x *AddTeamActionReq) GetId() int64 { @@ -5825,7 +6065,7 @@ type AddTeamActionRsp struct { func (x *AddTeamActionRsp) Reset() { *x = AddTeamActionRsp{} - mi := &file_main_proto_msgTypes[114] + mi := &file_main_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5837,7 +6077,7 @@ func (x *AddTeamActionRsp) String() string { func (*AddTeamActionRsp) ProtoMessage() {} func (x *AddTeamActionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[114] + mi := &file_main_proto_msgTypes[118] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5850,7 +6090,7 @@ func (x *AddTeamActionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use AddTeamActionRsp.ProtoReflect.Descriptor instead. func (*AddTeamActionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{114} + return file_main_proto_rawDescGZIP(), []int{118} } func (x *AddTeamActionRsp) GetError() string { @@ -5869,7 +6109,7 @@ type DeleteLastTeamActionReq struct { func (x *DeleteLastTeamActionReq) Reset() { *x = DeleteLastTeamActionReq{} - mi := &file_main_proto_msgTypes[115] + mi := &file_main_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5881,7 +6121,7 @@ func (x *DeleteLastTeamActionReq) String() string { func (*DeleteLastTeamActionReq) ProtoMessage() {} func (x *DeleteLastTeamActionReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[115] + mi := &file_main_proto_msgTypes[119] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5894,7 +6134,7 @@ func (x *DeleteLastTeamActionReq) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteLastTeamActionReq.ProtoReflect.Descriptor instead. func (*DeleteLastTeamActionReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{115} + return file_main_proto_rawDescGZIP(), []int{119} } func (x *DeleteLastTeamActionReq) GetId() int64 { @@ -5913,7 +6153,7 @@ type DeleteLastTeamActionRsp struct { func (x *DeleteLastTeamActionRsp) Reset() { *x = DeleteLastTeamActionRsp{} - mi := &file_main_proto_msgTypes[116] + mi := &file_main_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5925,7 +6165,7 @@ func (x *DeleteLastTeamActionRsp) String() string { func (*DeleteLastTeamActionRsp) ProtoMessage() {} func (x *DeleteLastTeamActionRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[116] + mi := &file_main_proto_msgTypes[120] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5938,7 +6178,7 @@ func (x *DeleteLastTeamActionRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteLastTeamActionRsp.ProtoReflect.Descriptor instead. func (*DeleteLastTeamActionRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{116} + return file_main_proto_rawDescGZIP(), []int{120} } func (x *DeleteLastTeamActionRsp) GetError() string { @@ -5958,7 +6198,7 @@ type GetTeamAnswersReq struct { func (x *GetTeamAnswersReq) Reset() { *x = GetTeamAnswersReq{} - mi := &file_main_proto_msgTypes[117] + mi := &file_main_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5970,7 +6210,7 @@ func (x *GetTeamAnswersReq) String() string { func (*GetTeamAnswersReq) ProtoMessage() {} func (x *GetTeamAnswersReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[117] + mi := &file_main_proto_msgTypes[121] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5983,7 +6223,7 @@ func (x *GetTeamAnswersReq) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamAnswersReq.ProtoReflect.Descriptor instead. func (*GetTeamAnswersReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{117} + return file_main_proto_rawDescGZIP(), []int{121} } func (x *GetTeamAnswersReq) GetId() int64 { @@ -6010,7 +6250,7 @@ type GetTeamAnswersRsp struct { func (x *GetTeamAnswersRsp) Reset() { *x = GetTeamAnswersRsp{} - mi := &file_main_proto_msgTypes[118] + mi := &file_main_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6022,7 +6262,7 @@ func (x *GetTeamAnswersRsp) String() string { func (*GetTeamAnswersRsp) ProtoMessage() {} func (x *GetTeamAnswersRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[118] + mi := &file_main_proto_msgTypes[122] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6035,7 +6275,7 @@ func (x *GetTeamAnswersRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use GetTeamAnswersRsp.ProtoReflect.Descriptor instead. func (*GetTeamAnswersRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{118} + return file_main_proto_rawDescGZIP(), []int{122} } func (x *GetTeamAnswersRsp) GetError() string { @@ -6063,7 +6303,7 @@ type SubmitTeamAnswersReq struct { func (x *SubmitTeamAnswersReq) Reset() { *x = SubmitTeamAnswersReq{} - mi := &file_main_proto_msgTypes[119] + mi := &file_main_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6075,7 +6315,7 @@ func (x *SubmitTeamAnswersReq) String() string { func (*SubmitTeamAnswersReq) ProtoMessage() {} func (x *SubmitTeamAnswersReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[119] + mi := &file_main_proto_msgTypes[123] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6088,7 +6328,7 @@ func (x *SubmitTeamAnswersReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitTeamAnswersReq.ProtoReflect.Descriptor instead. func (*SubmitTeamAnswersReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{119} + return file_main_proto_rawDescGZIP(), []int{123} } func (x *SubmitTeamAnswersReq) GetId() int64 { @@ -6121,7 +6361,7 @@ type SubmitTeamAnswersRsp struct { func (x *SubmitTeamAnswersRsp) Reset() { *x = SubmitTeamAnswersRsp{} - mi := &file_main_proto_msgTypes[120] + mi := &file_main_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6133,7 +6373,7 @@ func (x *SubmitTeamAnswersRsp) String() string { func (*SubmitTeamAnswersRsp) ProtoMessage() {} func (x *SubmitTeamAnswersRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[120] + mi := &file_main_proto_msgTypes[124] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6146,7 +6386,7 @@ func (x *SubmitTeamAnswersRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitTeamAnswersRsp.ProtoReflect.Descriptor instead. func (*SubmitTeamAnswersRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{120} + return file_main_proto_rawDescGZIP(), []int{124} } func (x *SubmitTeamAnswersRsp) GetError() string { @@ -6168,7 +6408,7 @@ type SetTeamAnswerScoreReq struct { func (x *SetTeamAnswerScoreReq) Reset() { *x = SetTeamAnswerScoreReq{} - mi := &file_main_proto_msgTypes[121] + mi := &file_main_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6180,7 +6420,7 @@ func (x *SetTeamAnswerScoreReq) String() string { func (*SetTeamAnswerScoreReq) ProtoMessage() {} func (x *SetTeamAnswerScoreReq) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[121] + mi := &file_main_proto_msgTypes[125] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6193,7 +6433,7 @@ func (x *SetTeamAnswerScoreReq) ProtoReflect() protoreflect.Message { // Deprecated: Use SetTeamAnswerScoreReq.ProtoReflect.Descriptor instead. func (*SetTeamAnswerScoreReq) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{121} + return file_main_proto_rawDescGZIP(), []int{125} } func (x *SetTeamAnswerScoreReq) GetId() int64 { @@ -6226,7 +6466,7 @@ type SetTeamAnswerScoreRsp struct { func (x *SetTeamAnswerScoreRsp) Reset() { *x = SetTeamAnswerScoreRsp{} - mi := &file_main_proto_msgTypes[122] + mi := &file_main_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6238,7 +6478,7 @@ func (x *SetTeamAnswerScoreRsp) String() string { func (*SetTeamAnswerScoreRsp) ProtoMessage() {} func (x *SetTeamAnswerScoreRsp) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[122] + mi := &file_main_proto_msgTypes[126] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6251,7 +6491,7 @@ func (x *SetTeamAnswerScoreRsp) ProtoReflect() protoreflect.Message { // Deprecated: Use SetTeamAnswerScoreRsp.ProtoReflect.Descriptor instead. func (*SetTeamAnswerScoreRsp) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{122} + return file_main_proto_rawDescGZIP(), []int{126} } func (x *SetTeamAnswerScoreRsp) GetError() string { @@ -6542,7 +6782,24 @@ const file_main_proto_rawDesc = "" + "\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" + + "\x05teams\x18\x03 \x03(\v2+.crabs.evening_detective_server.TeamAnswersR\x05teams\"+\n" + + "\x11GetGameResultsReq\x12\x16\n" + + "\x06gameId\x18\x01 \x01(\x05R\x06gameId\"9\n" + + "\x0fResultsQuestion\x12\x12\n" + + "\x04code\x18\x01 \x01(\tR\x04code\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\"\xe9\x01\n" + + "\n" + + "TeamResult\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\x12\x1f\n" + + "\vtotal_score\x18\x03 \x01(\x05R\n" + + "totalScore\x12\x14\n" + + "\x05place\x18\x04 \x01(\x05R\x05place\x12#\n" + + "\ractions_count\x18\x05 \x01(\x05R\factionsCount\"\xba\x01\n" + + "\x11GetGameResultsRsp\x12\x14\n" + + "\x05error\x18\x01 \x01(\tR\x05error\x12M\n" + + "\tquestions\x18\x02 \x03(\v2/.crabs.evening_detective_server.ResultsQuestionR\tquestions\x12@\n" + + "\x05teams\x18\x03 \x03(\v2*.crabs.evening_detective_server.TeamResultR\x05teams\"\xad\x01\n" + "\rUpdateGameReq\x12\x0e\n" + "\x02id\x18\x01 \x01(\x05R\x02id\x12\x12\n" + "\x04name\x18\x02 \x01(\tR\x04name\x12 \n" + @@ -6634,7 +6891,7 @@ const file_main_proto_rawDesc = "" + "\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" + + "\x05error\x18\x01 \x01(\tR\x05error2\xabf\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" + @@ -6734,7 +6991,9 @@ const file_main_proto_rawDesc = "" + "\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\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" + + "\bИгры\x12xПолучить ответы команд на вопросы дела (для оценки организатором)\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/games/{gameId}/answers\x12\x86\x02\n" + + "\x0eGetGameResults\x121.crabs.evening_detective_server.GetGameResultsReq\x1a1.crabs.evening_detective_server.GetGameResultsRsp\"\x8d\x01\x92Ag\n" + + "\bИгры\x12[Получить итоговую таблицу игры (после завершения)\x82\xd3\xe4\x93\x02\x1d\x12\x1b/api/games/{gameId}/results\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" + @@ -6803,7 +7062,7 @@ func file_main_proto_rawDescGZIP() []byte { return file_main_proto_rawDescData } -var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 123) +var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 127) var file_main_proto_goTypes = []any{ (*PingReq)(nil), // 0: crabs.evening_detective_server.PingReq (*PingRsp)(nil), // 1: crabs.evening_detective_server.PingRsp @@ -6894,46 +7153,50 @@ var file_main_proto_goTypes = []any{ (*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 + (*GetGameResultsReq)(nil), // 89: crabs.evening_detective_server.GetGameResultsReq + (*ResultsQuestion)(nil), // 90: crabs.evening_detective_server.ResultsQuestion + (*TeamResult)(nil), // 91: crabs.evening_detective_server.TeamResult + (*GetGameResultsRsp)(nil), // 92: crabs.evening_detective_server.GetGameResultsRsp + (*UpdateGameReq)(nil), // 93: crabs.evening_detective_server.UpdateGameReq + (*UpdateGameRsp)(nil), // 94: crabs.evening_detective_server.UpdateGameRsp + (*StartGameReq)(nil), // 95: crabs.evening_detective_server.StartGameReq + (*StartGameRsp)(nil), // 96: crabs.evening_detective_server.StartGameRsp + (*PauseGameReq)(nil), // 97: crabs.evening_detective_server.PauseGameReq + (*PauseGameRsp)(nil), // 98: crabs.evening_detective_server.PauseGameRsp + (*PlayGameReq)(nil), // 99: crabs.evening_detective_server.PlayGameReq + (*PlayGameRsp)(nil), // 100: crabs.evening_detective_server.PlayGameRsp + (*FinishGameReq)(nil), // 101: crabs.evening_detective_server.FinishGameReq + (*FinishGameRsp)(nil), // 102: crabs.evening_detective_server.FinishGameRsp + (*ResetGameReq)(nil), // 103: crabs.evening_detective_server.ResetGameReq + (*ResetGameRsp)(nil), // 104: crabs.evening_detective_server.ResetGameRsp + (*DeleteGameReq)(nil), // 105: crabs.evening_detective_server.DeleteGameReq + (*DeleteGameRsp)(nil), // 106: crabs.evening_detective_server.DeleteGameRsp + (*AddTeamReq)(nil), // 107: crabs.evening_detective_server.AddTeamReq + (*AddTeamRsp)(nil), // 108: crabs.evening_detective_server.AddTeamRsp + (*UpdateTeamReq)(nil), // 109: crabs.evening_detective_server.UpdateTeamReq + (*UpdateTeamRsp)(nil), // 110: crabs.evening_detective_server.UpdateTeamRsp + (*DeleteTeamReq)(nil), // 111: crabs.evening_detective_server.DeleteTeamReq + (*DeleteTeamRsp)(nil), // 112: crabs.evening_detective_server.DeleteTeamRsp + (*GiveTeamApplicationsReq)(nil), // 113: crabs.evening_detective_server.GiveTeamApplicationsReq + (*GiveTeamApplicationsRsp)(nil), // 114: crabs.evening_detective_server.GiveTeamApplicationsRsp + (*GetTeamStoryReq)(nil), // 115: crabs.evening_detective_server.GetTeamStoryReq + (*GetTeamStoryRsp)(nil), // 116: crabs.evening_detective_server.GetTeamStoryRsp + (*AddTeamActionReq)(nil), // 117: crabs.evening_detective_server.AddTeamActionReq + (*AddTeamActionRsp)(nil), // 118: crabs.evening_detective_server.AddTeamActionRsp + (*DeleteLastTeamActionReq)(nil), // 119: crabs.evening_detective_server.DeleteLastTeamActionReq + (*DeleteLastTeamActionRsp)(nil), // 120: crabs.evening_detective_server.DeleteLastTeamActionRsp + (*GetTeamAnswersReq)(nil), // 121: crabs.evening_detective_server.GetTeamAnswersReq + (*GetTeamAnswersRsp)(nil), // 122: crabs.evening_detective_server.GetTeamAnswersRsp + (*SubmitTeamAnswersReq)(nil), // 123: crabs.evening_detective_server.SubmitTeamAnswersReq + (*SubmitTeamAnswersRsp)(nil), // 124: crabs.evening_detective_server.SubmitTeamAnswersRsp + (*SetTeamAnswerScoreReq)(nil), // 125: crabs.evening_detective_server.SetTeamAnswerScoreReq + (*SetTeamAnswerScoreRsp)(nil), // 126: crabs.evening_detective_server.SetTeamAnswerScoreRsp + (*timestamppb.Timestamp)(nil), // 127: google.protobuf.Timestamp + (*httpbody.HttpBody)(nil), // 128: google.api.HttpBody } var file_main_proto_depIdxs = []int32{ 22, // 0: crabs.evening_detective_server.GetUsersRsp.users:type_name -> crabs.evening_detective_server.User - 123, // 1: crabs.evening_detective_server.User.created_at:type_name -> google.protobuf.Timestamp + 127, // 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 @@ -6941,9 +7204,9 @@ 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 - 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 + 127, // 9: crabs.evening_detective_server.Scenario.updated_at:type_name -> google.protobuf.Timestamp + 127, // 10: crabs.evening_detective_server.Scenario.created_at:type_name -> google.protobuf.Timestamp + 127, // 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 51, // 14: crabs.evening_detective_server.Story.questions:type_name -> crabs.evening_detective_server.Question @@ -6958,141 +7221,147 @@ var file_main_proto_depIdxs = []int32{ 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 + 127, // 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 + 127, // 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 + 127, // 31: crabs.evening_detective_server.Game.started_at:type_name -> google.protobuf.Timestamp + 127, // 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 + 84, // 37: crabs.evening_detective_server.TeamResult.team:type_name -> crabs.evening_detective_server.Team + 53, // 38: crabs.evening_detective_server.TeamResult.answers:type_name -> crabs.evening_detective_server.AnswerScore + 90, // 39: crabs.evening_detective_server.GetGameResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion + 91, // 40: crabs.evening_detective_server.GetGameResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult + 127, // 41: crabs.evening_detective_server.UpdateGameReq.start_at:type_name -> google.protobuf.Timestamp + 45, // 42: crabs.evening_detective_server.GetTeamStoryRsp.story:type_name -> crabs.evening_detective_server.Story + 83, // 43: crabs.evening_detective_server.GetTeamStoryRsp.game:type_name -> crabs.evening_detective_server.Game + 52, // 44: crabs.evening_detective_server.GetTeamAnswersRsp.answers:type_name -> crabs.evening_detective_server.Answer + 52, // 45: crabs.evening_detective_server.SubmitTeamAnswersReq.answers:type_name -> crabs.evening_detective_server.Answer + 0, // 46: crabs.evening_detective_server.EveningDetectiveServer.Ping:input_type -> crabs.evening_detective_server.PingReq + 2, // 47: crabs.evening_detective_server.EveningDetectiveServer.Echo:input_type -> crabs.evening_detective_server.EchoReq + 4, // 48: crabs.evening_detective_server.EveningDetectiveServer.Signup:input_type -> crabs.evening_detective_server.SignupReq + 6, // 49: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:input_type -> crabs.evening_detective_server.RefreshPasswordReq + 8, // 50: crabs.evening_detective_server.EveningDetectiveServer.Login:input_type -> crabs.evening_detective_server.LoginReq + 10, // 51: crabs.evening_detective_server.EveningDetectiveServer.Refresh:input_type -> crabs.evening_detective_server.RefreshReq + 12, // 52: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:input_type -> crabs.evening_detective_server.DeleteAccountReq + 14, // 53: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:input_type -> crabs.evening_detective_server.GetTermsReq + 16, // 54: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:input_type -> crabs.evening_detective_server.GetPrivacyReq + 18, // 55: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:input_type -> crabs.evening_detective_server.GetConsentReq + 20, // 56: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:input_type -> crabs.evening_detective_server.GetUsersReq + 23, // 57: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:input_type -> crabs.evening_detective_server.GetUserByIdReq + 25, // 58: crabs.evening_detective_server.EveningDetectiveServer.GetMe:input_type -> crabs.evening_detective_server.GetMeReq + 27, // 59: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:input_type -> crabs.evening_detective_server.AddUserRoleReq + 29, // 60: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:input_type -> crabs.evening_detective_server.DeleteUserRoleReq + 31, // 61: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:input_type -> crabs.evening_detective_server.GetPermissionsReq + 33, // 62: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:input_type -> crabs.evening_detective_server.UploadFileReq + 35, // 63: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:input_type -> crabs.evening_detective_server.DownloadFileReq + 36, // 64: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:input_type -> crabs.evening_detective_server.AddScenarioReq + 38, // 65: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:input_type -> crabs.evening_detective_server.GetMyScenariosReq + 40, // 66: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:input_type -> crabs.evening_detective_server.GetScenariosCatalogReq + 42, // 67: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:input_type -> crabs.evening_detective_server.GetScenarioReq + 42, // 68: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:input_type -> crabs.evening_detective_server.GetScenarioReq + 55, // 69: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:input_type -> crabs.evening_detective_server.UpdateScenarioReq + 57, // 70: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:input_type -> crabs.evening_detective_server.PublicScenarioReq + 59, // 71: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:input_type -> crabs.evening_detective_server.DraftScenarioReq + 61, // 72: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:input_type -> crabs.evening_detective_server.DeleteScenarioReq + 63, // 73: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:input_type -> crabs.evening_detective_server.AddScenarioPlaceReq + 65, // 74: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:input_type -> crabs.evening_detective_server.UpdateScenarioPlaceReq + 67, // 75: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:input_type -> crabs.evening_detective_server.DeleteScenarioPlaceReq + 71, // 76: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:input_type -> crabs.evening_detective_server.AddScenarioQuestionReq + 73, // 77: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:input_type -> crabs.evening_detective_server.UpdateScenarioQuestionReq + 75, // 78: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:input_type -> crabs.evening_detective_server.DeleteScenarioQuestionReq + 69, // 79: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:input_type -> crabs.evening_detective_server.UpdateScenarioIntroReq + 77, // 80: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:input_type -> crabs.evening_detective_server.DownloadScenarioArchiveReq + 128, // 81: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:input_type -> google.api.HttpBody + 79, // 82: crabs.evening_detective_server.EveningDetectiveServer.AddGame:input_type -> crabs.evening_detective_server.AddGameReq + 81, // 83: crabs.evening_detective_server.EveningDetectiveServer.GetGames:input_type -> crabs.evening_detective_server.GetGamesReq + 85, // 84: crabs.evening_detective_server.EveningDetectiveServer.GetGame:input_type -> crabs.evening_detective_server.GetGameReq + 87, // 85: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:input_type -> crabs.evening_detective_server.GetGameAnswersReq + 89, // 86: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:input_type -> crabs.evening_detective_server.GetGameResultsReq + 93, // 87: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:input_type -> crabs.evening_detective_server.UpdateGameReq + 95, // 88: crabs.evening_detective_server.EveningDetectiveServer.StartGame:input_type -> crabs.evening_detective_server.StartGameReq + 97, // 89: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:input_type -> crabs.evening_detective_server.PauseGameReq + 99, // 90: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:input_type -> crabs.evening_detective_server.PlayGameReq + 101, // 91: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:input_type -> crabs.evening_detective_server.FinishGameReq + 103, // 92: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:input_type -> crabs.evening_detective_server.ResetGameReq + 105, // 93: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:input_type -> crabs.evening_detective_server.DeleteGameReq + 107, // 94: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:input_type -> crabs.evening_detective_server.AddTeamReq + 109, // 95: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:input_type -> crabs.evening_detective_server.UpdateTeamReq + 111, // 96: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:input_type -> crabs.evening_detective_server.DeleteTeamReq + 113, // 97: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:input_type -> crabs.evening_detective_server.GiveTeamApplicationsReq + 115, // 98: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:input_type -> crabs.evening_detective_server.GetTeamStoryReq + 117, // 99: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:input_type -> crabs.evening_detective_server.AddTeamActionReq + 119, // 100: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:input_type -> crabs.evening_detective_server.DeleteLastTeamActionReq + 121, // 101: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:input_type -> crabs.evening_detective_server.GetTeamAnswersReq + 123, // 102: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:input_type -> crabs.evening_detective_server.SubmitTeamAnswersReq + 125, // 103: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:input_type -> crabs.evening_detective_server.SetTeamAnswerScoreReq + 1, // 104: crabs.evening_detective_server.EveningDetectiveServer.Ping:output_type -> crabs.evening_detective_server.PingRsp + 3, // 105: crabs.evening_detective_server.EveningDetectiveServer.Echo:output_type -> crabs.evening_detective_server.EchoRsp + 5, // 106: crabs.evening_detective_server.EveningDetectiveServer.Signup:output_type -> crabs.evening_detective_server.SignupRsp + 7, // 107: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:output_type -> crabs.evening_detective_server.RefreshPasswordRsp + 9, // 108: crabs.evening_detective_server.EveningDetectiveServer.Login:output_type -> crabs.evening_detective_server.LoginRsp + 11, // 109: crabs.evening_detective_server.EveningDetectiveServer.Refresh:output_type -> crabs.evening_detective_server.RefreshRsp + 13, // 110: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:output_type -> crabs.evening_detective_server.DeleteAccountRsp + 15, // 111: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:output_type -> crabs.evening_detective_server.GetTermsRsp + 17, // 112: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:output_type -> crabs.evening_detective_server.GetPrivacyRsp + 19, // 113: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:output_type -> crabs.evening_detective_server.GetConsentRsp + 21, // 114: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:output_type -> crabs.evening_detective_server.GetUsersRsp + 24, // 115: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:output_type -> crabs.evening_detective_server.GetUserByIdRsp + 26, // 116: crabs.evening_detective_server.EveningDetectiveServer.GetMe:output_type -> crabs.evening_detective_server.GetMeRsp + 28, // 117: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:output_type -> crabs.evening_detective_server.AddUserRoleRsp + 30, // 118: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:output_type -> crabs.evening_detective_server.DeleteUserRoleRsp + 32, // 119: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:output_type -> crabs.evening_detective_server.GetPermissionsRsp + 34, // 120: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:output_type -> crabs.evening_detective_server.UploadFileRsp + 128, // 121: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:output_type -> google.api.HttpBody + 37, // 122: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:output_type -> crabs.evening_detective_server.AddScenarioRsp + 39, // 123: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:output_type -> crabs.evening_detective_server.GetMyScenariosRsp + 41, // 124: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:output_type -> crabs.evening_detective_server.GetScenariosCatalogRsp + 43, // 125: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp + 43, // 126: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp + 56, // 127: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:output_type -> crabs.evening_detective_server.UpdateScenarioRsp + 58, // 128: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:output_type -> crabs.evening_detective_server.PublicScenarioRsp + 60, // 129: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:output_type -> crabs.evening_detective_server.DraftScenarioRsp + 62, // 130: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:output_type -> crabs.evening_detective_server.DeleteScenarioRsp + 64, // 131: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:output_type -> crabs.evening_detective_server.AddScenarioPlaceRsp + 66, // 132: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:output_type -> crabs.evening_detective_server.UpdateScenarioPlaceRsp + 68, // 133: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:output_type -> crabs.evening_detective_server.DeleteScenarioPlaceRsp + 72, // 134: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:output_type -> crabs.evening_detective_server.AddScenarioQuestionRsp + 74, // 135: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:output_type -> crabs.evening_detective_server.UpdateScenarioQuestionRsp + 76, // 136: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:output_type -> crabs.evening_detective_server.DeleteScenarioQuestionRsp + 70, // 137: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:output_type -> crabs.evening_detective_server.UpdateScenarioIntroRsp + 128, // 138: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:output_type -> google.api.HttpBody + 78, // 139: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:output_type -> crabs.evening_detective_server.UploadScenarioArchiveRsp + 80, // 140: crabs.evening_detective_server.EveningDetectiveServer.AddGame:output_type -> crabs.evening_detective_server.AddGameRsp + 82, // 141: crabs.evening_detective_server.EveningDetectiveServer.GetGames:output_type -> crabs.evening_detective_server.GetGamesRsp + 86, // 142: crabs.evening_detective_server.EveningDetectiveServer.GetGame:output_type -> crabs.evening_detective_server.GetGameRsp + 88, // 143: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:output_type -> crabs.evening_detective_server.GetGameAnswersRsp + 92, // 144: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:output_type -> crabs.evening_detective_server.GetGameResultsRsp + 94, // 145: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:output_type -> crabs.evening_detective_server.UpdateGameRsp + 96, // 146: crabs.evening_detective_server.EveningDetectiveServer.StartGame:output_type -> crabs.evening_detective_server.StartGameRsp + 98, // 147: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:output_type -> crabs.evening_detective_server.PauseGameRsp + 100, // 148: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:output_type -> crabs.evening_detective_server.PlayGameRsp + 102, // 149: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:output_type -> crabs.evening_detective_server.FinishGameRsp + 104, // 150: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:output_type -> crabs.evening_detective_server.ResetGameRsp + 106, // 151: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:output_type -> crabs.evening_detective_server.DeleteGameRsp + 108, // 152: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:output_type -> crabs.evening_detective_server.AddTeamRsp + 110, // 153: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:output_type -> crabs.evening_detective_server.UpdateTeamRsp + 112, // 154: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:output_type -> crabs.evening_detective_server.DeleteTeamRsp + 114, // 155: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:output_type -> crabs.evening_detective_server.GiveTeamApplicationsRsp + 116, // 156: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:output_type -> crabs.evening_detective_server.GetTeamStoryRsp + 118, // 157: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:output_type -> crabs.evening_detective_server.AddTeamActionRsp + 120, // 158: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:output_type -> crabs.evening_detective_server.DeleteLastTeamActionRsp + 122, // 159: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:output_type -> crabs.evening_detective_server.GetTeamAnswersRsp + 124, // 160: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:output_type -> crabs.evening_detective_server.SubmitTeamAnswersRsp + 126, // 161: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:output_type -> crabs.evening_detective_server.SetTeamAnswerScoreRsp + 104, // [104:162] is the sub-list for method output_type + 46, // [46:104] is the sub-list for method input_type + 46, // [46:46] is the sub-list for extension type_name + 46, // [46:46] is the sub-list for extension extendee + 0, // [0:46] is the sub-list for field type_name } func init() { file_main_proto_init() } @@ -7103,14 +7372,14 @@ func file_main_proto_init() { file_main_proto_msgTypes[44].OneofWrappers = []any{} file_main_proto_msgTypes[53].OneofWrappers = []any{} file_main_proto_msgTypes[83].OneofWrappers = []any{} - file_main_proto_msgTypes[121].OneofWrappers = []any{} + file_main_proto_msgTypes[125].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: 123, + NumMessages: 127, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/main.pb.gw.go b/proto/main.pb.gw.go index 3b143d0..cd56599 100644 --- a/proto/main.pb.gw.go +++ b/proto/main.pb.gw.go @@ -1422,6 +1422,45 @@ func local_request_EveningDetectiveServer_GetGameAnswers_0(ctx context.Context, return msg, metadata, err } +func request_EveningDetectiveServer_GetGameResults_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetGameResultsReq + 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.GetGameResults(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_GetGameResults_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq GetGameResultsReq + 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.GetGameResults(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 @@ -2989,6 +3028,26 @@ func RegisterEveningDetectiveServerHandlerServer(ctx context.Context, mux *runti } forward_EveningDetectiveServer_GetGameAnswers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodGet, pattern_EveningDetectiveServer_GetGameResults_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/GetGameResults", runtime.WithHTTPPathPattern("/api/games/{gameId}/results")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_GetGameResults_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_GetGameResults_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() @@ -4049,6 +4108,23 @@ func RegisterEveningDetectiveServerHandlerClient(ctx context.Context, mux *runti } forward_EveningDetectiveServer_GetGameAnswers_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodGet, pattern_EveningDetectiveServer_GetGameResults_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/GetGameResults", runtime.WithHTTPPathPattern("/api/games/{gameId}/results")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_GetGameResults_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_GetGameResults_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() @@ -4382,6 +4458,7 @@ var ( 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_GetGameResults_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "games", "gameId", "results"}, "")) 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"}, "")) @@ -4442,6 +4519,7 @@ var ( forward_EveningDetectiveServer_GetGames_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_GetGame_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_GetGameAnswers_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_GetGameResults_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_UpdateGame_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_StartGame_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_PauseGame_0 = runtime.ForwardResponseMessage diff --git a/proto/main_grpc.pb.go b/proto/main_grpc.pb.go index f6bcbde..66084fc 100644 --- a/proto/main_grpc.pb.go +++ b/proto/main_grpc.pb.go @@ -60,6 +60,7 @@ const ( 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_GetGameResults_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetGameResults" 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" @@ -123,6 +124,7 @@ type EveningDetectiveServerClient interface { 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) + GetGameResults(ctx context.Context, in *GetGameResultsReq, opts ...grpc.CallOption) (*GetGameResultsRsp, 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) @@ -550,6 +552,16 @@ func (c *eveningDetectiveServerClient) GetGameAnswers(ctx context.Context, in *G return out, nil } +func (c *eveningDetectiveServerClient) GetGameResults(ctx context.Context, in *GetGameResultsReq, opts ...grpc.CallOption) (*GetGameResultsRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(GetGameResultsRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_GetGameResults_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) @@ -764,6 +776,7 @@ type EveningDetectiveServerServer interface { GetGames(context.Context, *GetGamesReq) (*GetGamesRsp, error) GetGame(context.Context, *GetGameReq) (*GetGameRsp, error) GetGameAnswers(context.Context, *GetGameAnswersReq) (*GetGameAnswersRsp, error) + GetGameResults(context.Context, *GetGameResultsReq) (*GetGameResultsRsp, error) UpdateGame(context.Context, *UpdateGameReq) (*UpdateGameRsp, error) StartGame(context.Context, *StartGameReq) (*StartGameRsp, error) PauseGame(context.Context, *PauseGameReq) (*PauseGameRsp, error) @@ -911,6 +924,9 @@ func (UnimplementedEveningDetectiveServerServer) GetGame(context.Context, *GetGa func (UnimplementedEveningDetectiveServerServer) GetGameAnswers(context.Context, *GetGameAnswersReq) (*GetGameAnswersRsp, error) { return nil, status.Error(codes.Unimplemented, "method GetGameAnswers not implemented") } +func (UnimplementedEveningDetectiveServerServer) GetGameResults(context.Context, *GetGameResultsReq) (*GetGameResultsRsp, error) { + return nil, status.Error(codes.Unimplemented, "method GetGameResults not implemented") +} func (UnimplementedEveningDetectiveServerServer) UpdateGame(context.Context, *UpdateGameReq) (*UpdateGameRsp, error) { return nil, status.Error(codes.Unimplemented, "method UpdateGame not implemented") } @@ -1704,6 +1720,24 @@ func _EveningDetectiveServer_GetGameAnswers_Handler(srv interface{}, ctx context return interceptor(ctx, in, info, handler) } +func _EveningDetectiveServer_GetGameResults_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetGameResultsReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).GetGameResults(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_GetGameResults_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).GetGameResults(ctx, req.(*GetGameResultsReq)) + } + 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 { @@ -2177,6 +2211,10 @@ var EveningDetectiveServer_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetGameAnswers", Handler: _EveningDetectiveServer_GetGameAnswers_Handler, }, + { + MethodName: "GetGameResults", + Handler: _EveningDetectiveServer_GetGameResults_Handler, + }, { MethodName: "UpdateGame", Handler: _EveningDetectiveServer_UpdateGame_Handler,