chore(openspec): archive completed changes and sync main specs
- archive local-fs-storage-backend, sqlite-metadata-backend, storage-orphan-reconciliation, metadata-managed-jwt-secret, default-local-backends - sync specs: storage-backends, metadata-backends, storage-reconciliation, app-secrets; update photos/share-links - defaults reflected in specs: SQLite and local FS
This commit is contained in:
@@ -32,18 +32,19 @@
|
||||
- **THEN** система возвращает не более лимита фото и курсор следующей страницы
|
||||
|
||||
### Requirement: Получение фото по требованию
|
||||
Клиент SHALL иметь возможность получить актуальные данные фото с presigned URL.
|
||||
Клиент SHALL иметь возможность получить актуальные данные фото с подписанным URL,
|
||||
обслуживаемым бэкендом, независимо от бэкенда хранения.
|
||||
|
||||
#### Scenario: Выдача свежего URL
|
||||
- **WHEN** клиент запрашивает фото по id
|
||||
- **THEN** система возвращает свежий presigned URL (срок до 1 часа) для просмотра
|
||||
- **THEN** система возвращает свежий подписанный URL бэкенда (срок до 1 часа) для просмотра
|
||||
|
||||
### Requirement: Скачивание одиночного фото
|
||||
Любой участник, включая viewer, SHALL иметь возможность скачать одиночное фото.
|
||||
|
||||
#### Scenario: Скачивание фото
|
||||
- **WHEN** участник запрашивает скачивание фото
|
||||
- **THEN** система возвращает presigned URL оригинала
|
||||
- **THEN** система возвращает подписанный URL оригинала, обслуживаемый бэкендом
|
||||
|
||||
### Requirement: Удаление фото
|
||||
Автор SHALL иметь возможность удалить своё фото; владелец и админ SHALL иметь возможность удалить любое фото. Удаление SHALL помещать фото в корзину и SHALL не удалять объекты хранилища.
|
||||
@@ -68,7 +69,6 @@
|
||||
- **WHEN** фото обработано, а обложка уже задана
|
||||
- **THEN** система не меняет обложку
|
||||
|
||||
|
||||
### Requirement: Переименование фото
|
||||
Автор фото, владелец и админ альбома SHALL иметь возможность изменить имя файла фото;
|
||||
остальные SHALL получать отказ, а пустое имя SHALL отклоняться.
|
||||
@@ -85,7 +85,6 @@
|
||||
- **WHEN** участник без прав переименовывает чужое фото
|
||||
- **THEN** система отклоняет запрос
|
||||
|
||||
|
||||
### Requirement: Ограничение размера загрузки
|
||||
Система SHALL ограничивать размер загружаемых файлов и SHALL отвечать понятной ошибкой при
|
||||
превышении лимита, а не ошибкой разбора формы.
|
||||
@@ -98,7 +97,6 @@
|
||||
- **WHEN** файл не превышает лимит
|
||||
- **THEN** система принимает multipart-загрузку и обрабатывает фото
|
||||
|
||||
|
||||
### Requirement: Метаданные фото (EXIF)
|
||||
При загрузке фото система SHALL извлекать распознаваемые EXIF-атрибуты и SHALL возвращать их
|
||||
вместе с данными фото; при отсутствии метаданных SHALL возвращать пустой набор.
|
||||
@@ -111,7 +109,6 @@
|
||||
- **WHEN** загружается фото без читаемых EXIF
|
||||
- **THEN** данные фото не содержат атрибутов, а загрузка выполняется успешно
|
||||
|
||||
|
||||
### Requirement: Перенос и копирование фото между альбомами
|
||||
Пользователь с правом удаления в исходном альбоме и правом загрузки в целевом SHALL иметь
|
||||
возможность перенести или скопировать фото в другой альбом. Операции SHALL изменять только
|
||||
@@ -119,12 +116,11 @@
|
||||
|
||||
#### Scenario: Перенос
|
||||
- **WHEN** пользователь переносит фото в другой альбом
|
||||
- **THEN** фото исчезает из исходного альбома и появляется в целевом, объекты S3 не меняются
|
||||
- **THEN** фото исчезает из исходного альбома и появляется в целевом, объекты хранилища не меняются
|
||||
|
||||
#### Scenario: Копирование
|
||||
- **WHEN** пользователь копирует фото в другой альбом
|
||||
- **THEN** в целевом альбоме появляется новая запись, ссылающаяся на те же объекты S3
|
||||
|
||||
- **THEN** в целевом альбоме появляется новая запись, ссылающаяся на те же объекты хранилища
|
||||
|
||||
### Requirement: Корзина фото
|
||||
Удаление фото SHALL помещать его в корзину (мягкое удаление). Восстановление SHALL возвращать
|
||||
@@ -147,7 +143,6 @@
|
||||
- **WHEN** на объект хранилища ссылается копия в другом альбоме
|
||||
- **THEN** запись удаляется, а объект хранилища сохраняется
|
||||
|
||||
|
||||
### Requirement: Удаление альбома и восстановление фото без альбома
|
||||
Удаление альбома SHALL помещать его фото в корзину, не удаляя объекты хранилища. Если при
|
||||
восстановлении фото его альбом отсутствует, система SHALL предложить выбрать существующий
|
||||
@@ -161,7 +156,6 @@
|
||||
- **WHEN** пользователь восстанавливает фото, у которого нет альбома
|
||||
- **THEN** система предлагает выбрать альбом или создать новый и восстанавливает фото в него
|
||||
|
||||
|
||||
### Requirement: Метки фото
|
||||
Пользователь SHALL присваивать фото свои метки (область — пользователь): создавать новые и
|
||||
выбирать из списка с поиском; метки SHALL отдаваться вместе с фото и сниматься.
|
||||
|
||||
Reference in New Issue
Block a user