This commit is contained in:
2026-10-11 15:21:54 +07:00
parent 5da08f6916
commit 504b49f7cc
6 changed files with 37 additions and 6 deletions
@@ -3,6 +3,7 @@ package app
import (
"context"
"errors"
"evening_detective_server/internal/repos/game_returns_repo"
results "evening_detective_server/internal/services/game_results_package_service"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
@@ -17,6 +18,10 @@ func gameResultsErrorStatus(err error) error {
case errors.Is(err, results.ErrLimitExceeded):
return status.Error(codes.ResourceExhausted, "Пакет результатов превышает допустимый размер")
case errors.Is(err, results.ErrReturnConflict):
var conflict *game_returns_repo.ConflictError
if errors.As(err, &conflict) {
return status.Error(codes.Aborted, conflict.Error())
}
return status.Error(codes.Aborted, "Конфликт пакета результатов")
case errors.Is(err, results.ErrReturnRetry):
return status.Error(codes.Unavailable, "Повторите загрузку позже")
+12
View File
@@ -10,6 +10,7 @@ import (
"testing"
"evening_detective_server/internal/modules/processor_jwt"
"evening_detective_server/internal/repos/game_returns_repo"
results "evening_detective_server/internal/services/game_results_package_service"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
@@ -61,3 +62,14 @@ func TestResultsDownloadFailureDoesNotSendZIPOrLeakFile(t *testing.T) {
t.Fatal("temporary file leaked", err)
}
}
func TestResultsConflictReasonReachesInterface(t *testing.T) {
conflict := &game_returns_repo.ConflictError{Reason: "идентификатор команды занят другой игрой."}
err := gameResultsErrorStatus(errors.Join(conflict, errors.New("private SQL and file path")))
if status.Code(err) != codes.Aborted || status.Convert(err).Message() != conflict.Error() {
t.Fatal(err)
}
if !errors.Is(conflict, results.ErrReturnConflict) {
t.Fatal("conflict identity lost")
}
}