# albums Specification ## Purpose Управление фотоальбомами: создание, просмотр, редактирование, удаление и владение. ## Requirements ### Requirement: Создание альбома Зарегистрированный пользователь SHALL иметь возможность создать альбом и стать его владельцем. #### Scenario: Создание альбома - **WHEN** пользователь создаёт альбом с названием - **THEN** система создаёт альбом и назначает пользователя владельцем ### Requirement: Список альбомов пользователя Пользователь SHALL иметь возможность получить список альбомов, к которым у него есть доступ. #### Scenario: Список альбомов - **WHEN** пользователь запрашивает список альбомов - **THEN** система возвращает альбомы, где он владелец или участник ### Requirement: Получение альбома Участник SHALL иметь возможность получить данные альбома по id. #### Scenario: Просмотр альбома - **WHEN** участник запрашивает альбом по id - **THEN** система возвращает данные альбома ### Requirement: Редактирование альбома Владелец и админ SHALL иметь возможность редактировать название, описание и обложку альбома. #### Scenario: Редактирование альбома - **WHEN** админ изменяет описание альбома - **THEN** система сохраняет изменения ### Requirement: Удаление альбома Владелец SHALL иметь возможность удалить альбом; фото альбома SHALL помещаться в корзину без удаления объектов хранилища, а участники и share-ссылки SHALL удаляться вместе с альбомом. #### Scenario: Удаление альбома - **WHEN** владелец удаляет альбом - **THEN** фото альбома попадают в корзину без привязки к альбому и файлы сохраняются, участники и share-ссылки удаляются ### Requirement: Отображение обложки альбома Данные альбома SHALL включать URL миниатюры обложки, когда обложка задана, чтобы клиенты могли показать её в списке, рейле и карточке. #### Scenario: Обложка задана - **WHEN** клиент запрашивает список альбомов или альбом по id, и у альбома есть обложка - **THEN** ответ содержит URL миниатюры обложки #### Scenario: Обложка отсутствует - **WHEN** у альбома нет обложки или фото обложки удалено - **THEN** ответ не содержит URL обложки, и клиент показывает плейсхолдер ### Requirement: Выбор обложки Владелец и админ SHALL иметь возможность назначить обложкой любое фото альбома или сбросить обложку; после сброса обложка SHALL становиться не заданной (без возврата к значению по умолчанию). #### Scenario: Назначение обложки - **WHEN** владелец выбирает фото альбома как обложку - **THEN** система сохраняет выбор и отражает его в списке и карточках #### Scenario: Сброс обложки - **WHEN** админ сбрасывает обложку - **THEN** система снимает обложку, и альбом отображается без обложки, пока обложку не назначат снова #### Scenario: Нет прав на смену обложки - **WHEN** участник без права редактирования пытается сменить обложку - **THEN** система отклоняет запрос ### Requirement: Счётчики альбома Данные альбома SHALL включать количество фото и участников, чтобы панель и карточки могли показать их без отдельных запросов. #### Scenario: Счётчики в ответе - **WHEN** клиент запрашивает список альбомов или альбом по id - **THEN** ответ содержит число фото и число участников альбома