Files
iu 6e68242ec2 chore(openspec): архивировать album-live-sync и синхронизировать основные спеки
- realtime: личный поток несёт события жизненного цикла альбома и изменения
  счётчика фото; добавлены требования о жизненном цикле, получателях, форме
  payload'а, догоне и потере доступа
- albums: photos_count считает только фото вне корзины
2026-10-15 23:25:07 +03:00

6.2 KiB

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 обложки, когда обложка задана, чтобы клиенты могли показать её в списке, рейле и карточке; URL SHALL указывать на вариант, достаточный для крупного отображения, с откатом на миниатюру, пока крупный вариант не готов.

Scenario: Обложка задана

  • WHEN клиент запрашивает список альбомов или альбом по id, и у альбома есть обложка
  • THEN ответ содержит URL обложки

Scenario: Обложка отсутствует

  • WHEN у альбома нет обложки или фото обложки удалено
  • THEN ответ не содержит URL обложки, и клиент показывает плейсхолдер

Scenario: Крупный вариант ещё не готов

  • WHEN у обложки готов только вариант-миниатюра
  • THEN ответ содержит URL миниатюры обложки

Requirement: Выбор обложки

Владелец и админ SHALL иметь возможность назначить обложкой любое фото альбома или сбросить обложку; после сброса обложка SHALL становиться не заданной (без возврата к значению по умолчанию).

Scenario: Назначение обложки

  • WHEN владелец выбирает фото альбома как обложку
  • THEN система сохраняет выбор и отражает его в списке и карточках

Scenario: Сброс обложки

  • WHEN админ сбрасывает обложку
  • THEN система снимает обложку, и альбом отображается без обложки, пока обложку не назначат снова

Scenario: Нет прав на смену обложки

  • WHEN участник без права редактирования пытается сменить обложку
  • THEN система отклоняет запрос

Requirement: Счётчики альбома

Данные альбома SHALL включать количество фото и участников, чтобы панель и карточки могли показать их без отдельных запросов. Количество фото SHALL учитывать только фото, доступные в альбоме (не помещённые в корзину), и совпадать с числом фото, отображаемых в сетке альбома.

Scenario: Счётчики в ответе

  • WHEN клиент запрашивает список альбомов или альбом по id
  • THEN ответ содержит число фото и число участников альбома

Scenario: Фото в корзине не учитывается

  • WHEN фото альбома помещается в корзину
  • THEN photos_count этого альбома уменьшается на единицу

Scenario: Фото восстановлено из корзины

  • WHEN фото восстанавливается из корзины в альбом
  • THEN photos_count этого альбома увеличивается на единицу