add screen api

This commit is contained in:
2026-09-10 02:19:51 +07:00
parent 27b7a8acdf
commit 79bd3e2cf8
7 changed files with 2715 additions and 460 deletions
+167
View File
@@ -498,6 +498,84 @@ service EveningDetectiveServer {
};
}
// Создать сессию экрана. Экран получает токен и показывает QR для привязки.
rpc CreateScreenSession(CreateScreenSessionReq) returns (CreateScreenSessionRsp) {
option (google.api.http) = {
post: "/api/screens"
body: "*"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
security: {
security_requirement: {}
}
tags : "Экраны";
summary: "Создать сессию экрана";
};
}
// Получить состояние экрана по его токену. Вызывается самим экраном.
rpc GetScreenState(GetScreenStateReq) returns (GetScreenStateRsp) {
option (google.api.http) = {
post: "/api/screens/state"
body: "*"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
security: {
security_requirement: {}
}
tags : "Экраны";
summary: "Получить состояние экрана";
};
}
// Привязать экран к игре. Требует авторизацию организатора, автора или администратора.
rpc BindScreen(BindScreenReq) returns (BindScreenRsp) {
option (google.api.http) = {
post: "/api/screens/{screenId}/bind"
body: "*"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
tags : "Экраны";
summary: "Привязать экран к игре";
};
}
// Отвязать экран от игры. Требует авторизацию организатора, автора или администратора.
rpc UnbindScreen(UnbindScreenReq) returns (UnbindScreenRsp) {
option (google.api.http) = {
post: "/api/screens/{screenId}/unbind"
body: "*"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
tags : "Экраны";
summary: "Отвязать экран от игры";
};
}
// Изменить общий режим показа всех экранов игры.
rpc SetScreenMode(SetScreenModeReq) returns (SetScreenModeRsp) {
option (google.api.http) = {
post: "/api/games/{gameId}/screens/mode"
body: "*"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
tags : "Экраны";
summary: "Изменить режим показа экранов";
};
}
// Отправить общую команду экранам игры.
rpc SendScreenCommand(SendScreenCommandReq) returns (SendScreenCommandRsp) {
option (google.api.http) = {
post: "/api/games/{gameId}/screens/command"
body: "*"
};
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
tags : "Экраны";
summary: "Отправить команду экранам";
};
}
rpc DownloadTeamQR(GetGameReq) returns (google.api.HttpBody) {
option (google.api.http) = {
get: "/api/games/{id}/teams/qr.pdf"
@@ -1168,6 +1246,95 @@ message Game {
optional google.protobuf.Timestamp ended_at = 9;
}
enum ScreenMode {
SCREEN_MODE_UNSPECIFIED = 0;
SCREEN_MODE_COVER = 1;
SCREEN_MODE_INTRO = 2;
SCREEN_MODE_INTRO_DONE = 3;
SCREEN_MODE_CONCLUSION = 4;
SCREEN_MODE_CONCLUSION_DONE = 5;
SCREEN_MODE_RESULTS = 6;
}
enum ScreenCommand {
SCREEN_COMMAND_UNSPECIFIED = 0;
SCREEN_COMMAND_PLAY = 1;
SCREEN_COMMAND_PAUSE = 2;
SCREEN_COMMAND_RESUME = 3;
SCREEN_COMMAND_STOP = 4;
SCREEN_COMMAND_REPLAY = 5;
SCREEN_COMMAND_SEEK = 6;
SCREEN_COMMAND_VOLUME = 7;
}
message ScreenState {
string id = 1;
string status = 2;
optional int32 game_id = 3;
ScreenMode mode = 4;
bool sound_enabled = 5;
string error = 6;
int64 state_version = 7;
int64 position_ms = 8;
}
message CreateScreenSessionReq {}
message CreateScreenSessionRsp {
string error = 1;
string screen_id = 2;
string access_token = 3;
}
message GetScreenStateReq {
string screenId = 1;
string accessToken = 2;
}
message GetScreenStateRsp {
string error = 1;
ScreenState state = 2;
}
message BindScreenReq {
string screenId = 1;
string accessToken = 2;
int32 gameId = 3;
}
message BindScreenRsp {
string error = 1;
ScreenState state = 2;
}
message UnbindScreenReq {
string screenId = 1;
}
message UnbindScreenRsp {
string error = 1;
}
message SetScreenModeReq {
int32 gameId = 1;
ScreenMode mode = 2;
}
message SetScreenModeRsp {
string error = 1;
}
message SendScreenCommandReq {
int32 gameId = 1;
ScreenCommand command = 2;
int64 position_ms = 3;
int32 volume = 4;
}
message SendScreenCommandRsp {
string error = 1;
}
message Team {
int32 id = 1;
string name = 2;