- новый модуль shazam: POST /shazam/recognize/:stationId — тянет ~6с аудио из
потока станции, отдаёт в изолированный ShazamClient, возвращает artist/song/cover
- ShazamClient — адаптер к shazam-api.com, ключ из env (SHAZAM_API_KEY); точный
контракт запроса/ответа помечен TODO до получения доки из ЛК
- кэш результата по станции (15с) — троттлинг + экономия платных вызовов
- общий реестр не-музыкальных жанров (common/station-classification.ts);
charts.service переведён на него, shazam использует для гейта «есть ли музыка»
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- модели Track / TrackPlay / TrackLike (+ миграция add_charts)
- сбор проигрываний в now-playing-поллере: при смене трека на станции
пишется TrackPlay (нормализация artist+song -> Track), fire-and-forget
обогащение через MusicBrainz (album/releaseDate)
- ChartsModule: GET /charts/tracks (период day/week/month/all, ранг, тренд,
проигрывания, станции, лайки), GET /charts/tracks/:id (метрики, таймлайны
популярности и лайков по дням, топ станций, isLiked), POST/DELETE like
- OptionalAuthGuard для публичной детальной страницы с опц. userId