feat: implement MusicBrainz API endpoints, filtering, and normalization

- Add GetArtistReleaseGroups method with pagination support
- Implement status filtering (exclude Bootleg/Promotion/Pseudo-Release)
- Implement type filtering (include Album/Single/EP/Compilation)
- Add per-artist type filtering hooks (ArtistTypeFilter) for Web UI
- Add NormalizeString and NormalizeArtistName for fuzzy matching prep
- Add ReleaseGroup.ToExternalRelease conversion method
- Write comprehensive table-driven tests for filtering logic
- Write tests for normalization functions (18 cases)
- Write tests for GetArtistReleaseGroups (success, pagination, empty, errors)
- All tests pass (47 total across project), go vet clean
This commit is contained in:
2026-05-26 12:31:07 +03:00
parent b0f69d3a4f
commit e624bb0eaf
3 changed files with 894 additions and 8 deletions

View File

@@ -65,14 +65,14 @@ Implement a MusicBrainz API provider with strict 1 request/second rate limiting,
- [x] run tests - must pass before next task
### Task 3: Implement MusicBrainz API endpoints and filtering
- [ ] implement GetArtistReleaseGroups(artistMBID string) method
- [ ] apply filters: exclude Bootleg/Promotion/Pseudo-Release status
- [ ] apply type filters: include Album/Single/EP/Compilation only
- [ ] implement per-artist type filtering hooks (placeholder for Web UI integration)
- [ ] normalize artist names and titles (remove special characters, years, brackets)
- [ ] write tests for filtering logic (table-driven test cases)
- [ ] write tests for normalization functions
- [ ] run tests - must pass before next task
- [x] implement GetArtistReleaseGroups(artistMBID string) method
- [x] apply filters: exclude Bootleg/Promotion/Pseudo-Release status
- [x] apply type filters: include Album/Single/EP/Compilation only
- [x] implement per-artist type filtering hooks (placeholder for Web UI integration)
- [x] normalize artist names and titles (remove special characters, years, brackets)
- [x] write tests for filtering logic (table-driven test cases)
- [x] write tests for normalization functions
- [x] run tests - must pass before next task
### Task 4: Implement database integration and sync orchestration
- [ ] create `internal/musicbrainz/sync.go` with SyncArtistDiscography function