diff --git a/api/main.proto b/api/main.proto index 470c6a1..8144bcb 100644 --- a/api/main.proto +++ b/api/main.proto @@ -523,8 +523,8 @@ service EveningDetectiveServer { }; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { security: { security_requirement: {} } - tags: "Билеты"; - summary: "Выпустить билеты на игру"; + tags : "Билеты"; + summary : "Выпустить билеты на игру"; }; } @@ -534,8 +534,19 @@ service EveningDetectiveServer { }; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { security: { security_requirement: {} } - tags: "Билеты"; - summary: "Получить данные билета"; + tags : "Билеты"; + summary : "Получить данные билета"; + }; + } + + rpc AcceptTicket(AcceptTicketReq) returns (AcceptTicketRsp) { + option (google.api.http) = { + post: "/api/tickets/{token}/accept" + body: "*" + }; + option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { + tags : "Билеты"; + summary: "Принять билет"; }; } @@ -724,8 +735,8 @@ service EveningDetectiveServer { }; option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = { security: { security_requirement: {} } - tags: "Отзывы" - summary: "Получить отзывы сценария" + tags : "Отзывы" + summary : "Получить отзывы сценария" }; } @@ -1912,6 +1923,15 @@ message GetTicketRsp { TicketPage ticket = 2; } +message AcceptTicketReq { + string token = 1; +} + +message AcceptTicketRsp { + string error = 1; + TicketPage ticket = 2; +} + message TicketPage { int32 id = 1; string game_name = 2; @@ -1920,4 +1940,5 @@ message TicketPage { string status = 5; string game_status = 6; optional google.protobuf.Timestamp used_at = 7; + string used_by = 8; } diff --git a/bin/evening_detective_server b/bin/evening_detective_server index 26d8868..9eff329 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 6b68b97..75cbc27 100644 --- a/cmd/evening_detective_server/main.swagger.json +++ b/cmd/evening_detective_server/main.swagger.json @@ -2741,6 +2741,45 @@ ] } }, + "/api/tickets/{token}/accept": { + "post": { + "summary": "Принять билет", + "operationId": "EveningDetectiveServer_AcceptTicket", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/evening_detective_serverAcceptTicketRsp" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "token", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/EveningDetectiveServerAcceptTicketBody" + } + } + ], + "tags": [ + "Билеты" + ] + } + }, "/api/ui/permissions": { "get": { "summary": "Получить список доступных элементов интерфейса", @@ -2965,6 +3004,9 @@ } }, "definitions": { + "EveningDetectiveServerAcceptTicketBody": { + "type": "object" + }, "EveningDetectiveServerAddScenarioPlaceBody": { "type": "object", "properties": { @@ -3279,6 +3321,17 @@ }, "description": "Message that represents an arbitrary HTTP body. It should only be used for\npayload formats that can't be represented as JSON, such as raw binary or\nan HTML page.\n\n\nThis message can be used both in streaming and non-streaming API methods in\nthe request as well as the response.\n\nIt can be used as a top-level request field, which is convenient if one\nwants to extract parameters from either the URL or HTTP template into the\nrequest fields and also want access to the raw HTTP body.\n\nExample:\n\n message GetResourceRequest {\n // A unique request id.\n string request_id = 1;\n\n // The raw HTTP body is bound to this field.\n google.api.HttpBody http_body = 2;\n\n }\n\n service ResourceService {\n rpc GetResource(GetResourceRequest)\n returns (google.api.HttpBody);\n rpc UpdateResource(google.api.HttpBody)\n returns (google.protobuf.Empty);\n\n }\n\nExample with streaming methods:\n\n service CaldavService {\n rpc GetCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n rpc UpdateCalendar(stream google.api.HttpBody)\n returns (stream google.api.HttpBody);\n\n }\n\nUse of this type only changes how the request and response bodies are\nhandled, all other features will continue to work unchanged." }, + "evening_detective_serverAcceptTicketRsp": { + "type": "object", + "properties": { + "error": { + "type": "string" + }, + "ticket": { + "$ref": "#/definitions/evening_detective_serverTicketPage" + } + } + }, "evening_detective_serverAddGameReq": { "type": "object", "properties": { @@ -4725,6 +4778,9 @@ "usedAt": { "type": "string", "format": "date-time" + }, + "usedBy": { + "type": "string" } } }, diff --git a/internal/app/tickets.go b/internal/app/tickets.go index d773f11..3173602 100644 --- a/internal/app/tickets.go +++ b/internal/app/tickets.go @@ -31,6 +31,9 @@ func (s *server) GetTicket(ctx context.Context, req *proto.GetTicketReq) (*proto Status: page.Status, GameStatus: page.GameStatus, } + if page.UsedBy != nil { + result.UsedBy = *page.UsedBy + } if page.Location != nil { result.Location = *page.Location } @@ -40,6 +43,31 @@ func (s *server) GetTicket(ctx context.Context, req *proto.GetTicketReq) (*proto return &proto.GetTicketRsp{Ticket: result}, nil } +func (s *server) AcceptTicket(ctx context.Context, req *proto.AcceptTicketReq) (*proto.AcceptTicketRsp, error) { + claims, ok := ctx.Value("claims").(*processor_jwt.JWTClaims) + if !ok || claims == nil || (!roles.HasRole(claims, roles.Organizer) && !roles.HasRole(claims, roles.Author)) { + return nil, status.Error(codes.PermissionDenied, "permission denied") + } + if req == nil { + return &proto.AcceptTicketRsp{Error: ticket_service.ErrTicketNotFound.Error()}, nil + } + page, err := s.ticketService.Accept(ctx, req.Token, claims.UserID) + if err != nil { + return &proto.AcceptTicketRsp{Error: err.Error()}, nil + } + result := &proto.TicketPage{Id: int32(page.ID), GameName: page.GameName, StartAt: timestamppb.New(page.StartAt), Status: page.Status, GameStatus: page.GameStatus} + if page.Location != nil { + result.Location = *page.Location + } + if page.UsedAt != nil { + result.UsedAt = timestamppb.New(*page.UsedAt) + } + if page.UsedBy != nil { + result.UsedBy = *page.UsedBy + } + return &proto.AcceptTicketRsp{Ticket: result}, nil +} + func (s *server) IssueGameTickets(ctx context.Context, req *proto.IssueGameTicketsReq) (*proto.IssueGameTicketsRsp, error) { claims, ok := ctx.Value("claims").(*processor_jwt.JWTClaims) if !ok || claims == nil { diff --git a/internal/repos/tickets_repo/accept_test.go b/internal/repos/tickets_repo/accept_test.go new file mode 100644 index 0000000..f113f92 --- /dev/null +++ b/internal/repos/tickets_repo/accept_test.go @@ -0,0 +1,93 @@ +package tickets_repo + +import ( + "context" + "crypto/sha256" + "errors" + "fmt" + "os" + "testing" + "time" + + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgxpool" +) + +func TestAcceptIsAtomic(t *testing.T) { + dsn := os.Getenv("TEST_DATABASE_URL") + if dsn == "" { + t.Skip("set TEST_DATABASE_URL to run PostgreSQL integration check") + } + ctx := context.Background() + admin, err := pgxpool.New(ctx, dsn) + if err != nil { + t.Fatal(err) + } + defer admin.Close() + schema := fmt.Sprintf("tickets_test_%d", time.Now().UnixNano()) + quoted := pgx.Identifier{schema}.Sanitize() + if _, err := admin.Exec(ctx, "CREATE SCHEMA "+quoted); err != nil { + t.Fatal(err) + } + defer func() { _, _ = admin.Exec(ctx, "DROP SCHEMA "+quoted+" CASCADE") }() + config, err := pgxpool.ParseConfig(dsn) + if err != nil { + t.Fatal(err) + } + config.ConnConfig.RuntimeParams["search_path"] = schema + pool, err := pgxpool.NewWithConfig(ctx, config) + if err != nil { + t.Fatal(err) + } + defer pool.Close() + hash := sha256.Sum256([]byte("token")) + _, err = pool.Exec(ctx, ` + CREATE TABLE users (id SERIAL PRIMARY KEY, username TEXT NOT NULL); + CREATE TABLE scenarios (id SERIAL PRIMARY KEY, name TEXT NOT NULL); + CREATE TABLE games (id SERIAL PRIMARY KEY, scenario_id INTEGER NOT NULL, status TEXT NOT NULL, start_at TIMESTAMP NOT NULL, location TEXT); + CREATE TABLE tickets (id SERIAL PRIMARY KEY, game_id INTEGER NOT NULL, token_hash BYTEA NOT NULL UNIQUE, status TEXT NOT NULL DEFAULT 'active', used_at TIMESTAMPTZ, used_by INTEGER)`) + if err != nil { + t.Fatal(err) + } + _, err = pool.Exec(ctx, `INSERT INTO users (username) VALUES ('organizer'), ('other')`) + if err != nil { + t.Fatal(err) + } + _, err = pool.Exec(ctx, `INSERT INTO scenarios (name) VALUES ('Сценарий')`) + if err != nil { + t.Fatal(err) + } + _, err = pool.Exec(ctx, `INSERT INTO games (scenario_id, status, start_at) VALUES (1, 'run', NOW())`) + if err != nil { + t.Fatal(err) + } + _, err = pool.Exec(ctx, `INSERT INTO tickets (game_id, token_hash) VALUES (1, $1)`, hash[:]) + if err != nil { + t.Fatal(err) + } + + repo := New(pool) + results := make(chan error, 8) + for i := 0; i < 8; i++ { + go func(userID int) { + _, err := repo.Accept(ctx, hash[:], userID) + results <- err + }(i%2 + 1) + } + + successes := 0 + for range 8 { + if err := <-results; err == nil { + successes++ + } else if !errors.Is(err, ErrTicketUsed) { + t.Fatalf("unexpected accept error: %v", err) + } + } + if successes != 1 { + t.Fatalf("successful accepts = %d, want 1", successes) + } + var status string + if err := pool.QueryRow(ctx, "SELECT status FROM tickets WHERE id=1").Scan(&status); err != nil || status != "used" { + t.Fatalf("ticket status = %q, err = %v", status, err) + } +} diff --git a/internal/repos/tickets_repo/repo.go b/internal/repos/tickets_repo/repo.go index b680b0f..73237b1 100644 --- a/internal/repos/tickets_repo/repo.go +++ b/internal/repos/tickets_repo/repo.go @@ -9,7 +9,11 @@ import ( "github.com/jackc/pgx/v5/pgxpool" ) -var ErrTicketNotFound = errors.New("Билет не найден") +var ( + ErrTicketNotFound = errors.New("Билет не найден") + ErrTicketUsed = errors.New("Билет уже использован") + ErrGameFinished = errors.New("Игра уже завершена") +) type Info struct { ID int @@ -19,6 +23,7 @@ type Info struct { Location *string GameStatus string UsedAt *time.Time + UsedBy *string } type Repo struct { @@ -56,14 +61,48 @@ func (r *Repo) CreateBatch(ctx context.Context, gameID int, tokenHashes [][]byte func (r *Repo) GetByHash(ctx context.Context, tokenHash []byte) (*Info, error) { info := &Info{} err := r.pool.QueryRow(ctx, ` - SELECT t.id, t.status, s.name, g.start_at, g.location, g.status, t.used_at + SELECT t.id, t.status, s.name, g.start_at, g.location, g.status, t.used_at, u.username FROM tickets t JOIN games g ON g.id = t.game_id JOIN scenarios s ON s.id = g.scenario_id + LEFT JOIN users u ON u.id = t.used_by WHERE t.token_hash = $1`, tokenHash).Scan( - &info.ID, &info.Status, &info.GameName, &info.StartAt, &info.Location, &info.GameStatus, &info.UsedAt) + &info.ID, &info.Status, &info.GameName, &info.StartAt, &info.Location, &info.GameStatus, &info.UsedAt, &info.UsedBy) if errors.Is(err, pgx.ErrNoRows) { return nil, ErrTicketNotFound } return info, err } + +func (r *Repo) Accept(ctx context.Context, tokenHash []byte, userID int) (*Info, error) { + var status, gameStatus string + if err := r.pool.QueryRow(ctx, ` + SELECT t.status, g.status + FROM tickets t JOIN games g ON g.id = t.game_id + WHERE t.token_hash = $1`, tokenHash).Scan(&status, &gameStatus); errors.Is(err, pgx.ErrNoRows) { + return nil, ErrTicketNotFound + } else if err != nil { + return nil, err + } + if status == "used" { + return nil, ErrTicketUsed + } + if gameStatus == "finish" { + return nil, ErrGameFinished + } + + tag, err := r.pool.Exec(ctx, ` + UPDATE tickets t SET status = 'used', used_at = NOW(), used_by = $2 + FROM games g + WHERE t.game_id = g.id AND t.token_hash = $1 AND t.status = 'active' AND g.status <> 'finish'`, tokenHash, userID) + if err != nil { + return nil, err + } + if tag.RowsAffected() == 0 { + if status == "used" { + return nil, ErrTicketUsed + } + return nil, ErrGameFinished + } + return r.GetByHash(ctx, tokenHash) +} diff --git a/internal/services/ticket_service/service.go b/internal/services/ticket_service/service.go index bfde512..40655b1 100644 --- a/internal/services/ticket_service/service.go +++ b/internal/services/ticket_service/service.go @@ -20,6 +20,8 @@ var ( ErrInvalidTicketCount = errors.New("количество билетов должно быть от 1 до 100") ErrInvalidBaseURL = errors.New("необходимо настроить APP_BASE_URL — публичный адрес приложения") ErrTicketNotFound = tickets_repo.ErrTicketNotFound + ErrTicketUsed = tickets_repo.ErrTicketUsed + ErrGameFinished = tickets_repo.ErrGameFinished ) type Ticket struct { @@ -35,6 +37,7 @@ type Page struct { Location *string GameStatus string UsedAt *time.Time + UsedBy *string } type Service struct { @@ -100,9 +103,22 @@ func (s *Service) Get(ctx context.Context, token string) (*Page, error) { Location: info.Location, GameStatus: info.GameStatus, UsedAt: info.UsedAt, + UsedBy: info.UsedBy, }, nil } +func (s *Service) Accept(ctx context.Context, token string, userID int) (*Page, error) { + hash, err := tokenHash(token) + if err != nil { + return nil, ErrTicketNotFound + } + info, err := s.repo.Accept(ctx, hash, userID) + if err != nil { + return nil, err + } + return &Page{ID: info.ID, Status: info.Status, GameName: info.GameName, StartAt: info.StartAt, Location: info.Location, GameStatus: info.GameStatus, UsedAt: info.UsedAt, UsedBy: info.UsedBy}, nil +} + func newToken() (string, error) { data := make([]byte, 32) if _, err := rand.Read(data); err != nil { diff --git a/proto/main.pb.go b/proto/main.pb.go index 78e6b2c..9cd7438 100644 --- a/proto/main.pb.go +++ b/proto/main.pb.go @@ -9533,6 +9533,102 @@ func (x *GetTicketRsp) GetTicket() *TicketPage { return nil } +type AcceptTicketReq struct { + state protoimpl.MessageState `protogen:"open.v1"` + Token string `protobuf:"bytes,1,opt,name=token,proto3" json:"token,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AcceptTicketReq) Reset() { + *x = AcceptTicketReq{} + mi := &file_main_proto_msgTypes[176] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AcceptTicketReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AcceptTicketReq) ProtoMessage() {} + +func (x *AcceptTicketReq) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[176] + 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 AcceptTicketReq.ProtoReflect.Descriptor instead. +func (*AcceptTicketReq) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{176} +} + +func (x *AcceptTicketReq) GetToken() string { + if x != nil { + return x.Token + } + return "" +} + +type AcceptTicketRsp struct { + state protoimpl.MessageState `protogen:"open.v1"` + Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + Ticket *TicketPage `protobuf:"bytes,2,opt,name=ticket,proto3" json:"ticket,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AcceptTicketRsp) Reset() { + *x = AcceptTicketRsp{} + mi := &file_main_proto_msgTypes[177] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AcceptTicketRsp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AcceptTicketRsp) ProtoMessage() {} + +func (x *AcceptTicketRsp) ProtoReflect() protoreflect.Message { + mi := &file_main_proto_msgTypes[177] + 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 AcceptTicketRsp.ProtoReflect.Descriptor instead. +func (*AcceptTicketRsp) Descriptor() ([]byte, []int) { + return file_main_proto_rawDescGZIP(), []int{177} +} + +func (x *AcceptTicketRsp) GetError() string { + if x != nil { + return x.Error + } + return "" +} + +func (x *AcceptTicketRsp) GetTicket() *TicketPage { + if x != nil { + return x.Ticket + } + return nil +} + type TicketPage struct { state protoimpl.MessageState `protogen:"open.v1"` Id int32 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` @@ -9542,13 +9638,14 @@ type TicketPage struct { Status string `protobuf:"bytes,5,opt,name=status,proto3" json:"status,omitempty"` GameStatus string `protobuf:"bytes,6,opt,name=game_status,json=gameStatus,proto3" json:"game_status,omitempty"` UsedAt *timestamppb.Timestamp `protobuf:"bytes,7,opt,name=used_at,json=usedAt,proto3,oneof" json:"used_at,omitempty"` + UsedBy string `protobuf:"bytes,8,opt,name=used_by,json=usedBy,proto3" json:"used_by,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TicketPage) Reset() { *x = TicketPage{} - mi := &file_main_proto_msgTypes[176] + mi := &file_main_proto_msgTypes[178] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9560,7 +9657,7 @@ func (x *TicketPage) String() string { func (*TicketPage) ProtoMessage() {} func (x *TicketPage) ProtoReflect() protoreflect.Message { - mi := &file_main_proto_msgTypes[176] + mi := &file_main_proto_msgTypes[178] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9573,7 +9670,7 @@ func (x *TicketPage) ProtoReflect() protoreflect.Message { // Deprecated: Use TicketPage.ProtoReflect.Descriptor instead. func (*TicketPage) Descriptor() ([]byte, []int) { - return file_main_proto_rawDescGZIP(), []int{176} + return file_main_proto_rawDescGZIP(), []int{178} } func (x *TicketPage) GetId() int32 { @@ -9625,6 +9722,13 @@ func (x *TicketPage) GetUsedAt() *timestamppb.Timestamp { return nil } +func (x *TicketPage) GetUsedBy() string { + if x != nil { + return x.UsedBy + } + return "" +} + var File_main_proto protoreflect.FileDescriptor const file_main_proto_rawDesc = "" + @@ -10228,7 +10332,12 @@ const file_main_proto_rawDesc = "" + "\x05token\x18\x01 \x01(\tR\x05token\"h\n" + "\fGetTicketRsp\x12\x14\n" + "\x05error\x18\x01 \x01(\tR\x05error\x12B\n" + - "\x06ticket\x18\x02 \x01(\v2*.crabs.evening_detective_server.TicketPageR\x06ticket\"\x8b\x02\n" + + "\x06ticket\x18\x02 \x01(\v2*.crabs.evening_detective_server.TicketPageR\x06ticket\"'\n" + + "\x0fAcceptTicketReq\x12\x14\n" + + "\x05token\x18\x01 \x01(\tR\x05token\"k\n" + + "\x0fAcceptTicketRsp\x12\x14\n" + + "\x05error\x18\x01 \x01(\tR\x05error\x12B\n" + + "\x06ticket\x18\x02 \x01(\v2*.crabs.evening_detective_server.TicketPageR\x06ticket\"\xa4\x02\n" + "\n" + "TicketPage\x12\x0e\n" + "\x02id\x18\x01 \x01(\x05R\x02id\x12\x1b\n" + @@ -10238,7 +10347,8 @@ const file_main_proto_rawDesc = "" + "\x06status\x18\x05 \x01(\tR\x06status\x12\x1f\n" + "\vgame_status\x18\x06 \x01(\tR\n" + "gameStatus\x128\n" + - "\aused_at\x18\a \x01(\v2\x1a.google.protobuf.TimestampH\x00R\x06usedAt\x88\x01\x01B\n" + + "\aused_at\x18\a \x01(\v2\x1a.google.protobuf.TimestampH\x00R\x06usedAt\x88\x01\x01\x12\x17\n" + + "\aused_by\x18\b \x01(\tR\x06usedByB\n" + "\n" + "\b_used_at*\xc9\x01\n" + "\n" + @@ -10258,7 +10368,7 @@ const file_main_proto_rawDesc = "" + "\x13SCREEN_COMMAND_STOP\x10\x04\x12\x19\n" + "\x15SCREEN_COMMAND_REPLAY\x10\x05\x12\x17\n" + "\x13SCREEN_COMMAND_SEEK\x10\x06\x12\x19\n" + - "\x15SCREEN_COMMAND_VOLUME\x10\a2ڢ\x01\n" + + "\x15SCREEN_COMMAND_VOLUME\x10\a2\xa1\xa4\x01\n" + "\x16EveningDetectiveServer\x12\xcc\x05\n" + "\x10GetParticipation\x123.crabs.evening_detective_server.GetParticipationReq\x1a0.crabs.evening_detective_server.ParticipationRsp\"\xd0\x04\x92A\xab\x04\n" + ")Подтверждение участия\x122Получить состояние участия\x1a\xc7\x03Возвращает команду, игру и текущее решение по персональному токену из письма. Авторизация JWT не требуется. Чтение не меняет статус участия. Токен передаётся в теле запроса. Недействительная ссылка и ошибки обработки возвращаются в поле error при HTTP 200.b\x00\x82\xd3\xe4\x93\x02\x1b:\x01*\"\x16/api/participation/get\x12\xf2\b\n" + @@ -10374,7 +10484,9 @@ const file_main_proto_rawDesc = "" + "\tGetTicket\x12,.crabs.evening_detective_server.GetTicketReq\x1a,.crabs.evening_detective_server.GetTicketRsp\"a\x92AB\n" + "\fБилеты\x12*Получить данные билетаb\x06\n" + "\x04\n" + - "\x00\x12\x00\x82\xd3\xe4\x93\x02\x16\x12\x14/api/tickets/{token}\x12\xe1\x01\n" + + "\x00\x12\x00\x82\xd3\xe4\x93\x02\x16\x12\x14/api/tickets/{token}\x12\xc4\x01\n" + + "\fAcceptTicket\x12/.crabs.evening_detective_server.AcceptTicketReq\x1a/.crabs.evening_detective_server.AcceptTicketRsp\"R\x92A)\n" + + "\fБилеты\x12\x19Принять билет\x82\xd3\xe4\x93\x02 :\x01*\"\x1b/api/tickets/{token}/accept\x12\xe1\x01\n" + "\x13CreateScreenSession\x126.crabs.evening_detective_server.CreateScreenSessionReq\x1a6.crabs.evening_detective_server.CreateScreenSessionRsp\"Z\x92A@\n" + "\fЭкраны\x12(Создать сессию экранаb\x06\n" + "\x04\n" + @@ -10496,7 +10608,7 @@ func file_main_proto_rawDescGZIP() []byte { } var file_main_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 177) +var file_main_proto_msgTypes = make([]protoimpl.MessageInfo, 179) var file_main_proto_goTypes = []any{ (ScreenMode)(0), // 0: crabs.evening_detective_server.ScreenMode (ScreenCommand)(0), // 1: crabs.evening_detective_server.ScreenCommand @@ -10676,13 +10788,15 @@ var file_main_proto_goTypes = []any{ (*Ticket)(nil), // 175: crabs.evening_detective_server.Ticket (*GetTicketReq)(nil), // 176: crabs.evening_detective_server.GetTicketReq (*GetTicketRsp)(nil), // 177: crabs.evening_detective_server.GetTicketRsp - (*TicketPage)(nil), // 178: crabs.evening_detective_server.TicketPage - (*timestamppb.Timestamp)(nil), // 179: google.protobuf.Timestamp - (*httpbody.HttpBody)(nil), // 180: google.api.HttpBody + (*AcceptTicketReq)(nil), // 178: crabs.evening_detective_server.AcceptTicketReq + (*AcceptTicketRsp)(nil), // 179: crabs.evening_detective_server.AcceptTicketRsp + (*TicketPage)(nil), // 180: crabs.evening_detective_server.TicketPage + (*timestamppb.Timestamp)(nil), // 181: google.protobuf.Timestamp + (*httpbody.HttpBody)(nil), // 182: google.api.HttpBody } var file_main_proto_depIdxs = []int32{ 24, // 0: crabs.evening_detective_server.GetUsersRsp.users:type_name -> crabs.evening_detective_server.User - 179, // 1: crabs.evening_detective_server.User.created_at:type_name -> google.protobuf.Timestamp + 181, // 1: crabs.evening_detective_server.User.created_at:type_name -> google.protobuf.Timestamp 24, // 2: crabs.evening_detective_server.GetUserByIdRsp.user:type_name -> crabs.evening_detective_server.User 24, // 3: crabs.evening_detective_server.GetMeRsp.user:type_name -> crabs.evening_detective_server.User 48, // 4: crabs.evening_detective_server.GetMyScenariosRsp.scenarios:type_name -> crabs.evening_detective_server.Scenario @@ -10690,9 +10804,9 @@ var file_main_proto_depIdxs = []int32{ 48, // 6: crabs.evening_detective_server.GetScenarioRsp.scenario:type_name -> crabs.evening_detective_server.Scenario 49, // 7: crabs.evening_detective_server.Scenario.story:type_name -> crabs.evening_detective_server.Story 24, // 8: crabs.evening_detective_server.Scenario.author:type_name -> crabs.evening_detective_server.User - 179, // 9: crabs.evening_detective_server.Scenario.updated_at:type_name -> google.protobuf.Timestamp - 179, // 10: crabs.evening_detective_server.Scenario.created_at:type_name -> google.protobuf.Timestamp - 179, // 11: crabs.evening_detective_server.Scenario.published_at:type_name -> google.protobuf.Timestamp + 181, // 9: crabs.evening_detective_server.Scenario.updated_at:type_name -> google.protobuf.Timestamp + 181, // 10: crabs.evening_detective_server.Scenario.created_at:type_name -> google.protobuf.Timestamp + 181, // 11: crabs.evening_detective_server.Scenario.published_at:type_name -> google.protobuf.Timestamp 50, // 12: crabs.evening_detective_server.Story.conclusion:type_name -> crabs.evening_detective_server.Conclusion 51, // 13: crabs.evening_detective_server.Story.introduction:type_name -> crabs.evening_detective_server.Introduction 52, // 14: crabs.evening_detective_server.Story.places:type_name -> crabs.evening_detective_server.Place @@ -10709,13 +10823,13 @@ var file_main_proto_depIdxs = []int32{ 51, // 25: crabs.evening_detective_server.UpdateScenarioIntroReq.introduction:type_name -> crabs.evening_detective_server.Introduction 56, // 26: crabs.evening_detective_server.AddScenarioQuestionReq.question:type_name -> crabs.evening_detective_server.Question 56, // 27: crabs.evening_detective_server.UpdateScenarioQuestionReq.question:type_name -> crabs.evening_detective_server.Question - 179, // 28: crabs.evening_detective_server.AddGameReq.start_at:type_name -> google.protobuf.Timestamp + 181, // 28: crabs.evening_detective_server.AddGameReq.start_at:type_name -> google.protobuf.Timestamp 90, // 29: crabs.evening_detective_server.GetGamesRsp.games:type_name -> crabs.evening_detective_server.Game - 179, // 30: crabs.evening_detective_server.Game.start_at:type_name -> google.protobuf.Timestamp + 181, // 30: crabs.evening_detective_server.Game.start_at:type_name -> google.protobuf.Timestamp 48, // 31: crabs.evening_detective_server.Game.scenario:type_name -> crabs.evening_detective_server.Scenario 118, // 32: crabs.evening_detective_server.Game.teams:type_name -> crabs.evening_detective_server.Team - 179, // 33: crabs.evening_detective_server.Game.started_at:type_name -> google.protobuf.Timestamp - 179, // 34: crabs.evening_detective_server.Game.ended_at:type_name -> google.protobuf.Timestamp + 181, // 33: crabs.evening_detective_server.Game.started_at:type_name -> google.protobuf.Timestamp + 181, // 34: crabs.evening_detective_server.Game.ended_at:type_name -> google.protobuf.Timestamp 0, // 35: crabs.evening_detective_server.ScreenState.mode:type_name -> crabs.evening_detective_server.ScreenMode 1, // 36: crabs.evening_detective_server.ScreenState.command:type_name -> crabs.evening_detective_server.ScreenCommand 91, // 37: crabs.evening_detective_server.GetScreenStateRsp.state:type_name -> crabs.evening_detective_server.ScreenState @@ -10726,7 +10840,7 @@ var file_main_proto_depIdxs = []int32{ 1, // 42: crabs.evening_detective_server.SendScreenCommandReq.command:type_name -> crabs.evening_detective_server.ScreenCommand 124, // 43: crabs.evening_detective_server.GetScreenResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion 125, // 44: crabs.evening_detective_server.GetScreenResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult - 179, // 45: crabs.evening_detective_server.ParticipationRsp.start_at:type_name -> google.protobuf.Timestamp + 181, // 45: crabs.evening_detective_server.ParticipationRsp.start_at:type_name -> google.protobuf.Timestamp 53, // 46: crabs.evening_detective_server.Team.applications:type_name -> crabs.evening_detective_server.Application 90, // 47: crabs.evening_detective_server.GetGameRsp.game:type_name -> crabs.evening_detective_server.Game 56, // 48: crabs.evening_detective_server.GetGameAnswersRsp.questions:type_name -> crabs.evening_detective_server.Question @@ -10735,191 +10849,194 @@ var file_main_proto_depIdxs = []int32{ 58, // 51: crabs.evening_detective_server.TeamResult.answers:type_name -> crabs.evening_detective_server.AnswerScore 124, // 52: crabs.evening_detective_server.GetGameResultsRsp.questions:type_name -> crabs.evening_detective_server.ResultsQuestion 125, // 53: crabs.evening_detective_server.GetGameResultsRsp.teams:type_name -> crabs.evening_detective_server.TeamResult - 179, // 54: crabs.evening_detective_server.GameReview.created_at:type_name -> google.protobuf.Timestamp + 181, // 54: crabs.evening_detective_server.GameReview.created_at:type_name -> google.protobuf.Timestamp 127, // 55: crabs.evening_detective_server.CreateGameReviewRsp.review:type_name -> crabs.evening_detective_server.GameReview 127, // 56: crabs.evening_detective_server.GetGameReviewsRsp.reviews:type_name -> crabs.evening_detective_server.GameReview 127, // 57: crabs.evening_detective_server.ModerateGameReviewRsp.review:type_name -> crabs.evening_detective_server.GameReview - 179, // 58: crabs.evening_detective_server.UpdateGameReq.start_at:type_name -> google.protobuf.Timestamp + 181, // 58: crabs.evening_detective_server.UpdateGameReq.start_at:type_name -> google.protobuf.Timestamp 49, // 59: crabs.evening_detective_server.GetTeamStoryRsp.story:type_name -> crabs.evening_detective_server.Story 90, // 60: crabs.evening_detective_server.GetTeamStoryRsp.game:type_name -> crabs.evening_detective_server.Game 160, // 61: crabs.evening_detective_server.GetTeamStoryRsp.actions:type_name -> crabs.evening_detective_server.TeamAction 57, // 62: crabs.evening_detective_server.GetTeamAnswersRsp.answers:type_name -> crabs.evening_detective_server.Answer 57, // 63: crabs.evening_detective_server.SubmitTeamAnswersReq.answers:type_name -> crabs.evening_detective_server.Answer 175, // 64: crabs.evening_detective_server.IssueGameTicketsRsp.tickets:type_name -> crabs.evening_detective_server.Ticket - 178, // 65: crabs.evening_detective_server.GetTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage - 179, // 66: crabs.evening_detective_server.TicketPage.start_at:type_name -> google.protobuf.Timestamp - 179, // 67: crabs.evening_detective_server.TicketPage.used_at:type_name -> google.protobuf.Timestamp - 115, // 68: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:input_type -> crabs.evening_detective_server.GetParticipationReq - 116, // 69: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:input_type -> crabs.evening_detective_server.AnswerParticipationReq - 2, // 70: crabs.evening_detective_server.EveningDetectiveServer.Ping:input_type -> crabs.evening_detective_server.PingReq - 4, // 71: crabs.evening_detective_server.EveningDetectiveServer.Echo:input_type -> crabs.evening_detective_server.EchoReq - 6, // 72: crabs.evening_detective_server.EveningDetectiveServer.Signup:input_type -> crabs.evening_detective_server.SignupReq - 8, // 73: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:input_type -> crabs.evening_detective_server.RefreshPasswordReq - 10, // 74: crabs.evening_detective_server.EveningDetectiveServer.Login:input_type -> crabs.evening_detective_server.LoginReq - 12, // 75: crabs.evening_detective_server.EveningDetectiveServer.Refresh:input_type -> crabs.evening_detective_server.RefreshReq - 14, // 76: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:input_type -> crabs.evening_detective_server.DeleteAccountReq - 16, // 77: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:input_type -> crabs.evening_detective_server.GetTermsReq - 18, // 78: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:input_type -> crabs.evening_detective_server.GetPrivacyReq - 20, // 79: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:input_type -> crabs.evening_detective_server.GetConsentReq - 22, // 80: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:input_type -> crabs.evening_detective_server.GetUsersReq - 25, // 81: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:input_type -> crabs.evening_detective_server.GetUserByIdReq - 27, // 82: crabs.evening_detective_server.EveningDetectiveServer.GetMe:input_type -> crabs.evening_detective_server.GetMeReq - 29, // 83: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:input_type -> crabs.evening_detective_server.ChangeUserPasswordReq - 31, // 84: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:input_type -> crabs.evening_detective_server.AddUserRoleReq - 33, // 85: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:input_type -> crabs.evening_detective_server.DeleteUserRoleReq - 35, // 86: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:input_type -> crabs.evening_detective_server.GetPermissionsReq - 37, // 87: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:input_type -> crabs.evening_detective_server.UploadFileReq - 39, // 88: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:input_type -> crabs.evening_detective_server.DownloadFileReq - 40, // 89: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:input_type -> crabs.evening_detective_server.AddScenarioReq - 42, // 90: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:input_type -> crabs.evening_detective_server.GetMyScenariosReq - 44, // 91: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:input_type -> crabs.evening_detective_server.GetScenariosCatalogReq - 46, // 92: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:input_type -> crabs.evening_detective_server.GetScenarioReq - 46, // 93: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:input_type -> crabs.evening_detective_server.GetScenarioReq - 60, // 94: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:input_type -> crabs.evening_detective_server.UpdateScenarioReq - 62, // 95: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:input_type -> crabs.evening_detective_server.PublicScenarioReq - 64, // 96: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:input_type -> crabs.evening_detective_server.DraftScenarioReq - 66, // 97: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:input_type -> crabs.evening_detective_server.DeleteScenarioReq - 68, // 98: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:input_type -> crabs.evening_detective_server.AddScenarioPlaceReq - 70, // 99: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:input_type -> crabs.evening_detective_server.UpdateScenarioPlaceReq - 72, // 100: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:input_type -> crabs.evening_detective_server.DeleteScenarioPlaceReq - 78, // 101: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:input_type -> crabs.evening_detective_server.AddScenarioQuestionReq - 80, // 102: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:input_type -> crabs.evening_detective_server.UpdateScenarioQuestionReq - 82, // 103: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:input_type -> crabs.evening_detective_server.DeleteScenarioQuestionReq - 171, // 104: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:input_type -> crabs.evening_detective_server.UpdateScenarioBackgroundReq - 76, // 105: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:input_type -> crabs.evening_detective_server.UpdateScenarioIntroReq - 74, // 106: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:input_type -> crabs.evening_detective_server.UpdateScenarioConclusionReq - 84, // 107: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:input_type -> crabs.evening_detective_server.DownloadScenarioArchiveReq - 180, // 108: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:input_type -> google.api.HttpBody - 86, // 109: crabs.evening_detective_server.EveningDetectiveServer.AddGame:input_type -> crabs.evening_detective_server.AddGameReq - 88, // 110: crabs.evening_detective_server.EveningDetectiveServer.GetGames:input_type -> crabs.evening_detective_server.GetGamesReq - 119, // 111: crabs.evening_detective_server.EveningDetectiveServer.GetGame:input_type -> crabs.evening_detective_server.GetGameReq - 173, // 112: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:input_type -> crabs.evening_detective_server.IssueGameTicketsReq - 176, // 113: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:input_type -> crabs.evening_detective_server.GetTicketReq - 92, // 114: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:input_type -> crabs.evening_detective_server.CreateScreenSessionReq - 94, // 115: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:input_type -> crabs.evening_detective_server.GetScreenStateReq - 96, // 116: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:input_type -> crabs.evening_detective_server.GetGameScreensReq - 98, // 117: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:input_type -> crabs.evening_detective_server.BindScreenReq - 100, // 118: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:input_type -> crabs.evening_detective_server.UnbindScreenReq - 102, // 119: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:input_type -> crabs.evening_detective_server.SetScreenSoundReq - 105, // 120: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:input_type -> crabs.evening_detective_server.GetGameMapReq - 107, // 121: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:input_type -> crabs.evening_detective_server.UpdateGameMapItemReq - 109, // 122: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:input_type -> crabs.evening_detective_server.SetScreenModeReq - 111, // 123: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:input_type -> crabs.evening_detective_server.SendScreenCommandReq - 113, // 124: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:input_type -> crabs.evening_detective_server.GetScreenResultsReq - 119, // 125: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:input_type -> crabs.evening_detective_server.GetGameReq - 121, // 126: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:input_type -> crabs.evening_detective_server.GetGameAnswersReq - 123, // 127: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:input_type -> crabs.evening_detective_server.GetGameResultsReq - 128, // 128: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:input_type -> crabs.evening_detective_server.CreateGameReviewReq - 130, // 129: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:input_type -> crabs.evening_detective_server.GetGameReviewsReq - 131, // 130: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:input_type -> crabs.evening_detective_server.GetScenarioReviewsReq - 130, // 131: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:input_type -> crabs.evening_detective_server.GetGameReviewsReq - 132, // 132: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:input_type -> crabs.evening_detective_server.GetReviewsForModerationReq - 134, // 133: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:input_type -> crabs.evening_detective_server.ModerateGameReviewReq - 136, // 134: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:input_type -> crabs.evening_detective_server.UpdateGameReq - 138, // 135: crabs.evening_detective_server.EveningDetectiveServer.StartGame:input_type -> crabs.evening_detective_server.StartGameReq - 140, // 136: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:input_type -> crabs.evening_detective_server.PauseGameReq - 142, // 137: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:input_type -> crabs.evening_detective_server.PlayGameReq - 144, // 138: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:input_type -> crabs.evening_detective_server.FinishGameReq - 146, // 139: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:input_type -> crabs.evening_detective_server.ResetGameReq - 148, // 140: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:input_type -> crabs.evening_detective_server.DeleteGameReq - 150, // 141: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:input_type -> crabs.evening_detective_server.AddTeamReq - 152, // 142: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:input_type -> crabs.evening_detective_server.UpdateTeamReq - 154, // 143: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:input_type -> crabs.evening_detective_server.DeleteTeamReq - 156, // 144: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:input_type -> crabs.evening_detective_server.GiveTeamApplicationsReq - 158, // 145: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:input_type -> crabs.evening_detective_server.GetTeamStoryReq - 161, // 146: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:input_type -> crabs.evening_detective_server.AddTeamActionReq - 163, // 147: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:input_type -> crabs.evening_detective_server.DeleteLastTeamActionReq - 165, // 148: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:input_type -> crabs.evening_detective_server.GetTeamAnswersReq - 167, // 149: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:input_type -> crabs.evening_detective_server.SubmitTeamAnswersReq - 169, // 150: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:input_type -> crabs.evening_detective_server.SetTeamAnswerScoreReq - 117, // 151: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp - 117, // 152: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp - 3, // 153: crabs.evening_detective_server.EveningDetectiveServer.Ping:output_type -> crabs.evening_detective_server.PingRsp - 5, // 154: crabs.evening_detective_server.EveningDetectiveServer.Echo:output_type -> crabs.evening_detective_server.EchoRsp - 7, // 155: crabs.evening_detective_server.EveningDetectiveServer.Signup:output_type -> crabs.evening_detective_server.SignupRsp - 9, // 156: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:output_type -> crabs.evening_detective_server.RefreshPasswordRsp - 11, // 157: crabs.evening_detective_server.EveningDetectiveServer.Login:output_type -> crabs.evening_detective_server.LoginRsp - 13, // 158: crabs.evening_detective_server.EveningDetectiveServer.Refresh:output_type -> crabs.evening_detective_server.RefreshRsp - 15, // 159: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:output_type -> crabs.evening_detective_server.DeleteAccountRsp - 17, // 160: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:output_type -> crabs.evening_detective_server.GetTermsRsp - 19, // 161: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:output_type -> crabs.evening_detective_server.GetPrivacyRsp - 21, // 162: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:output_type -> crabs.evening_detective_server.GetConsentRsp - 23, // 163: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:output_type -> crabs.evening_detective_server.GetUsersRsp - 26, // 164: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:output_type -> crabs.evening_detective_server.GetUserByIdRsp - 28, // 165: crabs.evening_detective_server.EveningDetectiveServer.GetMe:output_type -> crabs.evening_detective_server.GetMeRsp - 30, // 166: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:output_type -> crabs.evening_detective_server.ChangeUserPasswordRsp - 32, // 167: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:output_type -> crabs.evening_detective_server.AddUserRoleRsp - 34, // 168: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:output_type -> crabs.evening_detective_server.DeleteUserRoleRsp - 36, // 169: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:output_type -> crabs.evening_detective_server.GetPermissionsRsp - 38, // 170: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:output_type -> crabs.evening_detective_server.UploadFileRsp - 180, // 171: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:output_type -> google.api.HttpBody - 41, // 172: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:output_type -> crabs.evening_detective_server.AddScenarioRsp - 43, // 173: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:output_type -> crabs.evening_detective_server.GetMyScenariosRsp - 45, // 174: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:output_type -> crabs.evening_detective_server.GetScenariosCatalogRsp - 47, // 175: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp - 47, // 176: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp - 61, // 177: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:output_type -> crabs.evening_detective_server.UpdateScenarioRsp - 63, // 178: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:output_type -> crabs.evening_detective_server.PublicScenarioRsp - 65, // 179: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:output_type -> crabs.evening_detective_server.DraftScenarioRsp - 67, // 180: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:output_type -> crabs.evening_detective_server.DeleteScenarioRsp - 69, // 181: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:output_type -> crabs.evening_detective_server.AddScenarioPlaceRsp - 71, // 182: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:output_type -> crabs.evening_detective_server.UpdateScenarioPlaceRsp - 73, // 183: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:output_type -> crabs.evening_detective_server.DeleteScenarioPlaceRsp - 79, // 184: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:output_type -> crabs.evening_detective_server.AddScenarioQuestionRsp - 81, // 185: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:output_type -> crabs.evening_detective_server.UpdateScenarioQuestionRsp - 83, // 186: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:output_type -> crabs.evening_detective_server.DeleteScenarioQuestionRsp - 172, // 187: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:output_type -> crabs.evening_detective_server.UpdateScenarioBackgroundRsp - 77, // 188: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:output_type -> crabs.evening_detective_server.UpdateScenarioIntroRsp - 75, // 189: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:output_type -> crabs.evening_detective_server.UpdateScenarioConclusionRsp - 180, // 190: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:output_type -> google.api.HttpBody - 85, // 191: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:output_type -> crabs.evening_detective_server.UploadScenarioArchiveRsp - 87, // 192: crabs.evening_detective_server.EveningDetectiveServer.AddGame:output_type -> crabs.evening_detective_server.AddGameRsp - 89, // 193: crabs.evening_detective_server.EveningDetectiveServer.GetGames:output_type -> crabs.evening_detective_server.GetGamesRsp - 120, // 194: crabs.evening_detective_server.EveningDetectiveServer.GetGame:output_type -> crabs.evening_detective_server.GetGameRsp - 174, // 195: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:output_type -> crabs.evening_detective_server.IssueGameTicketsRsp - 177, // 196: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:output_type -> crabs.evening_detective_server.GetTicketRsp - 93, // 197: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:output_type -> crabs.evening_detective_server.CreateScreenSessionRsp - 95, // 198: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:output_type -> crabs.evening_detective_server.GetScreenStateRsp - 97, // 199: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:output_type -> crabs.evening_detective_server.GetGameScreensRsp - 99, // 200: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:output_type -> crabs.evening_detective_server.BindScreenRsp - 101, // 201: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:output_type -> crabs.evening_detective_server.UnbindScreenRsp - 103, // 202: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:output_type -> crabs.evening_detective_server.SetScreenSoundRsp - 106, // 203: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:output_type -> crabs.evening_detective_server.GetGameMapRsp - 108, // 204: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:output_type -> crabs.evening_detective_server.UpdateGameMapItemRsp - 110, // 205: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:output_type -> crabs.evening_detective_server.SetScreenModeRsp - 112, // 206: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:output_type -> crabs.evening_detective_server.SendScreenCommandRsp - 114, // 207: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:output_type -> crabs.evening_detective_server.GetScreenResultsRsp - 180, // 208: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:output_type -> google.api.HttpBody - 122, // 209: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:output_type -> crabs.evening_detective_server.GetGameAnswersRsp - 126, // 210: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:output_type -> crabs.evening_detective_server.GetGameResultsRsp - 129, // 211: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:output_type -> crabs.evening_detective_server.CreateGameReviewRsp - 133, // 212: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp - 133, // 213: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp - 133, // 214: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp - 133, // 215: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp - 135, // 216: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:output_type -> crabs.evening_detective_server.ModerateGameReviewRsp - 137, // 217: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:output_type -> crabs.evening_detective_server.UpdateGameRsp - 139, // 218: crabs.evening_detective_server.EveningDetectiveServer.StartGame:output_type -> crabs.evening_detective_server.StartGameRsp - 141, // 219: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:output_type -> crabs.evening_detective_server.PauseGameRsp - 143, // 220: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:output_type -> crabs.evening_detective_server.PlayGameRsp - 145, // 221: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:output_type -> crabs.evening_detective_server.FinishGameRsp - 147, // 222: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:output_type -> crabs.evening_detective_server.ResetGameRsp - 149, // 223: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:output_type -> crabs.evening_detective_server.DeleteGameRsp - 151, // 224: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:output_type -> crabs.evening_detective_server.AddTeamRsp - 153, // 225: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:output_type -> crabs.evening_detective_server.UpdateTeamRsp - 155, // 226: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:output_type -> crabs.evening_detective_server.DeleteTeamRsp - 157, // 227: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:output_type -> crabs.evening_detective_server.GiveTeamApplicationsRsp - 159, // 228: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:output_type -> crabs.evening_detective_server.GetTeamStoryRsp - 162, // 229: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:output_type -> crabs.evening_detective_server.AddTeamActionRsp - 164, // 230: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:output_type -> crabs.evening_detective_server.DeleteLastTeamActionRsp - 166, // 231: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:output_type -> crabs.evening_detective_server.GetTeamAnswersRsp - 168, // 232: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:output_type -> crabs.evening_detective_server.SubmitTeamAnswersRsp - 170, // 233: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:output_type -> crabs.evening_detective_server.SetTeamAnswerScoreRsp - 151, // [151:234] is the sub-list for method output_type - 68, // [68:151] is the sub-list for method input_type - 68, // [68:68] is the sub-list for extension type_name - 68, // [68:68] is the sub-list for extension extendee - 0, // [0:68] is the sub-list for field type_name + 180, // 65: crabs.evening_detective_server.GetTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage + 180, // 66: crabs.evening_detective_server.AcceptTicketRsp.ticket:type_name -> crabs.evening_detective_server.TicketPage + 181, // 67: crabs.evening_detective_server.TicketPage.start_at:type_name -> google.protobuf.Timestamp + 181, // 68: crabs.evening_detective_server.TicketPage.used_at:type_name -> google.protobuf.Timestamp + 115, // 69: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:input_type -> crabs.evening_detective_server.GetParticipationReq + 116, // 70: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:input_type -> crabs.evening_detective_server.AnswerParticipationReq + 2, // 71: crabs.evening_detective_server.EveningDetectiveServer.Ping:input_type -> crabs.evening_detective_server.PingReq + 4, // 72: crabs.evening_detective_server.EveningDetectiveServer.Echo:input_type -> crabs.evening_detective_server.EchoReq + 6, // 73: crabs.evening_detective_server.EveningDetectiveServer.Signup:input_type -> crabs.evening_detective_server.SignupReq + 8, // 74: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:input_type -> crabs.evening_detective_server.RefreshPasswordReq + 10, // 75: crabs.evening_detective_server.EveningDetectiveServer.Login:input_type -> crabs.evening_detective_server.LoginReq + 12, // 76: crabs.evening_detective_server.EveningDetectiveServer.Refresh:input_type -> crabs.evening_detective_server.RefreshReq + 14, // 77: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:input_type -> crabs.evening_detective_server.DeleteAccountReq + 16, // 78: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:input_type -> crabs.evening_detective_server.GetTermsReq + 18, // 79: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:input_type -> crabs.evening_detective_server.GetPrivacyReq + 20, // 80: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:input_type -> crabs.evening_detective_server.GetConsentReq + 22, // 81: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:input_type -> crabs.evening_detective_server.GetUsersReq + 25, // 82: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:input_type -> crabs.evening_detective_server.GetUserByIdReq + 27, // 83: crabs.evening_detective_server.EveningDetectiveServer.GetMe:input_type -> crabs.evening_detective_server.GetMeReq + 29, // 84: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:input_type -> crabs.evening_detective_server.ChangeUserPasswordReq + 31, // 85: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:input_type -> crabs.evening_detective_server.AddUserRoleReq + 33, // 86: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:input_type -> crabs.evening_detective_server.DeleteUserRoleReq + 35, // 87: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:input_type -> crabs.evening_detective_server.GetPermissionsReq + 37, // 88: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:input_type -> crabs.evening_detective_server.UploadFileReq + 39, // 89: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:input_type -> crabs.evening_detective_server.DownloadFileReq + 40, // 90: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:input_type -> crabs.evening_detective_server.AddScenarioReq + 42, // 91: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:input_type -> crabs.evening_detective_server.GetMyScenariosReq + 44, // 92: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:input_type -> crabs.evening_detective_server.GetScenariosCatalogReq + 46, // 93: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:input_type -> crabs.evening_detective_server.GetScenarioReq + 46, // 94: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:input_type -> crabs.evening_detective_server.GetScenarioReq + 60, // 95: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:input_type -> crabs.evening_detective_server.UpdateScenarioReq + 62, // 96: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:input_type -> crabs.evening_detective_server.PublicScenarioReq + 64, // 97: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:input_type -> crabs.evening_detective_server.DraftScenarioReq + 66, // 98: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:input_type -> crabs.evening_detective_server.DeleteScenarioReq + 68, // 99: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:input_type -> crabs.evening_detective_server.AddScenarioPlaceReq + 70, // 100: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:input_type -> crabs.evening_detective_server.UpdateScenarioPlaceReq + 72, // 101: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:input_type -> crabs.evening_detective_server.DeleteScenarioPlaceReq + 78, // 102: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:input_type -> crabs.evening_detective_server.AddScenarioQuestionReq + 80, // 103: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:input_type -> crabs.evening_detective_server.UpdateScenarioQuestionReq + 82, // 104: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:input_type -> crabs.evening_detective_server.DeleteScenarioQuestionReq + 171, // 105: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:input_type -> crabs.evening_detective_server.UpdateScenarioBackgroundReq + 76, // 106: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:input_type -> crabs.evening_detective_server.UpdateScenarioIntroReq + 74, // 107: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:input_type -> crabs.evening_detective_server.UpdateScenarioConclusionReq + 84, // 108: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:input_type -> crabs.evening_detective_server.DownloadScenarioArchiveReq + 182, // 109: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:input_type -> google.api.HttpBody + 86, // 110: crabs.evening_detective_server.EveningDetectiveServer.AddGame:input_type -> crabs.evening_detective_server.AddGameReq + 88, // 111: crabs.evening_detective_server.EveningDetectiveServer.GetGames:input_type -> crabs.evening_detective_server.GetGamesReq + 119, // 112: crabs.evening_detective_server.EveningDetectiveServer.GetGame:input_type -> crabs.evening_detective_server.GetGameReq + 173, // 113: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:input_type -> crabs.evening_detective_server.IssueGameTicketsReq + 176, // 114: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:input_type -> crabs.evening_detective_server.GetTicketReq + 178, // 115: crabs.evening_detective_server.EveningDetectiveServer.AcceptTicket:input_type -> crabs.evening_detective_server.AcceptTicketReq + 92, // 116: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:input_type -> crabs.evening_detective_server.CreateScreenSessionReq + 94, // 117: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:input_type -> crabs.evening_detective_server.GetScreenStateReq + 96, // 118: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:input_type -> crabs.evening_detective_server.GetGameScreensReq + 98, // 119: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:input_type -> crabs.evening_detective_server.BindScreenReq + 100, // 120: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:input_type -> crabs.evening_detective_server.UnbindScreenReq + 102, // 121: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:input_type -> crabs.evening_detective_server.SetScreenSoundReq + 105, // 122: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:input_type -> crabs.evening_detective_server.GetGameMapReq + 107, // 123: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:input_type -> crabs.evening_detective_server.UpdateGameMapItemReq + 109, // 124: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:input_type -> crabs.evening_detective_server.SetScreenModeReq + 111, // 125: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:input_type -> crabs.evening_detective_server.SendScreenCommandReq + 113, // 126: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:input_type -> crabs.evening_detective_server.GetScreenResultsReq + 119, // 127: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:input_type -> crabs.evening_detective_server.GetGameReq + 121, // 128: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:input_type -> crabs.evening_detective_server.GetGameAnswersReq + 123, // 129: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:input_type -> crabs.evening_detective_server.GetGameResultsReq + 128, // 130: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:input_type -> crabs.evening_detective_server.CreateGameReviewReq + 130, // 131: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:input_type -> crabs.evening_detective_server.GetGameReviewsReq + 131, // 132: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:input_type -> crabs.evening_detective_server.GetScenarioReviewsReq + 130, // 133: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:input_type -> crabs.evening_detective_server.GetGameReviewsReq + 132, // 134: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:input_type -> crabs.evening_detective_server.GetReviewsForModerationReq + 134, // 135: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:input_type -> crabs.evening_detective_server.ModerateGameReviewReq + 136, // 136: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:input_type -> crabs.evening_detective_server.UpdateGameReq + 138, // 137: crabs.evening_detective_server.EveningDetectiveServer.StartGame:input_type -> crabs.evening_detective_server.StartGameReq + 140, // 138: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:input_type -> crabs.evening_detective_server.PauseGameReq + 142, // 139: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:input_type -> crabs.evening_detective_server.PlayGameReq + 144, // 140: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:input_type -> crabs.evening_detective_server.FinishGameReq + 146, // 141: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:input_type -> crabs.evening_detective_server.ResetGameReq + 148, // 142: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:input_type -> crabs.evening_detective_server.DeleteGameReq + 150, // 143: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:input_type -> crabs.evening_detective_server.AddTeamReq + 152, // 144: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:input_type -> crabs.evening_detective_server.UpdateTeamReq + 154, // 145: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:input_type -> crabs.evening_detective_server.DeleteTeamReq + 156, // 146: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:input_type -> crabs.evening_detective_server.GiveTeamApplicationsReq + 158, // 147: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:input_type -> crabs.evening_detective_server.GetTeamStoryReq + 161, // 148: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:input_type -> crabs.evening_detective_server.AddTeamActionReq + 163, // 149: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:input_type -> crabs.evening_detective_server.DeleteLastTeamActionReq + 165, // 150: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:input_type -> crabs.evening_detective_server.GetTeamAnswersReq + 167, // 151: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:input_type -> crabs.evening_detective_server.SubmitTeamAnswersReq + 169, // 152: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:input_type -> crabs.evening_detective_server.SetTeamAnswerScoreReq + 117, // 153: crabs.evening_detective_server.EveningDetectiveServer.GetParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp + 117, // 154: crabs.evening_detective_server.EveningDetectiveServer.AnswerParticipation:output_type -> crabs.evening_detective_server.ParticipationRsp + 3, // 155: crabs.evening_detective_server.EveningDetectiveServer.Ping:output_type -> crabs.evening_detective_server.PingRsp + 5, // 156: crabs.evening_detective_server.EveningDetectiveServer.Echo:output_type -> crabs.evening_detective_server.EchoRsp + 7, // 157: crabs.evening_detective_server.EveningDetectiveServer.Signup:output_type -> crabs.evening_detective_server.SignupRsp + 9, // 158: crabs.evening_detective_server.EveningDetectiveServer.RefreshPassword:output_type -> crabs.evening_detective_server.RefreshPasswordRsp + 11, // 159: crabs.evening_detective_server.EveningDetectiveServer.Login:output_type -> crabs.evening_detective_server.LoginRsp + 13, // 160: crabs.evening_detective_server.EveningDetectiveServer.Refresh:output_type -> crabs.evening_detective_server.RefreshRsp + 15, // 161: crabs.evening_detective_server.EveningDetectiveServer.DeleteAccount:output_type -> crabs.evening_detective_server.DeleteAccountRsp + 17, // 162: crabs.evening_detective_server.EveningDetectiveServer.GetTerms:output_type -> crabs.evening_detective_server.GetTermsRsp + 19, // 163: crabs.evening_detective_server.EveningDetectiveServer.GetPrivacy:output_type -> crabs.evening_detective_server.GetPrivacyRsp + 21, // 164: crabs.evening_detective_server.EveningDetectiveServer.GetConsent:output_type -> crabs.evening_detective_server.GetConsentRsp + 23, // 165: crabs.evening_detective_server.EveningDetectiveServer.GetUsers:output_type -> crabs.evening_detective_server.GetUsersRsp + 26, // 166: crabs.evening_detective_server.EveningDetectiveServer.GetUserById:output_type -> crabs.evening_detective_server.GetUserByIdRsp + 28, // 167: crabs.evening_detective_server.EveningDetectiveServer.GetMe:output_type -> crabs.evening_detective_server.GetMeRsp + 30, // 168: crabs.evening_detective_server.EveningDetectiveServer.ChangeUserPassword:output_type -> crabs.evening_detective_server.ChangeUserPasswordRsp + 32, // 169: crabs.evening_detective_server.EveningDetectiveServer.AddUserRole:output_type -> crabs.evening_detective_server.AddUserRoleRsp + 34, // 170: crabs.evening_detective_server.EveningDetectiveServer.DeleteUserRole:output_type -> crabs.evening_detective_server.DeleteUserRoleRsp + 36, // 171: crabs.evening_detective_server.EveningDetectiveServer.GetPermissions:output_type -> crabs.evening_detective_server.GetPermissionsRsp + 38, // 172: crabs.evening_detective_server.EveningDetectiveServer.UploadFile:output_type -> crabs.evening_detective_server.UploadFileRsp + 182, // 173: crabs.evening_detective_server.EveningDetectiveServer.DownloadFile:output_type -> google.api.HttpBody + 41, // 174: crabs.evening_detective_server.EveningDetectiveServer.AddScenario:output_type -> crabs.evening_detective_server.AddScenarioRsp + 43, // 175: crabs.evening_detective_server.EveningDetectiveServer.GetMyScenarios:output_type -> crabs.evening_detective_server.GetMyScenariosRsp + 45, // 176: crabs.evening_detective_server.EveningDetectiveServer.GetScenariosCatalog:output_type -> crabs.evening_detective_server.GetScenariosCatalogRsp + 47, // 177: crabs.evening_detective_server.EveningDetectiveServer.GetFullScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp + 47, // 178: crabs.evening_detective_server.EveningDetectiveServer.GetScenario:output_type -> crabs.evening_detective_server.GetScenarioRsp + 61, // 179: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenario:output_type -> crabs.evening_detective_server.UpdateScenarioRsp + 63, // 180: crabs.evening_detective_server.EveningDetectiveServer.PublicScenario:output_type -> crabs.evening_detective_server.PublicScenarioRsp + 65, // 181: crabs.evening_detective_server.EveningDetectiveServer.DraftScenario:output_type -> crabs.evening_detective_server.DraftScenarioRsp + 67, // 182: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenario:output_type -> crabs.evening_detective_server.DeleteScenarioRsp + 69, // 183: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioPlace:output_type -> crabs.evening_detective_server.AddScenarioPlaceRsp + 71, // 184: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioPlace:output_type -> crabs.evening_detective_server.UpdateScenarioPlaceRsp + 73, // 185: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioPlace:output_type -> crabs.evening_detective_server.DeleteScenarioPlaceRsp + 79, // 186: crabs.evening_detective_server.EveningDetectiveServer.AddScenarioQuestion:output_type -> crabs.evening_detective_server.AddScenarioQuestionRsp + 81, // 187: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioQuestion:output_type -> crabs.evening_detective_server.UpdateScenarioQuestionRsp + 83, // 188: crabs.evening_detective_server.EveningDetectiveServer.DeleteScenarioQuestion:output_type -> crabs.evening_detective_server.DeleteScenarioQuestionRsp + 172, // 189: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioBackground:output_type -> crabs.evening_detective_server.UpdateScenarioBackgroundRsp + 77, // 190: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioIntro:output_type -> crabs.evening_detective_server.UpdateScenarioIntroRsp + 75, // 191: crabs.evening_detective_server.EveningDetectiveServer.UpdateScenarioConclusion:output_type -> crabs.evening_detective_server.UpdateScenarioConclusionRsp + 182, // 192: crabs.evening_detective_server.EveningDetectiveServer.DownloadScenarioArchive:output_type -> google.api.HttpBody + 85, // 193: crabs.evening_detective_server.EveningDetectiveServer.UploadScenarioArchive:output_type -> crabs.evening_detective_server.UploadScenarioArchiveRsp + 87, // 194: crabs.evening_detective_server.EveningDetectiveServer.AddGame:output_type -> crabs.evening_detective_server.AddGameRsp + 89, // 195: crabs.evening_detective_server.EveningDetectiveServer.GetGames:output_type -> crabs.evening_detective_server.GetGamesRsp + 120, // 196: crabs.evening_detective_server.EveningDetectiveServer.GetGame:output_type -> crabs.evening_detective_server.GetGameRsp + 174, // 197: crabs.evening_detective_server.EveningDetectiveServer.IssueGameTickets:output_type -> crabs.evening_detective_server.IssueGameTicketsRsp + 177, // 198: crabs.evening_detective_server.EveningDetectiveServer.GetTicket:output_type -> crabs.evening_detective_server.GetTicketRsp + 179, // 199: crabs.evening_detective_server.EveningDetectiveServer.AcceptTicket:output_type -> crabs.evening_detective_server.AcceptTicketRsp + 93, // 200: crabs.evening_detective_server.EveningDetectiveServer.CreateScreenSession:output_type -> crabs.evening_detective_server.CreateScreenSessionRsp + 95, // 201: crabs.evening_detective_server.EveningDetectiveServer.GetScreenState:output_type -> crabs.evening_detective_server.GetScreenStateRsp + 97, // 202: crabs.evening_detective_server.EveningDetectiveServer.GetGameScreens:output_type -> crabs.evening_detective_server.GetGameScreensRsp + 99, // 203: crabs.evening_detective_server.EveningDetectiveServer.BindScreen:output_type -> crabs.evening_detective_server.BindScreenRsp + 101, // 204: crabs.evening_detective_server.EveningDetectiveServer.UnbindScreen:output_type -> crabs.evening_detective_server.UnbindScreenRsp + 103, // 205: crabs.evening_detective_server.EveningDetectiveServer.SetScreenSound:output_type -> crabs.evening_detective_server.SetScreenSoundRsp + 106, // 206: crabs.evening_detective_server.EveningDetectiveServer.GetGameMap:output_type -> crabs.evening_detective_server.GetGameMapRsp + 108, // 207: crabs.evening_detective_server.EveningDetectiveServer.UpdateGameMapItem:output_type -> crabs.evening_detective_server.UpdateGameMapItemRsp + 110, // 208: crabs.evening_detective_server.EveningDetectiveServer.SetScreenMode:output_type -> crabs.evening_detective_server.SetScreenModeRsp + 112, // 209: crabs.evening_detective_server.EveningDetectiveServer.SendScreenCommand:output_type -> crabs.evening_detective_server.SendScreenCommandRsp + 114, // 210: crabs.evening_detective_server.EveningDetectiveServer.GetScreenResults:output_type -> crabs.evening_detective_server.GetScreenResultsRsp + 182, // 211: crabs.evening_detective_server.EveningDetectiveServer.DownloadTeamQR:output_type -> google.api.HttpBody + 122, // 212: crabs.evening_detective_server.EveningDetectiveServer.GetGameAnswers:output_type -> crabs.evening_detective_server.GetGameAnswersRsp + 126, // 213: crabs.evening_detective_server.EveningDetectiveServer.GetGameResults:output_type -> crabs.evening_detective_server.GetGameResultsRsp + 129, // 214: crabs.evening_detective_server.EveningDetectiveServer.CreateGameReview:output_type -> crabs.evening_detective_server.CreateGameReviewRsp + 133, // 215: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp + 133, // 216: crabs.evening_detective_server.EveningDetectiveServer.GetScenarioReviews:output_type -> crabs.evening_detective_server.GetGameReviewsRsp + 133, // 217: crabs.evening_detective_server.EveningDetectiveServer.GetGameReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp + 133, // 218: crabs.evening_detective_server.EveningDetectiveServer.GetReviewsForModeration:output_type -> crabs.evening_detective_server.GetGameReviewsRsp + 135, // 219: crabs.evening_detective_server.EveningDetectiveServer.ModerateGameReview:output_type -> crabs.evening_detective_server.ModerateGameReviewRsp + 137, // 220: crabs.evening_detective_server.EveningDetectiveServer.UpdateGame:output_type -> crabs.evening_detective_server.UpdateGameRsp + 139, // 221: crabs.evening_detective_server.EveningDetectiveServer.StartGame:output_type -> crabs.evening_detective_server.StartGameRsp + 141, // 222: crabs.evening_detective_server.EveningDetectiveServer.PauseGame:output_type -> crabs.evening_detective_server.PauseGameRsp + 143, // 223: crabs.evening_detective_server.EveningDetectiveServer.PlayGame:output_type -> crabs.evening_detective_server.PlayGameRsp + 145, // 224: crabs.evening_detective_server.EveningDetectiveServer.FinishGame:output_type -> crabs.evening_detective_server.FinishGameRsp + 147, // 225: crabs.evening_detective_server.EveningDetectiveServer.ResetGame:output_type -> crabs.evening_detective_server.ResetGameRsp + 149, // 226: crabs.evening_detective_server.EveningDetectiveServer.DeleteGame:output_type -> crabs.evening_detective_server.DeleteGameRsp + 151, // 227: crabs.evening_detective_server.EveningDetectiveServer.AddTeam:output_type -> crabs.evening_detective_server.AddTeamRsp + 153, // 228: crabs.evening_detective_server.EveningDetectiveServer.UpdateTeam:output_type -> crabs.evening_detective_server.UpdateTeamRsp + 155, // 229: crabs.evening_detective_server.EveningDetectiveServer.DeleteTeam:output_type -> crabs.evening_detective_server.DeleteTeamRsp + 157, // 230: crabs.evening_detective_server.EveningDetectiveServer.GiveTeamApplications:output_type -> crabs.evening_detective_server.GiveTeamApplicationsRsp + 159, // 231: crabs.evening_detective_server.EveningDetectiveServer.GetTeamStory:output_type -> crabs.evening_detective_server.GetTeamStoryRsp + 162, // 232: crabs.evening_detective_server.EveningDetectiveServer.AddTeamAction:output_type -> crabs.evening_detective_server.AddTeamActionRsp + 164, // 233: crabs.evening_detective_server.EveningDetectiveServer.DeleteLastTeamAction:output_type -> crabs.evening_detective_server.DeleteLastTeamActionRsp + 166, // 234: crabs.evening_detective_server.EveningDetectiveServer.GetTeamAnswers:output_type -> crabs.evening_detective_server.GetTeamAnswersRsp + 168, // 235: crabs.evening_detective_server.EveningDetectiveServer.SubmitTeamAnswers:output_type -> crabs.evening_detective_server.SubmitTeamAnswersRsp + 170, // 236: crabs.evening_detective_server.EveningDetectiveServer.SetTeamAnswerScore:output_type -> crabs.evening_detective_server.SetTeamAnswerScoreRsp + 153, // [153:237] is the sub-list for method output_type + 69, // [69:153] is the sub-list for method input_type + 69, // [69:69] is the sub-list for extension type_name + 69, // [69:69] is the sub-list for extension extendee + 0, // [0:69] is the sub-list for field type_name } func init() { file_main_proto_init() } @@ -10932,14 +11049,14 @@ func file_main_proto_init() { file_main_proto_msgTypes[88].OneofWrappers = []any{} file_main_proto_msgTypes[89].OneofWrappers = []any{} file_main_proto_msgTypes[167].OneofWrappers = []any{} - file_main_proto_msgTypes[176].OneofWrappers = []any{} + file_main_proto_msgTypes[178].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: 2, - NumMessages: 177, + NumMessages: 179, NumExtensions: 0, NumServices: 1, }, diff --git a/proto/main.pb.gw.go b/proto/main.pb.gw.go index f205d02..9b7fa55 100644 --- a/proto/main.pb.gw.go +++ b/proto/main.pb.gw.go @@ -1656,6 +1656,51 @@ func local_request_EveningDetectiveServer_GetTicket_0(ctx context.Context, marsh return msg, metadata, err } +func request_EveningDetectiveServer_AcceptTicket_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq AcceptTicketReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if req.Body != nil { + _, _ = io.Copy(io.Discard, req.Body) + } + val, ok := pathParams["token"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "token") + } + protoReq.Token, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "token", err) + } + msg, err := client.AcceptTicket(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err +} + +func local_request_EveningDetectiveServer_AcceptTicket_0(ctx context.Context, marshaler runtime.Marshaler, server EveningDetectiveServerServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var ( + protoReq AcceptTicketReq + metadata runtime.ServerMetadata + err error + ) + if err := marshaler.NewDecoder(req.Body).Decode(&protoReq); err != nil && !errors.Is(err, io.EOF) { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + val, ok := pathParams["token"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "token") + } + protoReq.Token, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "token", err) + } + msg, err := server.AcceptTicket(ctx, &protoReq) + return msg, metadata, err +} + func request_EveningDetectiveServer_CreateScreenSession_0(ctx context.Context, marshaler runtime.Marshaler, client EveningDetectiveServerClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var ( protoReq CreateScreenSessionReq @@ -4149,6 +4194,26 @@ func RegisterEveningDetectiveServerHandlerServer(ctx context.Context, mux *runti } forward_EveningDetectiveServer_GetTicket_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_AcceptTicket_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/AcceptTicket", runtime.WithHTTPPathPattern("/api/tickets/{token}/accept")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_EveningDetectiveServer_AcceptTicket_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_AcceptTicket_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_CreateScreenSession_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -5711,6 +5776,23 @@ func RegisterEveningDetectiveServerHandlerClient(ctx context.Context, mux *runti } forward_EveningDetectiveServer_GetTicket_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) }) + mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_AcceptTicket_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/AcceptTicket", runtime.WithHTTPPathPattern("/api/tickets/{token}/accept")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_EveningDetectiveServer_AcceptTicket_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_AcceptTicket_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + }) mux.Handle(http.MethodPost, pattern_EveningDetectiveServer_CreateScreenSession_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -6390,6 +6472,7 @@ var ( 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_IssueGameTickets_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "games", "gameId", "tickets"}, "")) pattern_EveningDetectiveServer_GetTicket_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"api", "tickets", "token"}, "")) + pattern_EveningDetectiveServer_AcceptTicket_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "tickets", "token", "accept"}, "")) pattern_EveningDetectiveServer_CreateScreenSession_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"api", "screens"}, "")) pattern_EveningDetectiveServer_GetScreenState_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"api", "screens", "state"}, "")) pattern_EveningDetectiveServer_GetGameScreens_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"api", "games", "gameId", "screens"}, "")) @@ -6476,6 +6559,7 @@ var ( forward_EveningDetectiveServer_GetGame_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_IssueGameTickets_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_GetTicket_0 = runtime.ForwardResponseMessage + forward_EveningDetectiveServer_AcceptTicket_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_CreateScreenSession_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_GetScreenState_0 = runtime.ForwardResponseMessage forward_EveningDetectiveServer_GetGameScreens_0 = runtime.ForwardResponseMessage diff --git a/proto/main_grpc.pb.go b/proto/main_grpc.pb.go index e154756..bcf7536 100644 --- a/proto/main_grpc.pb.go +++ b/proto/main_grpc.pb.go @@ -66,6 +66,7 @@ const ( EveningDetectiveServer_GetGame_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetGame" EveningDetectiveServer_IssueGameTickets_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/IssueGameTickets" EveningDetectiveServer_GetTicket_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetTicket" + EveningDetectiveServer_AcceptTicket_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/AcceptTicket" EveningDetectiveServer_CreateScreenSession_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/CreateScreenSession" EveningDetectiveServer_GetScreenState_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetScreenState" EveningDetectiveServer_GetGameScreens_FullMethodName = "/crabs.evening_detective_server.EveningDetectiveServer/GetGameScreens" @@ -159,6 +160,7 @@ type EveningDetectiveServerClient interface { GetGame(ctx context.Context, in *GetGameReq, opts ...grpc.CallOption) (*GetGameRsp, error) IssueGameTickets(ctx context.Context, in *IssueGameTicketsReq, opts ...grpc.CallOption) (*IssueGameTicketsRsp, error) GetTicket(ctx context.Context, in *GetTicketReq, opts ...grpc.CallOption) (*GetTicketRsp, error) + AcceptTicket(ctx context.Context, in *AcceptTicketReq, opts ...grpc.CallOption) (*AcceptTicketRsp, error) // Создать сессию экрана. Экран получает токен и показывает QR для привязки. CreateScreenSession(ctx context.Context, in *CreateScreenSessionReq, opts ...grpc.CallOption) (*CreateScreenSessionRsp, error) // Получить состояние экрана по его токену. Вызывается самим экраном. @@ -672,6 +674,16 @@ func (c *eveningDetectiveServerClient) GetTicket(ctx context.Context, in *GetTic return out, nil } +func (c *eveningDetectiveServerClient) AcceptTicket(ctx context.Context, in *AcceptTicketReq, opts ...grpc.CallOption) (*AcceptTicketRsp, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(AcceptTicketRsp) + err := c.cc.Invoke(ctx, EveningDetectiveServer_AcceptTicket_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *eveningDetectiveServerClient) CreateScreenSession(ctx context.Context, in *CreateScreenSessionReq, opts ...grpc.CallOption) (*CreateScreenSessionRsp, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(CreateScreenSessionRsp) @@ -1096,6 +1108,7 @@ type EveningDetectiveServerServer interface { GetGame(context.Context, *GetGameReq) (*GetGameRsp, error) IssueGameTickets(context.Context, *IssueGameTicketsReq) (*IssueGameTicketsRsp, error) GetTicket(context.Context, *GetTicketReq) (*GetTicketRsp, error) + AcceptTicket(context.Context, *AcceptTicketReq) (*AcceptTicketRsp, error) // Создать сессию экрана. Экран получает токен и показывает QR для привязки. CreateScreenSession(context.Context, *CreateScreenSessionReq) (*CreateScreenSessionRsp, error) // Получить состояние экрана по его токену. Вызывается самим экраном. @@ -1287,6 +1300,9 @@ func (UnimplementedEveningDetectiveServerServer) IssueGameTickets(context.Contex func (UnimplementedEveningDetectiveServerServer) GetTicket(context.Context, *GetTicketReq) (*GetTicketRsp, error) { return nil, status.Error(codes.Unimplemented, "method GetTicket not implemented") } +func (UnimplementedEveningDetectiveServerServer) AcceptTicket(context.Context, *AcceptTicketReq) (*AcceptTicketRsp, error) { + return nil, status.Error(codes.Unimplemented, "method AcceptTicket not implemented") +} func (UnimplementedEveningDetectiveServerServer) CreateScreenSession(context.Context, *CreateScreenSessionReq) (*CreateScreenSessionRsp, error) { return nil, status.Error(codes.Unimplemented, "method CreateScreenSession not implemented") } @@ -2248,6 +2264,24 @@ func _EveningDetectiveServer_GetTicket_Handler(srv interface{}, ctx context.Cont return interceptor(ctx, in, info, handler) } +func _EveningDetectiveServer_AcceptTicket_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AcceptTicketReq) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(EveningDetectiveServerServer).AcceptTicket(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: EveningDetectiveServer_AcceptTicket_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(EveningDetectiveServerServer).AcceptTicket(ctx, req.(*AcceptTicketReq)) + } + return interceptor(ctx, in, info, handler) +} + func _EveningDetectiveServer_CreateScreenSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(CreateScreenSessionReq) if err := dec(in); err != nil { @@ -3105,6 +3139,10 @@ var EveningDetectiveServer_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetTicket", Handler: _EveningDetectiveServer_GetTicket_Handler, }, + { + MethodName: "AcceptTicket", + Handler: _EveningDetectiveServer_AcceptTicket_Handler, + }, { MethodName: "CreateScreenSession", Handler: _EveningDetectiveServer_CreateScreenSession_Handler,