This commit is contained in:
2026-10-02 23:24:48 +07:00
parent 6d306c43ec
commit 4d8d6caadd
3 changed files with 15 additions and 6 deletions
+3 -5
View File
@@ -7,9 +7,7 @@ import (
"strings" "strings"
"evening_detective_server/internal/modules/roles" "evening_detective_server/internal/modules/roles"
"evening_detective_server/internal/modules/scenario_archive"
"evening_detective_server/internal/modules/string_tools" "evening_detective_server/internal/modules/string_tools"
"evening_detective_server/internal/repos/scenarios_repo"
"evening_detective_server/internal/services/scenarios_service" "evening_detective_server/internal/services/scenarios_service"
proto "evening_detective_server/proto" proto "evening_detective_server/proto"
@@ -37,7 +35,7 @@ func (s *server) DownloadScenarioArchive(ctx context.Context, req *proto.Downloa
) )
if err != nil { if err != nil {
switch { switch {
case errors.Is(err, scenarios_repo.ErrScenarioNotFound): case errors.Is(err, scenarios_service.ErrScenarioNotFound):
return nil, status.Errorf(codes.NotFound, "%v", err) return nil, status.Errorf(codes.NotFound, "%v", err)
case errors.Is(err, scenarios_service.ErrScenarioNotOwner): case errors.Is(err, scenarios_service.ErrScenarioNotOwner):
return nil, status.Errorf(codes.PermissionDenied, "%v", err) 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 { if req == nil || len(req.Data) == 0 {
return nil, status.Errorf(codes.InvalidArgument, "пустое тело запроса") return nil, status.Errorf(codes.InvalidArgument, "пустое тело запроса")
} }
if len(req.Data) > scenario_archive.MaxArchiveSize() { if len(req.Data) > scenarios_service.MaxArchiveSize() {
return nil, status.Errorf(codes.InvalidArgument, "архив больше максимального размера (%d байт)", scenario_archive.MaxArchiveSize()) return nil, status.Errorf(codes.InvalidArgument, "архив больше максимального размера (%d байт)", scenarios_service.MaxArchiveSize())
} }
id, err := s.scenarioService.UploadArchive(ctx, req.Data, claims.UserID) id, err := s.scenarioService.UploadArchive(ctx, req.Data, claims.UserID)
@@ -131,6 +131,14 @@ var ErrScenarioPublished = errors.New("Опубликованный сценар
// ErrScenarioNotOwner — сценарий принадлежит другому пользователю. // ErrScenarioNotOwner — сценарий принадлежит другому пользователю.
var ErrScenarioNotOwner = errors.New("Сценарий принадлежит другому пользователю") var ErrScenarioNotOwner = errors.New("Сценарий принадлежит другому пользователю")
// ErrScenarioNotFound — сценарий не найден или уже удалён.
var ErrScenarioNotFound = errors.New("Сценарий не найден")
// MaxArchiveSize возвращает максимальный размер загружаемого архива.
func MaxArchiveSize() int {
return scenario_archive.MaxArchiveSize()
}
// getScenarioForChange проверяет права актора на изменение сценария: // getScenarioForChange проверяет права актора на изменение сценария:
// не-админ должен быть автором сценария, сценарий не должен быть удалён. // не-админ должен быть автором сценария, сценарий не должен быть удалён.
// Возвращает сценарий, чтобы вызывающий код не делал повторное чтение. // Возвращает сценарий, чтобы вызывающий код не делал повторное чтение.
@@ -409,6 +417,9 @@ func (s *ScenarioService) DownloadArchive(
) ([]byte, string, error) { ) ([]byte, string, error) {
scenario, err := s.getScenarioForChange(ctx, id, actorID, isAdmin) scenario, err := s.getScenarioForChange(ctx, id, actorID, isAdmin)
if err != nil { if err != nil {
if errors.Is(err, scenarios_repo.ErrScenarioNotFound) {
return nil, "", ErrScenarioNotFound
}
return nil, "", err return nil, "", err
} }
data, err := s.scenarioArchive.Pack( data, err := s.scenarioArchive.Pack(
@@ -649,7 +649,7 @@ func TestDownloadArchiveNotFound(t *testing.T) {
storage := newFakeStorage() storage := newFakeStorage()
svc := newTestService(repo, storage) 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) t.Errorf("err = %v, want ErrScenarioNotFound", err)
} }
} }