Files
radiola-backend/src/shazam/shazam.controller.ts
nk 1616c231b7 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>
2026-06-07 18:37:53 +03:00

18 lines
618 B
TypeScript

import { Controller, Post, Param, ParseIntPipe } from '@nestjs/common';
import { ApiTags, ApiOperation } from '@nestjs/swagger';
import { ShazamService } from './shazam.service';
@ApiTags('shazam')
@Controller('shazam')
export class ShazamController {
constructor(private readonly shazamService: ShazamService) {}
@Post('recognize/:stationId')
@ApiOperation({
summary: 'Распознать играющий сейчас трек на станции (по station_id)',
})
async recognize(@Param('stationId', ParseIntPipe) stationId: number) {
return this.shazamService.recognize(stationId);
}
}