Files
ds-galo/openspec/changes/archive/2026-10-11-fix-album-cover/tasks.md
T
iu d99ac77587 chore(openspec): archive completed changes and sync main specs
- fix-large-album-load -> photos, realtime, media-objects
- fix-album-cover -> photos, albums
2026-10-11 14:16:38 +03:00

2.6 KiB
Raw Blame History

Tasks

1. Автобложка при загрузке

  • 1.1 В backend/internal/photos/service.go (Upload) вызывать store.SetCoverIfEmpty(ctx, in.AlbumID, p.ID) после успешного сохранения фото; проверить cd backend && go test ./internal/e2e/ — тест загружает два фото в новый альбом и проверяет, что обложкой стало первое
  • 1.2 Добавить в тот же тест проверку сценария «обложка уже задана»: загрузка второго фото не меняет уже назначенную обложку

2. Снятие обложки при уходе фото-обложки

  • 2.1 Добавить ClearCoverIfMatches(ctx, albumID, photoID) в backend/internal/photos/repository.go, store.go и sqlite_store.go (UPDATE albums SET cover_photo_id = NULL WHERE id = $1 AND cover_photo_id = $2); проверить cd backend && go test ./internal/repo/contract/ — снятие срабатывает только при совпадении обложки
  • 2.2 Вызывать ClearCoverIfMatches в Delete (корзина) и MoveBatch (исходный альбом) в service.go; проверить тестом, что удаление и перенос фото-обложки снимают обложку

3. Пункт «Установить как обложку альбома»

  • 3.1 Добавить пункт в контекстное меню фото сетки (frontend/src/routes/(app)/albums/[id]/+page.svelte, openMenuForPhoto) с иконкой wallpaper и вызовом albums.setCover(albumId, photo.id), видимый только owner/admin; проверить cd frontend && npm run check
  • 3.2 Добавить тот же пункт в секцию «Действия» компонента frontend/src/lib/components/PhotoPanel.svelte; проверить npm run check и наблюдаемо: пункт показывается только владельцу/админу

4. Интеграционная проверка

  • 4.1 cd backend && go test ./... и cd frontend && npm run check — оба зелёные
  • 4.2 Собрать (make build), загрузить фото в новый альбом (обложка = первое фото), затем удалить фото-обложку (обложка пуста) и перенести фото-обложку (обложка пуста); сбросить обложку вручную через панель — остаётся пустой