diff --git a/internal/app/scenario_archive.go b/internal/app/scenario_archive.go index 0582bcf..fcba3ea 100644 --- a/internal/app/scenario_archive.go +++ b/internal/app/scenario_archive.go @@ -7,9 +7,7 @@ import ( "strings" "evening_detective_server/internal/modules/roles" - "evening_detective_server/internal/modules/scenario_archive" "evening_detective_server/internal/modules/string_tools" - "evening_detective_server/internal/repos/scenarios_repo" "evening_detective_server/internal/services/scenarios_service" proto "evening_detective_server/proto" @@ -37,7 +35,7 @@ func (s *server) DownloadScenarioArchive(ctx context.Context, req *proto.Downloa ) if err != nil { switch { - case errors.Is(err, scenarios_repo.ErrScenarioNotFound): + case errors.Is(err, scenarios_service.ErrScenarioNotFound): return nil, status.Errorf(codes.NotFound, "%v", err) case errors.Is(err, scenarios_service.ErrScenarioNotOwner): return nil, status.Errorf(codes.PermissionDenied, "%v", err) @@ -74,8 +72,8 @@ func (s *server) UploadScenarioArchive(ctx context.Context, req *httpbody.HttpBo if req == nil || len(req.Data) == 0 { return nil, status.Errorf(codes.InvalidArgument, "пустое тело запроса") } - if len(req.Data) > scenario_archive.MaxArchiveSize() { - return nil, status.Errorf(codes.InvalidArgument, "архив больше максимального размера (%d байт)", scenario_archive.MaxArchiveSize()) + if len(req.Data) > scenarios_service.MaxArchiveSize() { + return nil, status.Errorf(codes.InvalidArgument, "архив больше максимального размера (%d байт)", scenarios_service.MaxArchiveSize()) } id, err := s.scenarioService.UploadArchive(ctx, req.Data, claims.UserID) diff --git a/internal/services/scenarios_service/service.go b/internal/services/scenarios_service/service.go index 070f870..7421113 100644 --- a/internal/services/scenarios_service/service.go +++ b/internal/services/scenarios_service/service.go @@ -131,6 +131,14 @@ var ErrScenarioPublished = errors.New("Опубликованный сценар // ErrScenarioNotOwner — сценарий принадлежит другому пользователю. var ErrScenarioNotOwner = errors.New("Сценарий принадлежит другому пользователю") +// ErrScenarioNotFound — сценарий не найден или уже удалён. +var ErrScenarioNotFound = errors.New("Сценарий не найден") + +// MaxArchiveSize возвращает максимальный размер загружаемого архива. +func MaxArchiveSize() int { + return scenario_archive.MaxArchiveSize() +} + // getScenarioForChange проверяет права актора на изменение сценария: // не-админ должен быть автором сценария, сценарий не должен быть удалён. // Возвращает сценарий, чтобы вызывающий код не делал повторное чтение. @@ -409,6 +417,9 @@ func (s *ScenarioService) DownloadArchive( ) ([]byte, string, error) { scenario, err := s.getScenarioForChange(ctx, id, actorID, isAdmin) if err != nil { + if errors.Is(err, scenarios_repo.ErrScenarioNotFound) { + return nil, "", ErrScenarioNotFound + } return nil, "", err } data, err := s.scenarioArchive.Pack( diff --git a/internal/services/scenarios_service/service_test.go b/internal/services/scenarios_service/service_test.go index 503ec14..7509bdc 100644 --- a/internal/services/scenarios_service/service_test.go +++ b/internal/services/scenarios_service/service_test.go @@ -649,7 +649,7 @@ func TestDownloadArchiveNotFound(t *testing.T) { storage := newFakeStorage() svc := newTestService(repo, storage) - if _, _, err := svc.DownloadArchive(context.Background(), 404, 1, true); !errors.Is(err, scenarios_repo.ErrScenarioNotFound) { + if _, _, err := svc.DownloadArchive(context.Background(), 404, 1, true); !errors.Is(err, ErrScenarioNotFound) { t.Errorf("err = %v, want ErrScenarioNotFound", err) } }