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.
6.9 KiB
6.9 KiB
Proposal
Why
Сейчас интерфейс — это центрированный «маркетинговый» лейаут: список альбомов с
инлайн-формой создания, серая заглушка вместо обложек, отдельные страницы «Участники» и
«Настройки», лайтбокс-оверлей. Обложки в бэкенде уже есть (albums.cover_photo_id,
PATCH /albums/:id), но до UI не доходят. Пользователь хочет полноценный «рабочий стол»
в духе Adobe Lightroom: постоянный рейл альбомов, контекстная панель, плотная сетка,
режим просмотра как часть рабочего стола, обложки с явным выбором и единый тёмный
графитовый хром.
What Changes
- Рабочий стол (шелл). Группа
(app)с постоянным левым рейлом альбомов, топбаром и контекстной правой панелью. Публичные маршруты (/login,/invites/[token],/share/[token]) остаются вне шелла, но в тех же токенах. - Создание альбома. Инлайн-форма заменяется иконочной кнопкой с хинтом, открывающей модалку ввода названия.
- Обложки.
Albumполучаетcover_thumb_url; карточки и рейл показывают реальную миниатюру. Выбор обложки: пикер в правой панели и действие «сделать обложкой» в просмотре. Автообложка пишется только когда обложка ещё не задана; FKalbums.cover_photo_id -> photos(id) ON DELETE SET NULLчинит висячие ссылки. - Просмотр как маршрут.
Lightbox-оверлей заменяется маршрутом/albums/:id/photos/:photoIdвнутри шелла: крупное фото, filmstrip снизу, панель метаданных/комментариев.share/[token]переиспользует тот же компонент. - Плотность сетки. Слайдер размера миниатюр в тулбаре (состояние в localStorage). Мультивыбор и массовые действия — вне объёма.
- Загрузка. Крупный dropzone заменяется кнопкой в тулбаре, полноэкранным 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 — горизонтальным скроллом.
Capabilities
New Capabilities
ui-workspace: рабочий стол приложения — шелл, рейл альбомов, контекстная панель, режим просмотра как маршрут, адаптивное поведение и тёмный хром.
Modified Capabilities
albums: отображение обложки, счётчики фото/участников и явный выбор обложки.photos: автообложка только при отсутствии выбора; переименование фото; лимит размера загрузки.
Impact
- Backend: миграция FK
albums.cover_photo_id -> photos(id) ON DELETE SET NULL;internal/albums/store.go(LEFT JOINphotos→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. Ломающих изменений API нет.