This commit is contained in:
iu
2026-10-10 14:21:43 +03:00
parent 84ce4d1930
commit 9329ebc023
17 changed files with 591 additions and 34 deletions
@@ -0,0 +1,50 @@
# Proposal
## Why
Список альбомов пустой и безликий: карточки показывают заглушку `🖼️`, а создание
альбома — постоянная inline-форма в заголовке. При этом бэкенд уже хранит
`cover_photo_id` и умеет его менять, но фронтенд нигде не отдаёт URL обложки и не
даёт её выбрать. Нужно довести UI до состояния, где альбомы узнаваемы по
обложкам, а создание не занимает место в шапке.
## What Changes
- Кнопка «Создать» в списке альбомов превращается в компактную иконку с хинтом
(`title` + `aria-label`). По клику открывается диалог с полем «Название»;
отправка создаёт альбом через существующий `POST /albums`.
- `GET /albums` начинает возвращать `cover_url` — presigned URL миниатюры
обложки (или `null`), чтобы карточка списка могла показать изображение.
- Карточки альбомов в списке показывают обложку; при её отсутствии — прежнюю
заглушку.
- В настройках альбома появляется секция «Обложка»: сетка миниатюр фото
альбома, клик по фото применяет его обложкой (`PATCH` с `cover_photo_id`),
кнопка «Убрать» очищает (`clear_cover`).
- Автоматическая обложка при загрузке фото ставится только если обложка ещё
пустая, чтобы не затирать ручной выбор владельца.
## Capabilities
### New Capabilities
Нет.
### Modified Capabilities
- `albums`: создание альбома через иконку-кнопку и диалог; `cover_url` в списке
альбомов; выбор и очистка обложки в настройках; правило автоматической
обложки (только при пустой).
## Impact
- **Frontend:** `src/routes/+page.svelte` (иконка, диалог, рендер обложки),
`src/routes/albums/[id]/settings/+page.svelte` (секция «Обложка»),
`src/lib/types.ts` (`Album.cover_url`), возможно новый переиспользуемый
inline-SVG компонент иконки.
- **Backend:** `internal/albums/store.go` и `internal/albums/service.go`
(получение thumb-ключа обложки и presign `cover_url`), `internal/photos/store.go`
(`SetCover` только при пустой обложке).
- **API:** ответ `GET /albums` расширяется полем `cover_url` (аддитивно,
обратносовместимо). `PATCH /albums/:id` уже поддерживает `cover_photo_id` и
`clear_cover` — изменений контракта не требуется.
- **Данные/миграции:** не требуются.