feat: initial implementation of metadata aggregator

- gRPC service with MusicBrainz provider
- PostgreSQL schema with migrations
- Service layer with database-first caching
- Repository pattern for data access
- YAML configuration support
- Research documentation for 17 music metadata projects
This commit is contained in:
Alexander
2026-04-28 16:27:14 +02:00
commit a1f6701bac
163 changed files with 95884 additions and 0 deletions
+84
View File
@@ -0,0 +1,84 @@
package domain
import "time"
type Artist struct {
ID string
Name string
SortName string
Type string
Country string
FormedDate *time.Time
DisbandedDate *time.Time
Description string
ImageURL string
Genres []Genre
ExternalIDs []ExternalID
}
type Album struct {
ID string
Title string
Type string
ReleaseDate *time.Time
UPC string
TotalTracks int
TotalDiscs int
CoverURL string
Artists []ArtistCredit
Label *Label
Genres []Genre
ExternalIDs []ExternalID
}
type Track struct {
ID string
Title string
DurationMs int
ISRC string
Explicit bool
DiscNumber int
TrackNumber int
Artists []ArtistCredit
Work *Work
ExternalIDs []ExternalID
}
type Work struct {
ID string
Title string
Type string
Language string
Composers []ArtistCredit
}
type Label struct {
ID string
Name string
Country string
}
type Genre struct {
ID string
Name string
}
type ArtistCredit struct {
Artist Artist
Role string
Position int
JoinPhrase string
}
type ExternalID struct {
Source string
SourceID string
URL string
}
type SearchResult[T any] struct {
Items []T
Total int
Limit int
Offset int
}