Large albums opened slowly and flickered; the default album cover was also lost in the media-objects refactor. Large-album loading: - quantize signed object URLs within a window and send Cache-Control so previews are reused instead of re-fetched - publish photo.updated (not photo.created) when variants are ready, so clients update in place without reordering the grid - worker concurrency + newest-first variant priority; raise default batch Album cover: - first uploaded photo becomes the cover when none is set - clear the cover when the cover photo is trashed or moved out - "set as album cover" in the photo context menu and actions panel OpenSpec changes: fix-large-album-load, fix-album-cover
2.6 KiB
2.6 KiB
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), загрузить фото в новый альбом (обложка = первое фото), затем удалить фото-обложку (обложка пуста) и перенести фото-обложку (обложка пуста); сбросить обложку вручную через панель — остаётся пустой