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"
"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)
@@ -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(
@@ -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)
}
}