generated from VLADIMIR/template
fix
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"evening_detective_server/internal/services/answer_service"
|
||||
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
func answerErrorStatus(err error, internalMessage string) error {
|
||||
switch {
|
||||
case errors.Is(err, answer_service.ErrTeamNotFound), errors.Is(err, answer_service.ErrGameNotFound):
|
||||
return status.Error(codes.NotFound, err.Error())
|
||||
case errors.Is(err, answer_service.ErrQuestionNotFound), errors.Is(err, answer_service.ErrOfflineAnswers):
|
||||
return status.Error(codes.InvalidArgument, err.Error())
|
||||
case errors.Is(err, answer_service.ErrGameFinished), errors.Is(err, answer_service.ErrGameNotStarted), errors.Is(err, answer_service.ErrGameNotFinished):
|
||||
return status.Error(codes.FailedPrecondition, err.Error())
|
||||
default:
|
||||
return status.Error(codes.Internal, internalMessage)
|
||||
}
|
||||
}
|
||||
@@ -17,9 +17,7 @@ func (s *server) GetTeamAnswers(ctx context.Context, req *proto.GetTeamAnswersRe
|
||||
req.Password,
|
||||
)
|
||||
if err != nil {
|
||||
return &proto.GetTeamAnswersRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, answerErrorStatus(err, "не удалось получить ответы команды")
|
||||
}
|
||||
|
||||
return &proto.GetTeamAnswersRsp{
|
||||
@@ -35,9 +33,7 @@ func (s *server) SubmitTeamAnswers(ctx context.Context, req *proto.SubmitTeamAns
|
||||
convertAnswers(req.Answers),
|
||||
)
|
||||
if err != nil {
|
||||
return &proto.SubmitTeamAnswersRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, answerErrorStatus(err, "не удалось сохранить ответы команды")
|
||||
}
|
||||
|
||||
return &proto.SubmitTeamAnswersRsp{}, nil
|
||||
@@ -65,9 +61,7 @@ func (s *server) SetTeamAnswerScore(ctx context.Context, req *proto.SetTeamAnswe
|
||||
score,
|
||||
)
|
||||
if err != nil {
|
||||
return &proto.SetTeamAnswerScoreRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, answerErrorStatus(err, "не удалось сохранить оценку ответа")
|
||||
}
|
||||
|
||||
return &proto.SetTeamAnswerScoreRsp{}, nil
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"evening_detective_server/internal/services/answer_service"
|
||||
"evening_detective_server/internal/services/game_service"
|
||||
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
func TestGameErrorStatus(t *testing.T) {
|
||||
for _, tc := range []struct {
|
||||
name, message string
|
||||
err error
|
||||
code codes.Code
|
||||
}{
|
||||
{"not found", "Игра не найдена", game_service.ErrGameNotFound, codes.NotFound},
|
||||
{"invalid format", "Формат игры должен быть online или offline", game_service.ErrInvalidGameFormat, codes.InvalidArgument},
|
||||
{"internal", "не удалось получить игру", errors.New("private database detail"), codes.Internal},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
err := gameErrorStatus(tc.err, "не удалось получить игру")
|
||||
if status.Code(err) != tc.code || status.Convert(err).Message() != tc.message {
|
||||
t.Fatalf("status=%v, want %v %q", err, tc.code, tc.message)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAnswerErrorStatus(t *testing.T) {
|
||||
for _, tc := range []struct {
|
||||
name, message string
|
||||
err error
|
||||
code codes.Code
|
||||
}{
|
||||
{"team not found", "Команда не найдена", answer_service.ErrTeamNotFound, codes.NotFound},
|
||||
{"question not found", "Вопрос не найден", answer_service.ErrQuestionNotFound, codes.InvalidArgument},
|
||||
{"game not started", "Игра не начата, отвечать на вопросы нельзя", answer_service.ErrGameNotStarted, codes.FailedPrecondition},
|
||||
{"internal", "не удалось получить ответы игры", errors.New("private database detail"), codes.Internal},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
err := answerErrorStatus(tc.err, "не удалось получить ответы игры")
|
||||
if status.Code(err) != tc.code || status.Convert(err).Message() != tc.message {
|
||||
t.Fatalf("status=%v, want %v %q", err, tc.code, tc.message)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
package app
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"evening_detective_server/internal/services/game_service"
|
||||
"evening_detective_server/internal/services/scenarios_service"
|
||||
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
func gameErrorStatus(err error, internalMessage string) error {
|
||||
switch {
|
||||
case errors.Is(err, game_service.ErrGameNotFound), errors.Is(err, scenarios_service.ErrScenarioNotFound):
|
||||
return status.Error(codes.NotFound, err.Error())
|
||||
case errors.Is(err, game_service.ErrInvalidGameFormat):
|
||||
return status.Error(codes.InvalidArgument, err.Error())
|
||||
default:
|
||||
return status.Error(codes.Internal, internalMessage)
|
||||
}
|
||||
}
|
||||
+12
-36
@@ -40,9 +40,7 @@ func (s *server) AddGame(ctx context.Context, req *proto.AddGameReq) (*proto.Add
|
||||
req.Format,
|
||||
)
|
||||
if err != nil {
|
||||
return &proto.AddGameRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, gameErrorStatus(err, "не удалось создать игру")
|
||||
}
|
||||
|
||||
return &proto.AddGameRsp{
|
||||
@@ -64,9 +62,7 @@ func (s *server) DeleteGame(ctx context.Context, req *proto.DeleteGameReq) (*pro
|
||||
int(req.ID),
|
||||
)
|
||||
if err != nil {
|
||||
return &proto.DeleteGameRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, gameErrorStatus(err, "не удалось удалить игру")
|
||||
}
|
||||
|
||||
return &proto.DeleteGameRsp{}, nil
|
||||
@@ -83,9 +79,7 @@ func (s *server) GetGame(ctx context.Context, req *proto.GetGameReq) (*proto.Get
|
||||
|
||||
game, err := s.gameService.GetFullGame(ctx, int(req.ID))
|
||||
if err != nil {
|
||||
return &proto.GetGameRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, gameErrorStatus(err, "не удалось получить игру")
|
||||
}
|
||||
|
||||
return &proto.GetGameRsp{
|
||||
@@ -104,9 +98,7 @@ func (s *server) GetGameAnswers(ctx context.Context, req *proto.GetGameAnswersRe
|
||||
|
||||
gameAnswers, err := s.answerService.GetGameAnswers(ctx, int(req.GameID))
|
||||
if err != nil {
|
||||
return &proto.GetGameAnswersRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, answerErrorStatus(err, "не удалось получить ответы игры")
|
||||
}
|
||||
|
||||
return &proto.GetGameAnswersRsp{
|
||||
@@ -126,9 +118,7 @@ func (s *server) GetGameResults(ctx context.Context, req *proto.GetGameResultsRe
|
||||
|
||||
results, err := s.answerService.GetGameResults(ctx, int(req.GameID))
|
||||
if err != nil {
|
||||
return &proto.GetGameResultsRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, answerErrorStatus(err, "не удалось получить результаты игры")
|
||||
}
|
||||
|
||||
return &proto.GetGameResultsRsp{
|
||||
@@ -148,9 +138,7 @@ func (s *server) GetGames(ctx context.Context, req *proto.GetGamesReq) (*proto.G
|
||||
|
||||
games, err := s.gameService.GetGames(ctx)
|
||||
if err != nil {
|
||||
return &proto.GetGamesRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, gameErrorStatus(err, "не удалось получить игры")
|
||||
}
|
||||
|
||||
return &proto.GetGamesRsp{
|
||||
@@ -182,9 +170,7 @@ func (s *server) UpdateGame(ctx context.Context, req *proto.UpdateGameReq) (*pro
|
||||
req.Format,
|
||||
)
|
||||
if err != nil {
|
||||
return &proto.UpdateGameRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, gameErrorStatus(err, "не удалось изменить игру")
|
||||
}
|
||||
|
||||
return &proto.UpdateGameRsp{}, nil
|
||||
@@ -201,9 +187,7 @@ func (s *server) StartGame(ctx context.Context, req *proto.StartGameReq) (*proto
|
||||
|
||||
err := s.gameService.StartGame(ctx, int(req.ID))
|
||||
if err != nil {
|
||||
return &proto.StartGameRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, gameErrorStatus(err, "не удалось запустить игру")
|
||||
}
|
||||
|
||||
return &proto.StartGameRsp{}, nil
|
||||
@@ -220,9 +204,7 @@ func (s *server) PauseGame(ctx context.Context, req *proto.PauseGameReq) (*proto
|
||||
|
||||
err := s.gameService.PauseGame(ctx, int(req.ID))
|
||||
if err != nil {
|
||||
return &proto.PauseGameRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, gameErrorStatus(err, "не удалось приостановить игру")
|
||||
}
|
||||
|
||||
return &proto.PauseGameRsp{}, nil
|
||||
@@ -239,9 +221,7 @@ func (s *server) PlayGame(ctx context.Context, req *proto.PlayGameReq) (*proto.P
|
||||
|
||||
err := s.gameService.PlayGame(ctx, int(req.ID))
|
||||
if err != nil {
|
||||
return &proto.PlayGameRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, gameErrorStatus(err, "не удалось продолжить игру")
|
||||
}
|
||||
|
||||
return &proto.PlayGameRsp{}, nil
|
||||
@@ -258,9 +238,7 @@ func (s *server) FinishGame(ctx context.Context, req *proto.FinishGameReq) (*pro
|
||||
|
||||
err := s.gameService.FinishGame(ctx, int(req.ID))
|
||||
if err != nil {
|
||||
return &proto.FinishGameRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, gameErrorStatus(err, "не удалось завершить игру")
|
||||
}
|
||||
|
||||
return &proto.FinishGameRsp{}, nil
|
||||
@@ -277,9 +255,7 @@ func (s *server) ResetGame(ctx context.Context, req *proto.ResetGameReq) (*proto
|
||||
|
||||
err := s.gameService.ResetGame(ctx, int(req.ID))
|
||||
if err != nil {
|
||||
return &proto.ResetGameRsp{
|
||||
Error: err.Error(),
|
||||
}, nil
|
||||
return nil, gameErrorStatus(err, "не удалось сбросить игру")
|
||||
}
|
||||
|
||||
return &proto.ResetGameRsp{}, nil
|
||||
|
||||
Reference in New Issue
Block a user