Add SearchAlbum endpoint

This commit is contained in:
Alexander
2026-05-07 14:24:14 +02:00
parent de52fcbc79
commit fb2e4b9107
9 changed files with 374 additions and 97 deletions
+43
View File
@@ -91,6 +91,49 @@ func (p *Provider) GetAlbum(ctx context.Context, id string) (*domain.Album, erro
return mapAlbum(mb, release), nil
}
func (p *Provider) SearchAlbums(ctx context.Context, query string, artist string, limit, offset int) (*domain.SearchResult[domain.Album], error) {
if limit <= 0 || limit > 100 {
limit = 25
}
var luceneQuery string
if artist != "" && query != "" {
luceneQuery = fmt.Sprintf("releasegroup:%s AND artist:%s", escapeQuery(query), escapeQuery(artist))
} else if artist != "" {
luceneQuery = fmt.Sprintf("artist:%s", escapeQuery(artist))
} else {
luceneQuery = fmt.Sprintf("releasegroup:%s", escapeQuery(query))
}
data, err := p.client.search(ctx, "release-group", luceneQuery, limit, offset)
if err != nil {
return nil, fmt.Errorf("search albums: %w", err)
}
var resp struct {
Count int `json:"count"`
Offset int `json:"offset"`
ReleaseGroups []*mbReleaseGroup `json:"release-groups"`
}
if err := decodeInto(data, &resp); err != nil {
return nil, err
}
result := &domain.SearchResult[domain.Album]{
Total: resp.Count,
Limit: limit,
Offset: offset,
}
for _, mb := range resp.ReleaseGroups {
if album := mapAlbum(mb, nil); album != nil {
result.Items = append(result.Items, *album)
}
}
return result, nil
}
func (p *Provider) GetArtistAlbums(ctx context.Context, artistID string, limit, offset int) (*domain.SearchResult[domain.Album], error) {
if limit <= 0 || limit > 100 {
limit = 25