feat(shazam): распознавание трека через Shazam API для станций без метаданных

- новый модуль 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>
This commit is contained in:
nk
2026-06-07 18:37:53 +03:00
parent 05e3796b85
commit 1616c231b7
8 changed files with 335 additions and 9 deletions

View File

@@ -9,6 +9,7 @@ import { NowPlayingModule } from './now-playing/now-playing.module';
import { HealthCheckModule } from './health-check/health-check.module';
import { ChartsModule } from './charts/charts.module';
import { AppVersionModule } from './app-version/app-version.module';
import { ShazamModule } from './shazam/shazam.module';
@Module({
imports: [
@@ -22,6 +23,7 @@ import { AppVersionModule } from './app-version/app-version.module';
HealthCheckModule,
ChartsModule,
AppVersionModule,
ShazamModule,
],
})
export class AppModule {}