feat: add Navidrome client with Subsonic API sync
Add the Navidrome client module that connects to a Navidrome server via the Subsonic API, fetches artist and album data, and syncs it into the local SQLite database. - Add go-subsonic dependency for Subsonic API communication - Create internal/navidrome/client.go with NavidromeClient wrapper - NewClient constructor with token-based auth - Ping health check with HTTP status validation - GetArtists fetches all artists via getArtists endpoint - GetArtistAlbums fetches albums per artist via getArtist endpoint - Create internal/navidrome/sync.go with sync orchestration - SyncArtists upserts artists into artist_settings table - SyncAlbums fetches and stores albums for monitored artists - Add local_albums table (migration 003) with FK to artist_settings - Add LocalAlbum CRUD operations in internal/database/local_albums.go - Full test coverage: 19 tests across client and sync packages - All tests pass, go vet and go fmt clean
This commit is contained in:
@@ -101,7 +101,7 @@ See [docs/Specification.md](docs/Specification.md) for the full configuration re
|
||||
| **Navidrome Client** | Subsonic API v1.16.1 communication (token-based auth) |
|
||||
| **MusicBrainz Provider** | Discography fetching with rate limiting and caching |
|
||||
| **Scanner Engine** | String normalization and fuzzy comparison |
|
||||
| **Database Layer** | SQLite persistence for settings, cache, and state |
|
||||
| **Database Layer** | SQLite persistence: `artist_settings`, `local_albums` (Navidrome sync), `external_releases` (MusicBrainz cache), `notifications_sent` |
|
||||
| **Notifier** | Scheduled Telegram notifications |
|
||||
| **Web UI** | Dashboard for browsing and managing missing releases |
|
||||
|
||||
@@ -208,7 +208,7 @@ scanner:
|
||||
| **Navidrome Client** | Взаимодействие с Subsonic API v1.16.1 (токенная аутентификация) |
|
||||
| **MusicBrainz Provider** | Загрузка дискографий с кэшированием и rate limiting |
|
||||
| **Scanner Engine** | Нормализация строк и нечёткое сравнение |
|
||||
| **Database Layer** | Хранение настроек, кэша и состояния в SQLite |
|
||||
| **Database Layer** | SQLite: `artist_settings`, `local_albums` (синхронизация из Navidrome), `external_releases` (кэш MusicBrainz), `notifications_sent` |
|
||||
| **Notifier** | Планировщик уведомлений в Telegram |
|
||||
| **Web UI** | Панель управления отсутствющими релизами |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user