commit
This commit is contained in:
@@ -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` — изменений контракта не требуется.
|
||||
- **Данные/миграции:** не требуются.
|
||||
Reference in New Issue
Block a user