This commit is contained in:
2026-10-01 16:12:38 +07:00
parent f8d78b04ff
commit 06c657f593
8 changed files with 152 additions and 28 deletions
+20 -20
View File
@@ -12,7 +12,7 @@ import (
"evening_detective_server/internal/modules/processor_jwt"
"evening_detective_server/internal/modules/roles"
"evening_detective_server/internal/repos/screen_sessions_repo"
"evening_detective_server/internal/services/screen_service"
proto "evening_detective_server/proto"
"github.com/google/uuid"
@@ -22,7 +22,7 @@ import (
func (s *server) CreateScreenSession(ctx context.Context, _ *proto.CreateScreenSessionReq) (*proto.CreateScreenSessionRsp, error) {
token := uuid.New().String()
id, err := s.screenRepo.Create(ctx, hashScreenToken(token))
id, err := s.screenService.Create(ctx, hashScreenToken(token))
if err != nil {
return nil, status.Error(codes.Internal, "не удалось создать сессию экрана")
}
@@ -37,8 +37,8 @@ func (s *server) GetScreenState(ctx context.Context, req *proto.GetScreenStateRe
if err != nil || id <= 0 {
return nil, status.Error(codes.InvalidArgument, "некорректный идентификатор экрана")
}
session, err := s.screenRepo.Get(ctx, id, hashScreenToken(req.AccessToken))
if errors.Is(err, screen_sessions_repo.ErrScreenNotFound) {
session, err := s.screenService.Get(ctx, id, hashScreenToken(req.AccessToken))
if errors.Is(err, screen_service.ErrScreenNotFound) {
return nil, status.Error(codes.Unauthenticated, "недействительная сессия экрана")
}
if err != nil {
@@ -59,7 +59,7 @@ func (s *server) GetGameScreens(ctx context.Context, req *proto.GetGameScreensRe
if _, err := s.gameService.GetGame(ctx, int(req.GameID)); err != nil {
return nil, status.Error(codes.NotFound, "игра не найдена")
}
sessions, err := s.screenRepo.ListByGame(ctx, int(req.GameID))
sessions, err := s.screenService.ListByGame(ctx, int(req.GameID))
if err != nil {
return nil, status.Error(codes.Internal, "не удалось получить экраны игры")
}
@@ -87,13 +87,13 @@ func (s *server) BindScreen(ctx context.Context, req *proto.BindScreenReq) (*pro
return nil, status.Error(codes.NotFound, "игра не найдена")
}
hash := hashScreenToken(req.AccessToken)
if err = s.screenRepo.Bind(ctx, id, int(req.GameID), hash); err != nil {
if errors.Is(err, screen_sessions_repo.ErrScreenNotFound) {
if err = s.screenService.Bind(ctx, id, int(req.GameID), hash); err != nil {
if errors.Is(err, screen_service.ErrScreenNotFound) {
return nil, status.Error(codes.Unauthenticated, "недействительная сессия экрана")
}
return nil, status.Error(codes.Internal, "не удалось привязать экран")
}
session, err := s.screenRepo.Get(ctx, id, hash)
session, err := s.screenService.Get(ctx, id, hash)
if err != nil {
return nil, status.Error(codes.Internal, "не удалось получить состояние экрана")
}
@@ -113,8 +113,8 @@ func (s *server) UnbindScreen(ctx context.Context, req *proto.UnbindScreenReq) (
if err != nil || id <= 0 {
return nil, status.Error(codes.InvalidArgument, "некорректный идентификатор экрана")
}
if err = s.screenRepo.Unbind(ctx, id); err != nil {
if errors.Is(err, screen_sessions_repo.ErrScreenNotFound) {
if err = s.screenService.Unbind(ctx, id); err != nil {
if errors.Is(err, screen_service.ErrScreenNotFound) {
return nil, status.Error(codes.NotFound, "экран не найден")
}
return nil, status.Error(codes.Internal, "не удалось отвязать экран")
@@ -133,8 +133,8 @@ func (s *server) SetScreenSound(ctx context.Context, req *proto.SetScreenSoundRe
if err != nil || id <= 0 {
return nil, status.Error(codes.InvalidArgument, "некорректный идентификатор экрана")
}
if err = s.screenRepo.SetSound(ctx, id, req.SoundEnabled); err != nil {
if errors.Is(err, screen_sessions_repo.ErrScreenNotFound) {
if err = s.screenService.SetSound(ctx, id, req.SoundEnabled); err != nil {
if errors.Is(err, screen_service.ErrScreenNotFound) {
return nil, status.Error(codes.NotFound, "экран не найден")
}
return nil, status.Error(codes.Internal, "не удалось назначить экран со звуком")
@@ -155,7 +155,7 @@ func hashScreenToken(token string) string {
return base64.RawURLEncoding.EncodeToString(sum[:])
}
func screenState(session *screen_sessions_repo.ScreenSession) *proto.ScreenState {
func screenState(session *screen_service.ScreenSession) *proto.ScreenState {
timerState := proto.ScreenTimerState(session.TimerState)
timerRemaining := session.TimerRemainingSeconds
if timerState == proto.ScreenTimerState_SCREEN_TIMER_STATE_RUNNING {
@@ -193,7 +193,7 @@ func screenState(session *screen_sessions_repo.ScreenSession) *proto.ScreenState
return state
}
func (s *server) enrichScreenState(ctx context.Context, session *screen_sessions_repo.ScreenSession, state *proto.ScreenState) {
func (s *server) enrichScreenState(ctx context.Context, session *screen_service.ScreenSession, state *proto.ScreenState) {
if session.GameID == nil {
return
}
@@ -229,7 +229,7 @@ func (s *server) SetScreenMode(ctx context.Context, req *proto.SetScreenModeReq)
if _, err := s.gameService.GetGame(ctx, int(req.GameID)); err != nil {
return nil, status.Error(codes.NotFound, "игра не найдена")
}
if err := s.screenRepo.SetMode(ctx, int(req.GameID), int32(req.Mode)); err != nil {
if err := s.screenService.SetMode(ctx, int(req.GameID), int32(req.Mode)); err != nil {
return nil, status.Error(codes.Internal, "не удалось изменить режим экранов")
}
return &proto.SetScreenModeRsp{}, nil
@@ -252,7 +252,7 @@ func (s *server) SetScreenTimer(ctx context.Context, req *proto.SetScreenTimerRe
if _, err := s.gameService.GetGame(ctx, int(req.GameID)); err != nil {
return nil, status.Error(codes.NotFound, "игра не найдена")
}
if err := s.screenRepo.SetTimer(ctx, int(req.GameID), req.DurationSeconds, label); err != nil {
if err := s.screenService.SetTimer(ctx, int(req.GameID), req.DurationSeconds, label); err != nil {
return nil, status.Error(codes.Internal, "не удалось настроить таймер экранов")
}
return &proto.SetScreenTimerRsp{}, nil
@@ -269,7 +269,7 @@ func (s *server) SendScreenCommand(ctx context.Context, req *proto.SendScreenCom
return nil, status.Error(codes.NotFound, "игра не найдена")
}
if isTimerCommand(req.Command) {
if err := s.screenRepo.SetTimerCommand(ctx, int(req.GameID), int32(req.Command)); err != nil {
if err := s.screenService.SetTimerCommand(ctx, int(req.GameID), int32(req.Command)); err != nil {
return nil, status.Error(codes.Internal, "не удалось выполнить команду таймера")
}
return &proto.SendScreenCommandRsp{}, nil
@@ -280,7 +280,7 @@ func (s *server) SendScreenCommand(ctx context.Context, req *proto.SendScreenCom
if req.Volume < 0 || req.Volume > 100 {
return nil, status.Error(codes.InvalidArgument, "некорректная громкость")
}
if err := s.screenRepo.SetCommand(ctx, int(req.GameID), int32(req.Command), req.PositionMs, req.Volume); err != nil {
if err := s.screenService.SetCommand(ctx, int(req.GameID), int32(req.Command), req.PositionMs, req.Volume); err != nil {
return nil, status.Error(codes.Internal, "не удалось сохранить позицию экранов")
}
return &proto.SendScreenCommandRsp{}, nil
@@ -298,8 +298,8 @@ func (s *server) GetScreenResults(ctx context.Context, req *proto.GetScreenResul
if err != nil || id <= 0 {
return nil, status.Error(codes.InvalidArgument, "некорректный идентификатор экрана")
}
session, err := s.screenRepo.Get(ctx, id, hashScreenToken(req.AccessToken))
if errors.Is(err, screen_sessions_repo.ErrScreenNotFound) {
session, err := s.screenService.Get(ctx, id, hashScreenToken(req.AccessToken))
if errors.Is(err, screen_service.ErrScreenNotFound) {
return nil, status.Error(codes.Unauthenticated, "недействительная сессия экрана")
}
if err != nil || session.GameID == nil {