fix(now-playing): резолвить обложку трека на чтении /now-playing

Обложка ICY-станций (DFM) теперь подтягивается из обогащённого трека по normKey
в момент ответа API, а не записи now_playing — появляется сразу после обогащения,
без ожидания следующего опроса станции (~6 мин).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
nk
2026-06-03 14:20:41 +03:00
parent f379110975
commit 96fabac7f5

View File

@@ -197,8 +197,31 @@ export class NowPlayingService {
}
async getAllNowPlaying() {
return this.prisma.nowPlaying.findMany({
const list = await this.prisma.nowPlaying.findMany({
include: { station: true },
});
// Для записей без своей обложки (ICY-станции типа DFM) подтягиваем обложку
// обогащённого трека из нашей БД по normKey — на чтении, чтобы она появлялась
// сразу после обогащения, не дожидаясь следующего опроса станции.
const missing = list.filter((np) => !np.coverUrl && np.artist && np.song);
if (missing.length > 0) {
const keys = [
...new Set(missing.map((np) => this.buildNormKey(np.artist, np.song))),
];
const tracks = await this.prisma.track.findMany({
where: { normKey: { in: keys }, coverUrl: { not: null } },
select: { normKey: true, coverUrl: true },
});
const coverByKey = new Map(tracks.map((t) => [t.normKey, t.coverUrl]));
for (const np of list) {
if (!np.coverUrl && np.artist && np.song) {
const cover = coverByKey.get(this.buildNormKey(np.artist, np.song));
if (cover) np.coverUrl = cover;
}
}
}
return list;
}
}