chore(openspec): sync lightroom-workspace-ui with implemented changes
Reflect post-planning work in proposal, design, specs (albums/photos/ ui-workspace) and tasks: photo rename, viewer delete/zoom/fullscreen, resizable and collapsible panels with EXIF, upload size limit, album counts, themes/scrollbars, back navigation.
This commit is contained in:
@@ -27,9 +27,18 @@
|
||||
- **Плотность сетки.** Слайдер размера миниатюр в тулбаре (состояние в localStorage).
|
||||
Мультивыбор и массовые действия — вне объёма.
|
||||
- **Загрузка.** Крупный dropzone заменяется кнопкой в тулбаре, полноэкранным
|
||||
drag-overlay и dropzone-намёком только в пустом альбоме.
|
||||
- **Тёмная тема.** Существующие 4 темы сохраняются; `dark` переодевается в графит
|
||||
Lightroom и становится дефолтом; добавляются токены `--chrome` и `--canvas`.
|
||||
drag-overlay и dropzone-намёком только в пустом альбоме. Лимит — 100 МБ с понятной
|
||||
ошибкой при превышении.
|
||||
- **Переименование фото.** `PATCH /photos/:id` меняет `original_filename`; инлайн-редактор
|
||||
в правой панели, доступный автору фото и owner/admin.
|
||||
- **Просмотр.** Полноэкранный режим (кнопка и хоткей `f`), зум колесом мыши, `Space` — 100%
|
||||
с панорамированием; удаление текущего фото с модальным подтверждением; возврат к обзору.
|
||||
- **Разделы и панели.** Правая панель — сворачиваемые разделы (состояние сохраняется), с
|
||||
разделом «Информация» (EXIF/метаданные); левая и правая панели ресайзятся перетаскиванием.
|
||||
- **Счётчики.** В ответе альбома — число фото и участников.
|
||||
- **Темы и хром.** Существующие 4 темы сохраняются; `dark` — графит Lightroom и дефолт,
|
||||
`neutral` — тёплый графит; переключатель упорядочен тёмная → нейтральная → светлая →
|
||||
системная; добавляются токены `--chrome`/`--canvas`; скроллбары стилизованы в тон темы.
|
||||
- **Адаптив.** На узких экранах рейл становится off-canvas drawer, правая панель —
|
||||
bottom-sheet, filmstrip — горизонтальным скроллом.
|
||||
|
||||
@@ -42,22 +51,25 @@
|
||||
|
||||
### Modified Capabilities
|
||||
|
||||
- `albums`: отображение обложки в списке/карточках и явный выбор обложки; поведение
|
||||
обложки при отсутствии выбора.
|
||||
- `photos`: автоустановка обложки первым загруженным фото выполняется только если обложка
|
||||
ещё не задана.
|
||||
- `albums`: отображение обложки, счётчики фото/участников и явный выбор обложки.
|
||||
- `photos`: автообложка только при отсутствии выбора; переименование фото; лимит размера
|
||||
загрузки.
|
||||
|
||||
## Impact
|
||||
|
||||
- **Backend:** миграция FK `albums.cover_photo_id -> photos(id) ON DELETE SET NULL`;
|
||||
`internal/albums/store.go` (LEFT JOIN `photos` → `cover_thumb_key` в `ListForUser` и
|
||||
`GetByID`); `internal/albums/service.go` (presign → `CoverThumbURL`, обогащение
|
||||
списка); `internal/models` (`Album.CoverThumbURL`); `internal/photos/service.go`
|
||||
(`SetCover` только при `cover_photo_id IS NULL`).
|
||||
- **Frontend:** реструктуризация `+layout.svelte` в группы `(app)`/`(public)`; новые
|
||||
компоненты шелла, рейла, панели, модалки создания, пикера обложки, filmstrip и
|
||||
просмотра; новый маршрут `albums/[id]/photos/[photoId]`; новые значения токенов темы;
|
||||
`types.ts` (+`cover_thumb_url`); новые иконки в реестре.
|
||||
`internal/albums/store.go` (LEFT JOIN `photos` → `cover_thumb_key` и счётчики
|
||||
`photos_count`/`members_count` в `ListForUser`/`GetByID`); `internal/albums/service.go`
|
||||
(presign → `CoverThumbURL`, обогащение списка); `internal/models` (`Album.CoverThumbURL`,
|
||||
`PhotosCount`, `MembersCount`); `internal/photos` (автообложка только при
|
||||
`cover_photo_id IS NULL`; `PATCH /photos/:id` для переименования; лимит загрузки 100 МБ с
|
||||
`413 file_too_large`; событие `photo.updated`).
|
||||
- **Frontend:** реструктуризация `+layout.svelte` в группы `(app)`/`(public)`, `AppShell`
|
||||
с ресайзом панелей и кнопкой полного экрана; компоненты рейла, контекстной панели со
|
||||
сворачиваемыми разделами и EXIF, модалки создания/пикера обложки/подтверждения,
|
||||
`Viewer` с полноэкранным режимом и зумом, общий стор альбомов, контрол плотности; новый
|
||||
маршрут `albums/[id]/photos/[photoId]`; новые значения токенов темы и стили скроллбаров;
|
||||
`types.ts` (+`cover_thumb_url`, счётчики, `photos_count`); новые иконки в реестре.
|
||||
- **Спеки:** `ui-workspace` (новая), `albums`, `photos` (дельты). `ui-iconography` не
|
||||
затрагивается — иконки по-прежнему наследуют цвет темы.
|
||||
- **Совместимость:** API-контракты сохраняются; добавляется поле ответа и один FK. Ломающих
|
||||
|
||||
Reference in New Issue
Block a user