- backend: switch EXIF parser to dsoprea/go-exif/v3 (all recognised tags, numeric normalization); store in photos.exif jsonb (migration 000003); add storage.Get and cmd/backfill-exif to backfill existing photos from S3 originals - frontend: info panel renders all EXIF attributes with RU labels, enum translation and units (1/N, f/N, mm, EV); service tags hidden - viewer: remove make-cover action (cover managed from panel only), icon-only download - openspec: sync lightroom-workspace-ui artifacts (EXIF, cover-from-panel) and add plan for configurable info attributes/labels stored in user profile
3.3 KiB
3.3 KiB
Spec Delta
ADDED Requirements
Requirement: Обложка по умолчанию
При обработке загруженного фото система SHALL назначать его обложкой альбома только если обложка ещё не задана.
Scenario: Первое фото
- WHEN фото обработано, и у альбома нет обложки
- THEN система назначает это фото обложкой
Scenario: Обложка уже задана
- WHEN фото обработано, а обложка уже задана
- THEN система не меняет обложку
Requirement: Переименование фото
Автор фото, владелец и админ альбома SHALL иметь возможность изменить имя файла фото; остальные SHALL получать отказ, а пустое имя SHALL отклоняться.
Scenario: Переименование автором
- WHEN автор меняет имя файла своего фото на непустое
- THEN система сохраняет новое имя и транслирует изменение подписчикам альбома
Scenario: Пустое имя
- WHEN пользователь подтверждает пустое имя файла
- THEN система отклоняет запрос
Scenario: Нет прав
- WHEN участник без прав переименовывает чужое фото
- THEN система отклоняет запрос
Requirement: Ограничение размера загрузки
Система SHALL ограничивать размер загружаемых файлов и SHALL отвечать понятной ошибкой при превышении лимита, а не ошибкой разбора формы.
Scenario: Превышение лимита
- WHEN загружаемый файл превышает максимальный размер
- THEN система отклоняет загрузку с явной ошибкой о превышении размера
Scenario: Файл в пределах лимита
- WHEN файл не превышает лимит
- THEN система принимает multipart-загрузку и обрабатывает фото
Requirement: Метаданные фото (EXIF)
При загрузке фото система SHALL извлекать распознаваемые EXIF-атрибуты и SHALL возвращать их вместе с данными фото; при отсутствии метаданных SHALL возвращать пустой набор.
Scenario: Фото с метаданными
- WHEN загружается фото с EXIF
- THEN данные фото содержат извлечённые атрибуты (камера, экспозиция, ISO, дата съёмки и др.)
Scenario: Фото без метаданных
- WHEN загружается фото без читаемых EXIF
- THEN данные фото не содержат атрибутов, а загрузка выполняется успешно