This commit is contained in:
2026-10-03 00:55:28 +07:00
parent bd1120d10f
commit fc2586f72a
6 changed files with 109 additions and 69 deletions
+21 -8
View File
@@ -91,7 +91,7 @@ func (s *ScenarioService) GetFullScenarioByID(
) (*Scenario, error) {
scenario, err := s.scenariosRepo.GetScenarioByID(ctx, id)
if err != nil {
return nil, err
return nil, mapScenarioError(err)
}
return mapScenario(scenario, s.domain)
}
@@ -102,7 +102,7 @@ func (s *ScenarioService) GetScenarioByID(
) (*Scenario, error) {
scenario, err := s.scenariosRepo.GetScenarioByID(ctx, id)
if err != nil {
return nil, err
return nil, mapScenarioError(err)
}
return MapScenarioLight(scenario, s.domain), nil
}
@@ -134,6 +134,12 @@ var ErrScenarioNotOwner = errors.New("Сценарий принадлежит д
// ErrScenarioNotFound — сценарий не найден или уже удалён.
var ErrScenarioNotFound = errors.New("Сценарий не найден")
// ErrInvalidArchive — архив не соответствует формату сценария.
var ErrInvalidArchive = errors.New("Некорректный архив сценария")
// ErrInvalidScenarioData — данные истории сценария не проходят валидацию.
var ErrInvalidScenarioData = errors.New("Некорректные данные сценария")
// MaxArchiveSize возвращает максимальный размер загружаемого архива.
func MaxArchiveSize() int {
return scenario_archive.MaxArchiveSize()
@@ -150,10 +156,10 @@ func (s *ScenarioService) getScenarioForChange(
) (*repos.Scenario, error) {
scenario, err := s.scenariosRepo.GetScenarioByID(ctx, id)
if err != nil {
return nil, err
return nil, mapScenarioError(err)
}
if scenario.IsDeleted {
return nil, scenarios_repo.ErrScenarioNotFound
return nil, ErrScenarioNotFound
}
if isAdmin {
return scenario, nil
@@ -164,6 +170,13 @@ func (s *ScenarioService) getScenarioForChange(
return scenario, nil
}
func mapScenarioError(err error) error {
if errors.Is(err, scenarios_repo.ErrScenarioNotFound) {
return ErrScenarioNotFound
}
return err
}
func (s *ScenarioService) UpdateScenarioStatusByID(
ctx context.Context,
id int,
@@ -455,7 +468,7 @@ func (s *ScenarioService) UploadArchive(
) (int, error) {
bundle, err := s.scenarioArchive.Unpack(data)
if err != nil {
return 0, err
return 0, fmt.Errorf("%w: %v", ErrInvalidArchive, err)
}
scenario := bundle.Scenario
@@ -482,7 +495,7 @@ func (s *ScenarioService) UploadArchive(
}
content, exists := bundle.Files[archiveRef]
if !exists {
return "", fmt.Errorf("изображение %q не найдено в архиве", archiveRef)
return "", fmt.Errorf("%w: изображение %q не найдено в архиве", ErrInvalidArchive, archiveRef)
}
name, err := file_storage.NewName()
if err != nil {
@@ -535,7 +548,7 @@ func (s *ScenarioService) UploadArchive(
}
storyJSON, err := normalizeStory(scenario.Story)
if err != nil {
return 0, err
return 0, fmt.Errorf("%w: %v", ErrInvalidArchive, err)
}
id, err := s.scenariosRepo.AddScenario(ctx, scenario.Name, authorID)
@@ -571,7 +584,7 @@ func (s *ScenarioService) updateStory(ctx context.Context, id int, story *storyt
}
storyString, err := normalizeStory(story)
if err != nil {
return err
return fmt.Errorf("%w: %v", ErrInvalidScenarioData, err)
}
return s.scenariosRepo.UpdateStoryByScenarioID(ctx, id, storyString)