Add GetArtists RPC with artist monitor state (monitored/unmonitored/excluded)
This commit is contained in:
@@ -40,6 +40,7 @@ type MusicAgregatorService struct {
|
||||
riverClient *river.Client[pgx.Tx]
|
||||
torrents *database.TorrentRepository
|
||||
downloads *database.DownloadRepository
|
||||
artists *database.ArtistRepository
|
||||
}
|
||||
|
||||
func NewMusicAgregatorService(cfg config.Config, riverClient *river.Client[pgx.Tx], db *database.DB) (*MusicAgregatorService, error) {
|
||||
@@ -76,6 +77,7 @@ func NewMusicAgregatorService(cfg config.Config, riverClient *river.Client[pgx.T
|
||||
riverClient: riverClient,
|
||||
torrents: database.NewTorrentRepository(db.Pool),
|
||||
downloads: database.NewDownloadRepository(db.Pool),
|
||||
artists: database.NewArtistRepository(db.Pool),
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -85,6 +87,30 @@ func (s *MusicAgregatorService) Close() {
|
||||
}
|
||||
}
|
||||
|
||||
func (service *MusicAgregatorService) GetArtists(ctx context.Context, _ *pb.GetArtistsRequest) (*pb.GetArtistsResponse, error) {
|
||||
dbArtists, err := service.artists.GetAll(ctx)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msg("failed to list artists")
|
||||
return nil, fmt.Errorf("listing artists: %w", err)
|
||||
}
|
||||
|
||||
artists := make([]*pb.ArtistSummary, 0, len(dbArtists))
|
||||
for _, a := range dbArtists {
|
||||
artists = append(artists, &pb.ArtistSummary{
|
||||
Id: a.ID,
|
||||
ExternalId: a.ExternalID,
|
||||
Name: a.Name,
|
||||
ArtistType: a.ArtistType,
|
||||
Country: a.Country,
|
||||
Genres: a.Genres,
|
||||
ImageUrl: a.ImageURL,
|
||||
MonitorState: toProtoMonitorState(a.MonitorState),
|
||||
})
|
||||
}
|
||||
|
||||
return &pb.GetArtistsResponse{Artists: artists}, nil
|
||||
}
|
||||
|
||||
func (service *MusicAgregatorService) MonitorAlbum(ctx context.Context, req *pb.MonitorAlbumRequest) (*pb.MonitorAlbumResponse, error) {
|
||||
album, err := service.metadata.GetAlbum(ctx, req.GetAlbumId())
|
||||
if err != nil {
|
||||
@@ -378,6 +404,19 @@ func buildMonitoredRelease(p parsedItem) *pb.MonitoredRelease {
|
||||
}
|
||||
}
|
||||
|
||||
func toProtoMonitorState(state database.ArtistMonitorState) pb.ArtistMonitorState {
|
||||
switch state {
|
||||
case database.ArtistMonitored:
|
||||
return pb.ArtistMonitorState_ARTIST_MONITOR_STATE_MONITORED
|
||||
case database.ArtistUnmonitored:
|
||||
return pb.ArtistMonitorState_ARTIST_MONITOR_STATE_UNMONITORED
|
||||
case database.ArtistExcluded:
|
||||
return pb.ArtistMonitorState_ARTIST_MONITOR_STATE_EXCLUDED
|
||||
default:
|
||||
return pb.ArtistMonitorState_ARTIST_MONITOR_STATE_UNSPECIFIED
|
||||
}
|
||||
}
|
||||
|
||||
func downloadTorrentData(url string) ([]byte, error) {
|
||||
client := &http.Client{Timeout: 30 * time.Second}
|
||||
resp, err := client.Get(url)
|
||||
|
||||
Reference in New Issue
Block a user