chore(openspec): archive thumbnail-variants and sync main specs
This commit is contained in:
@@ -43,17 +43,26 @@
|
|||||||
- **THEN** фото альбома попадают в корзину без привязки к альбому и файлы сохраняются, участники и share-ссылки удаляются
|
- **THEN** фото альбома попадают в корзину без привязки к альбому и файлы сохраняются, участники и share-ссылки удаляются
|
||||||
|
|
||||||
### Requirement: Отображение обложки альбома
|
### Requirement: Отображение обложки альбома
|
||||||
Данные альбома SHALL включать URL миниатюры обложки, когда обложка задана, чтобы клиенты
|
|
||||||
могли показать её в списке, рейле и карточке.
|
Данные альбома SHALL включать URL обложки, когда обложка задана, чтобы клиенты могли
|
||||||
|
показать её в списке, рейле и карточке; URL SHALL указывать на вариант, достаточный для
|
||||||
|
крупного отображения, с откатом на миниатюру, пока крупный вариант не готов.
|
||||||
|
|
||||||
#### Scenario: Обложка задана
|
#### Scenario: Обложка задана
|
||||||
|
|
||||||
- **WHEN** клиент запрашивает список альбомов или альбом по id, и у альбома есть обложка
|
- **WHEN** клиент запрашивает список альбомов или альбом по id, и у альбома есть обложка
|
||||||
- **THEN** ответ содержит URL миниатюры обложки
|
- **THEN** ответ содержит URL обложки
|
||||||
|
|
||||||
#### Scenario: Обложка отсутствует
|
#### Scenario: Обложка отсутствует
|
||||||
|
|
||||||
- **WHEN** у альбома нет обложки или фото обложки удалено
|
- **WHEN** у альбома нет обложки или фото обложки удалено
|
||||||
- **THEN** ответ не содержит URL обложки, и клиент показывает плейсхолдер
|
- **THEN** ответ не содержит URL обложки, и клиент показывает плейсхолдер
|
||||||
|
|
||||||
|
#### Scenario: Крупный вариант ещё не готов
|
||||||
|
|
||||||
|
- **WHEN** у обложки готов только вариант-миниатюра
|
||||||
|
- **THEN** ответ содержит URL миниатюры обложки
|
||||||
|
|
||||||
### Requirement: Выбор обложки
|
### Requirement: Выбор обложки
|
||||||
Владелец и админ SHALL иметь возможность назначить обложкой любое фото альбома или сбросить
|
Владелец и админ SHALL иметь возможность назначить обложкой любое фото альбома или сбросить
|
||||||
обложку; после сброса обложка SHALL становиться не заданной (без возврата к значению по
|
обложку; после сброса обложка SHALL становиться не заданной (без возврата к значению по
|
||||||
|
|||||||
@@ -22,17 +22,20 @@
|
|||||||
- **THEN** ключи его объектов остаются неизменными
|
- **THEN** ключи его объектов остаются неизменными
|
||||||
|
|
||||||
### Requirement: Журнал объектов
|
### Requirement: Журнал объектов
|
||||||
|
|
||||||
Каждый физический объект SHALL иметь ровно одну запись в слое метаданных с ключом,
|
Каждый физический объект SHALL иметь ровно одну запись в слое метаданных с ключом,
|
||||||
MIME-типом, размером, габаритами и состоянием; фото SHALL ссылаться на объекты по
|
MIME-типом, размером, габаритами и состоянием; фото SHALL ссылаться на объекты по
|
||||||
ролям original, thumb и preview.
|
ролям original, thumb, medium и preview.
|
||||||
|
|
||||||
#### Scenario: Привязка ролей
|
#### Scenario: Привязка ролей
|
||||||
|
|
||||||
- **WHEN** фото загружено и обработано
|
- **WHEN** фото загружено и обработано
|
||||||
- **THEN** фото ссылается на объект-оригинал и, когда они готовы, на объекты thumb и preview
|
- **THEN** фото ссылается на объект-оригинал и, когда они готовы, на объекты thumb, medium и preview
|
||||||
|
|
||||||
#### Scenario: Оригинал без вариантов
|
#### Scenario: Оригинал без вариантов
|
||||||
|
|
||||||
- **WHEN** варианты ещё не сгенерированы
|
- **WHEN** варианты ещё не сгенерированы
|
||||||
- **THEN** фото доступно с оригиналом, а thumb и preview отсутствуют
|
- **THEN** фото доступно с оригиналом, а thumb, medium и preview отсутствуют
|
||||||
|
|
||||||
### Requirement: Совместные объекты
|
### Requirement: Совместные объекты
|
||||||
Несколько фото SHALL иметь возможность ссылаться на один и тот же физический
|
Несколько фото SHALL иметь возможность ссылаться на один и тот же физический
|
||||||
|
|||||||
@@ -18,11 +18,20 @@
|
|||||||
- **THEN** система отклоняет запрос
|
- **THEN** система отклоняет запрос
|
||||||
|
|
||||||
### Requirement: Варианты изображений
|
### Requirement: Варианты изображений
|
||||||
Система SHALL генерировать три варианта: thumb (200px), preview (1200px) и оригинал, с WebP для превью, и извлекать EXIF (дата, координаты, размеры).
|
|
||||||
|
Система SHALL генерировать четыре варианта: thumb (200×200, квадратный кроп), medium
|
||||||
|
(800×800, квадратный кроп), preview (1200×1200, вписанный) и оригинал, в WebP, и извлекать
|
||||||
|
EXIF (дата, координаты, размеры).
|
||||||
|
|
||||||
#### Scenario: Генерация вариантов
|
#### Scenario: Генерация вариантов
|
||||||
|
|
||||||
- **WHEN** фото загружено
|
- **WHEN** фото загружено
|
||||||
- **THEN** система асинхронно генерирует thumb и preview и заполняет EXIF-поля
|
- **THEN** система асинхронно генерирует thumb, medium и preview и заполняет EXIF-поля
|
||||||
|
|
||||||
|
#### Scenario: Форма вариантов сетки
|
||||||
|
|
||||||
|
- **WHEN** генерируются thumb и medium
|
||||||
|
- **THEN** они обрезаны до квадрата, а preview вписан с сохранением пропорций
|
||||||
|
|
||||||
### Requirement: Листинг фото с пагинацией
|
### Requirement: Листинг фото с пагинацией
|
||||||
Система SHALL возвращать фото альбома с cursor-пагинацией.
|
Система SHALL возвращать фото альбома с cursor-пагинацией.
|
||||||
|
|||||||
@@ -570,3 +570,23 @@ Ctrl/Cmd-клик — добавить или убрать, Shift-клик —
|
|||||||
#### Scenario: Публичная share-страница
|
#### Scenario: Публичная share-страница
|
||||||
- **WHEN** фото открыто по публичной share-ссылке
|
- **WHEN** фото открыто по публичной share-ссылке
|
||||||
- **THEN** панорамный режим не активируется, показывается плоское изображение
|
- **THEN** панорамный режим не активируется, показывается плоское изображение
|
||||||
|
|
||||||
|
### Requirement: Резкость миниатюр
|
||||||
|
|
||||||
|
Сетка фото и обзор альбомов SHALL подбирать вариант изображения под фактический размер
|
||||||
|
плитки, чтобы миниатюры не отображались крупнее доступного разрешения.
|
||||||
|
|
||||||
|
#### Scenario: Крупные плитки
|
||||||
|
|
||||||
|
- **WHEN** пользователь увеличивает миниатюры до крупных плиток
|
||||||
|
- **THEN** показывается вариант изображения, достаточный для их размера, без расплывания
|
||||||
|
|
||||||
|
#### Scenario: Мелкие плитки
|
||||||
|
|
||||||
|
- **WHEN** миниатюры показаны мелкими плитками
|
||||||
|
- **THEN** показывается компактный вариант, чтобы не загружать крупное изображение
|
||||||
|
|
||||||
|
#### Scenario: Вариант ещё не готов
|
||||||
|
|
||||||
|
- **WHEN** для фото доступен только оригинал или только миниатюра
|
||||||
|
- **THEN** показывается доступный вариант, и сетка отображается корректно
|
||||||
|
|||||||
Reference in New Issue
Block a user