Files
2026-10-10 14:21:43 +03:00

51 lines
3.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` — изменений контракта не требуется.
- **Данные/миграции:** не требуются.