Files
ds-galo/openspec/changes/fix-large-album-load/specs/photos/spec.md
T
iu d7a37328f0 fix(photos): faster large-album loading and album cover lifecycle
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
2026-10-11 14:15:59 +03:00

2.2 KiB

Spec Delta

MODIFIED Requirements

Requirement: Получение фото по требованию

Клиент SHALL иметь возможность получить актуальные данные фото с подписанным URL, обслуживаемым бэкендом, независимо от бэкенда хранения. Подпись SHALL быть детерминированной в пределах окна действия, чтобы повторные выдачи одного и того же объекта давали идентичный URL.

Scenario: Выдача свежего URL

  • WHEN клиент запрашивает фото по id
  • THEN система возвращает подписанный URL бэкенда для просмотра

Scenario: Повторная выдача совпадает

  • WHEN один и тот же объект запрашивается повторно в пределах окна действия подписи
  • THEN система возвращает идентичный URL

ADDED Requirements

Requirement: Кэширование объектов

Доставка объектов SHALL помечать ответы как кэшируемые, чтобы браузер переиспользовал уже полученные превью, а повторное открытие альбома не вызывало повторную загрузку неизменившихся объектов.

Scenario: Заголовки кэширования

  • WHEN клиент получает объект (оригинал, превью или thumb) по подписанному URL
  • THEN ответ содержит заголовок кэширования с ограниченным сроком годности

Scenario: Повторный показ без перезагрузки

  • WHEN сетка превью перерисовывается, а URL объектов не изменились
  • THEN браузер отдаёт объекты из кэша без повторного запроса к бэкенду