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
Proposal
Why
Автобложка «первое фото» была специфицирована, но потерялась при рефакторинге media-objects: при загрузке обложка больше не назначается, поэтому большинство альбомов (в т.ч. семенные) остаются без обложки. Дополнительно нужно довести жизненный цикл обложки: снимать её, когда фото-обложка покидает альбом, и сделать явный сброс предсказуемым.
What Changes
- Обложка по умолчанию при загрузке. Если у альбома нет обложки, обложкой становится первое загруженное фото; последующие фото её не меняют.
- Снятие обложки при уходе фото-обложки. Помещение фото-обложки в корзину или перенос её в другой альбом очищает обложку (без перевыбора).
- Явный сброс обложки (
clear_cover) обнуляет обложку и не пересчитывает её. - Frontend. Пункт «Установить как обложку альбома» в контекстном меню фото сетки и в разделе «Действия» правой панели; доступен только владельцу и админу.
- Без backfill существующих альбомов без обложки.
Capabilities
New Capabilities
Modified Capabilities
photos: обложка по умолчанию назначается при загрузке (первое фото) и снимается, когда фото-обложка покидает альбом.albums: сброс обложки делает её не заданной (без возврата к значению по умолчанию).
Impact
- Backend:
internal/photos/service.go(Upload,Delete,MoveBatch),internal/photos/{store,repository,sqlite_store}.go(метод снятия обложки). - Frontend: контекстное меню фото в сетке (
albums/[id]/+page.svelte), раздел «Действия» вPhotoPanel.svelte; используется существующийPATCH /albums/:idчерезalbums.setCover. - Данные/миграции: не требуются; backfill не выполняется.