fix(realtime): доставлять обложку альбома после готовности вариантов

Карточка альбома не получала ссылку на обложку: она появляется в объекте
альбома только после генерации thumb/medium, а событие об этом шаге в
персональные потоки не публиковалось — счётчик обновлялся, обложка нет.

- albums.Service.NotifyCoverReady публикует album.updated получателям, когда
  варианты готовы у фото, являющегося текущей обложкой (иначе no-op, чтобы
  массовая загрузка не рассылала событие на каждый файл)
- photos: порт AlbumAccess расширен, worker вызывает публикацию после
  photo.updated
- project.md §11/§12: триггер добавлен в контракт персонального потока
This commit is contained in:
iu
2026-10-16 12:47:50 +03:00
parent 742745e6aa
commit 44cb7c7d68
7 changed files with 129 additions and 11 deletions
+10 -4
View File
@@ -15,16 +15,16 @@ import (
func TestWorkerGeneratesVariantsAndCollects(t *testing.T) {
pool := testPool(t)
svc, cl := newTestService(t, pool)
runWorkerFlow(t, pool, svc, cl)
runWorkerFlow(t, pool, svc, cl, nil)
}
func TestWorkerGeneratesVariantsWithFS(t *testing.T) {
pool := testPool(t)
svc, cl := newTestServiceFS(t, pool)
runWorkerFlow(t, pool, svc, cl)
svc, cl, albums := newRecordingServiceFS(t, pool)
runWorkerFlow(t, pool, svc, cl, albums)
}
func runWorkerFlow(t *testing.T, pool *pgxpool.Pool, svc *Service, cl storage.Backend) {
func runWorkerFlow(t *testing.T, pool *pgxpool.Pool, svc *Service, cl storage.Backend, albums *recordingAlbums) {
t.Helper()
ctx := context.Background()
user := createUser(t, ctx, pool)
@@ -57,6 +57,12 @@ func runWorkerFlow(t *testing.T, pool *pgxpool.Pool, svc *Service, cl storage.Ba
t.Fatalf("no variant-ready event published")
}
// Variant readiness must also announce the album to personal streams, because
// the album object only gains a cover link once the variants exist.
if albums != nil && !albums.coverReady(album, p.ID) {
t.Fatalf("cover readiness was not announced for the uploaded photo")
}
refreshed, err := svc.store.GetByID(ctx, p.ID, "")
if err != nil {
t.Fatalf("get refreshed: %v", err)