Прежнее условие «очередь пуста» почти не срабатывало — now-playing-крон держал
очередь занятой, и холодный бэклог (~21k) не двигался. Теперь раз в минуту
подкидываем 100 pending когда очередь почти пуста; играющие треки идут вперёд
по приоритету.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
iTunes-запрос (уже делается ради обложки) теперь отдаёт и альбом/год/жанр.
Жанр: Discogs (тонкий) → iTunes (грубый фолбэк) — поднимает покрытие жанров
в чартах. Альбом и дата релиза заполняются из iTunes. Стили и лейбл — по-прежнему
только Discogs.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Раз в минуту проходим now_playing: создаём Track при отсутствии (без записи
проигрывания) и приоритетно обогащаем тех, у кого нет обложки. Now-playing-обложки
(DFM и др.) появляются быстро у всех станций, не дожидаясь смены трека/бэкафилла.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Покрытие обложек у Discogs низкое (нет не-электроники, нишевого). Добавлен
iTunes Search API (без ключа, Apple-арт — как у Record) основным источником
обложки: iTunes → Discogs → существующая, далее WebP. Играющие сейчас треки
(recordPlay) ставятся в НАЧАЛО очереди обогащения — обложка успевает появиться,
пока трек звучит. Троттлинг 1.5с.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
В базе ~22к треков — прежние 30/10мин слишком медленно. Батч подобран под
троттлинг очереди (~50 запросов/мин, под лимитом Discogs 60/мин), пропускаем
тик если прошлый батч ещё не дожёван.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
При первом появлении трека подтягиваем жанр/стиль/лейбл/год из Discogs
и сохраняем обложку в едином формате WebP 500x500 у себя (/covers). Дальше
пользователю отдаём только из своей БД — внешние сервисы в рантайме не дёргаем.
- Track: +genre/styles/label/year/discogsId/enrichStatus (миграция)
- EnrichModule: DiscogsService (поиск), CoverStorageService (sharp->webp),
EnrichmentService (очередь с троттлингом + бэкафилл-крон каждые 10 мин)
- charts: фильтр чартов по жанру (?genre=), GET /charts/genres,
жанр/стиль/лейбл/год в выдаче чарта и детальной странице
- main: раздача /covers статикой; docker: volume covers_data + env
DISCOGS_TOKEN/PUBLIC_BASE_URL/COVERS_DIR
- убран MusicBrainz-фолбэк (заменён Discogs)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>