chore(openspec): archive thumbnail-variants and sync main specs

This commit is contained in:
iu
2026-10-11 19:57:12 +03:00
parent f1b3b01bdf
commit d059d042f0
12 changed files with 49 additions and 8 deletions
+12 -3
View File
@@ -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 становиться не заданной (без возврата к значению по
+6 -3
View File
@@ -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 иметь возможность ссылаться на один и тот же физический
+11 -2
View File
@@ -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-пагинацией.
+20
View File
@@ -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** показывается доступный вариант, и сетка отображается корректно