de674376ed
- 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
162 lines
3.0 KiB
Go
162 lines
3.0 KiB
Go
package server
|
|
|
|
import (
|
|
"github.com/metadata-agregator/internal/domain"
|
|
metadatav1 "github.com/metadata-agregator/pkg/gen/metadata/v1"
|
|
)
|
|
|
|
func toProtoArtist(d *domain.Artist) *metadatav1.Artist {
|
|
if d == nil {
|
|
return nil
|
|
}
|
|
|
|
a := &metadatav1.Artist{
|
|
Id: d.ID,
|
|
Name: d.Name,
|
|
SortName: d.SortName,
|
|
ArtistType: d.Type,
|
|
Country: d.Country,
|
|
Description: d.Description,
|
|
ImageUrl: d.ImageURL,
|
|
}
|
|
|
|
if d.FormedDate != nil {
|
|
a.FormedDate = d.FormedDate.Format("2006-01-02")
|
|
}
|
|
if d.DisbandedDate != nil {
|
|
a.DisbandedDate = d.DisbandedDate.Format("2006-01-02")
|
|
}
|
|
|
|
for _, g := range d.Genres {
|
|
a.Genres = append(a.Genres, &metadatav1.Genre{
|
|
Id: g.ID,
|
|
Name: g.Name,
|
|
})
|
|
}
|
|
|
|
for _, e := range d.ExternalIDs {
|
|
a.ExternalIds = append(a.ExternalIds, &metadatav1.ExternalID{
|
|
Source: e.Source,
|
|
SourceId: e.SourceID,
|
|
Url: e.URL,
|
|
})
|
|
}
|
|
|
|
return a
|
|
}
|
|
|
|
func toProtoAlbum(d *domain.Album) *metadatav1.Album {
|
|
if d == nil {
|
|
return nil
|
|
}
|
|
|
|
a := &metadatav1.Album{
|
|
Id: d.ID,
|
|
Title: d.Title,
|
|
AlbumType: d.Type,
|
|
Upc: d.UPC,
|
|
TotalTracks: int32(d.TotalTracks),
|
|
TotalDiscs: int32(d.TotalDiscs),
|
|
CoverUrl: d.CoverURL,
|
|
}
|
|
|
|
if d.ReleaseDate != nil {
|
|
a.ReleaseDate = d.ReleaseDate.Format("2006-01-02")
|
|
}
|
|
|
|
for _, ac := range d.Artists {
|
|
a.Artists = append(a.Artists, toProtoArtistCredit(&ac))
|
|
}
|
|
|
|
if d.Label != nil {
|
|
a.Label = &metadatav1.Label{
|
|
Id: d.Label.ID,
|
|
Name: d.Label.Name,
|
|
Country: d.Label.Country,
|
|
}
|
|
}
|
|
|
|
for _, g := range d.Genres {
|
|
a.Genres = append(a.Genres, &metadatav1.Genre{
|
|
Id: g.ID,
|
|
Name: g.Name,
|
|
})
|
|
}
|
|
|
|
for _, e := range d.ExternalIDs {
|
|
a.ExternalIds = append(a.ExternalIds, &metadatav1.ExternalID{
|
|
Source: e.Source,
|
|
SourceId: e.SourceID,
|
|
Url: e.URL,
|
|
})
|
|
}
|
|
|
|
return a
|
|
}
|
|
|
|
func toProtoTrack(d *domain.Track) *metadatav1.Track {
|
|
if d == nil {
|
|
return nil
|
|
}
|
|
|
|
t := &metadatav1.Track{
|
|
Id: d.ID,
|
|
Title: d.Title,
|
|
DurationMs: int32(d.DurationMs),
|
|
Isrc: d.ISRC,
|
|
Explicit: d.Explicit,
|
|
DiscNumber: int32(d.DiscNumber),
|
|
TrackNumber: int32(d.TrackNumber),
|
|
}
|
|
|
|
for _, ac := range d.Artists {
|
|
t.Artists = append(t.Artists, toProtoArtistCredit(&ac))
|
|
}
|
|
|
|
if d.Work != nil {
|
|
t.Work = toProtoWork(d.Work)
|
|
}
|
|
|
|
for _, e := range d.ExternalIDs {
|
|
t.ExternalIds = append(t.ExternalIds, &metadatav1.ExternalID{
|
|
Source: e.Source,
|
|
SourceId: e.SourceID,
|
|
Url: e.URL,
|
|
})
|
|
}
|
|
|
|
return t
|
|
}
|
|
|
|
func toProtoWork(d *domain.Work) *metadatav1.Work {
|
|
if d == nil {
|
|
return nil
|
|
}
|
|
|
|
w := &metadatav1.Work{
|
|
Id: d.ID,
|
|
Title: d.Title,
|
|
WorkType: d.Type,
|
|
Language: d.Language,
|
|
}
|
|
|
|
for _, c := range d.Composers {
|
|
w.Composers = append(w.Composers, toProtoArtistCredit(&c))
|
|
}
|
|
|
|
return w
|
|
}
|
|
|
|
func toProtoArtistCredit(d *domain.ArtistCredit) *metadatav1.ArtistCredit {
|
|
if d == nil {
|
|
return nil
|
|
}
|
|
|
|
return &metadatav1.ArtistCredit{
|
|
Artist: toProtoArtist(&d.Artist),
|
|
Role: d.Role,
|
|
Position: int32(d.Position),
|
|
JoinPhrase: d.JoinPhrase,
|
|
}
|
|
}
|