Дельта android-live-albums: android-client (+3 требования: живое обновление списка, догон при переподключении, потеря доступа) и realtime (порядок списка теперь правило отображения клиента). Дельта fix-album-cover-readiness: realtime (+1 требование: album.updated при готовности вариантов фото-обложки).
42 lines
2.9 KiB
Markdown
42 lines
2.9 KiB
Markdown
# Proposal
|
|
|
|
## Why
|
|
|
|
Обложка альбома на карточке в списке не обновляется вживую: после загрузки фото счётчик
|
|
`photos_count` приходит, а обложка остаётся заглушкой до ручного обновления. Ссылка на
|
|
обложку (`cover_thumb_url` / `cover_medium_url`) появляется в объекте альбома только после
|
|
генерации вариантов thumb/medium, но событие об этом в персональные потоки не публикуется.
|
|
Дефект серверной стороны способности `realtime`, поэтому затрагивает и веб-клиент, и Android.
|
|
|
|
## What Changes
|
|
|
|
- Когда для фото, являющегося обложкой альбома, готовы варианты, система публикует
|
|
`album.updated` с актуальным объектом альбома в персональные потоки владельца и
|
|
участников — именно тогда объект впервые получает ссылку на обложку.
|
|
- Готовность вариантов фото, которое обложкой не является, объект альбома не меняет и
|
|
события не порождает: иначе массовая загрузка даёт лишний веер `album.updated` на каждый
|
|
файл.
|
|
- Контракт существующих событий и REST не меняется, новых эндпоинтов и миграций нет.
|
|
- **BREAKING**: нет.
|
|
|
|
## Capabilities
|
|
|
|
### New Capabilities
|
|
|
|
_Нет — поведение расширяет существующую способность `realtime`._
|
|
|
|
### Modified Capabilities
|
|
|
|
- `realtime`: добавляется публикация `album.updated` в персональные потоки при готовности
|
|
вариантов фото-обложки, поскольку только тогда объект альбома получает ссылку на обложку.
|
|
|
|
## Impact
|
|
|
|
- **Код (backend):** `internal/albums/service.go` (новая публикация), порт `AlbumAccess` в
|
|
`internal/photos/service.go`, вызов из `internal/photos/worker.go` (готовность вариантов),
|
|
стаб порта в `internal/photos/helpers_test.go`.
|
|
- **Документация:** `project.md` (§11 «Real-time (SSE)», §12 «SSE — детали реализации»).
|
|
- **Не затрагивается:** схема БД, миграции, REST, пер-альбомный контракт (`photo.updated`
|
|
по-прежнему приходит в канал альбома), клиенты — веб и Android уже применяют
|
|
`album.updated` из персонального потока.
|