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:
@@ -111,9 +111,11 @@ Based on the specification (docs/Specification.md), the application follows a mo
|
||||
|
||||
4. **Database Layer** (`internal/database/` or similar)
|
||||
- SQLite 3 integration via github.com/mattn/go-sqlite3
|
||||
- Subsonic API client via github.com/delucks/go-subsonic
|
||||
- Manages schema migrations
|
||||
- Handles tables:
|
||||
- `artist_settings`: Artist monitoring configuration
|
||||
- `local_albums`: Navidrome albums synced via Subsonic API (id, artist_id, title)
|
||||
- `external_releases`: Cached MusicBrainz data
|
||||
- `notifications_sent`: Sent notification tracking
|
||||
|
||||
|
||||
Reference in New Issue
Block a user