perf(backend): ретенция track_plays, прун сирот-треков, проекция now-playing, пул БД

- MaintenanceService (@Cron daily 4:00): ретенция track_plays >180д чанками по 20k
  (без ретенции таблица растёт ~100k строк/сутки) + прун осиротевших треков
  (без проигрываний/лайков/обложки, >30д). Сейчас удаляет 0 (данным 4 дня) —
  только ограничивает будущий рост. ВНИМАНИЕ: 180д ограничивает и чарт period=all.
- getAllNowPlaying: select-проекция (stationId+name) вместо include station:true —
  не тянем всю строку Station (streamUrl, tags[], даты) на каждый ряд now_playing.
- PrismaService: connection_limit=20 в URL идемпотентно (дефолт ~5 мал под ~16
  конкурентных поллеров).
This commit is contained in:
nk
2026-06-06 17:08:36 +03:00
parent 944ec63df0
commit 4aa3b55b5e
4 changed files with 115 additions and 2 deletions

View File

@@ -217,8 +217,15 @@ export class NowPlayingService {
}
async getAllNowPlaying() {
// Проекция: контроллеру нужны только stationId+name станции и трек —
// не тянем всю строку Station (streamUrl, tags[], даты и т.д.) на каждый ряд.
const list = await this.prisma.nowPlaying.findMany({
include: { station: true },
select: {
artist: true,
song: true,
coverUrl: true,
station: { select: { stationId: true, name: true } },
},
});
// Для записей без своей обложки (ICY-станции типа DFM) подтягиваем обложку