Fix API endpoints: resource IDs in URL path, not query params

- artists/{artist_id}/tracks and /direct-albums: artistID in path, return ArtistTracks/ArtistAlbums with pager
- likes: /users/me/likes/{type}s/{add-multiple|remove}, IDs as body params
- queue: /queues/{queue_id}/... instead of /queue/...?queue_id=...
- radio: /rotor/station/{station_id}/info and /tracks
- concerts: /concerts/{concert_id}/info, /concerts/tab-config
- playlists: /users/{user_id}/playlists
- labels: /labels/{label_id}, /albums, /artists
- clips: /clips/will/like, /artists/{artist_id}/blocks/artist-clips
- feed: /landing3/* endpoints

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
MrixsandClaude Code committed 2026-10-18 08:32:29 +03:00
1 parent 02a6dabcfb
commit 70c2a5cd01
12 files changed
+238 -168

No files matched your search

+12 -25
View File
@@ -44,46 +44,33 @@ func (c *Client) GetArtist(ctx context.Context, artistID string) (*models.Artist
}
// GetArtistAlbums gets albums by an artist
func (c *Client) GetArtistAlbums(ctx context.Context, artistID string, page, pageSize int) ([]*models.Album, error) {
// GET /artists/{artist_id}/direct-albums
func (c *Client) GetArtistAlbums(ctx context.Context, artistID string, page, pageSize int) (*models.ArtistAlbums, error) {
params := map[string]string{
"artist-id": artistID,
"page": fmt.Sprintf("%d", page),
"page-size": fmt.Sprintf("%d", pageSize),
}
var result []models.Album
if err := c.request.Get(ctx, "/artists/albums", params, &result); err != nil {
var result models.ArtistAlbums
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/direct-albums", artistID), params, &result); err != nil {
return nil, err
}
albums := make([]*models.Album, len(result))
for i := range result {
result[i].SetClient(c)
albums[i] = &result[i]
}
return albums, nil
result.SetClient(c)
return &result, nil
}
// GetArtistTracks gets tracks by an artist
func (c *Client) GetArtistTracks(ctx context.Context, artistID string, page, pageSize int) ([]*models.Track, error) {
// GET /artists/{artist_id}/tracks
func (c *Client) GetArtistTracks(ctx context.Context, artistID string, page, pageSize int) (*models.ArtistTracks, error) {
params := map[string]string{
"artist-id": artistID,
"page": fmt.Sprintf("%d", page),
"page-size": fmt.Sprintf("%d", pageSize),
}
var result []models.Track
if err := c.request.Get(ctx, "/artists/tracks", params, &result); err != nil {
var result models.ArtistTracks
if err := c.request.Get(ctx, fmt.Sprintf("/artists/%s/tracks", artistID), params, &result); err != nil {
return nil, err
}
tracks := make([]*models.Track, len(result))
for i := range result {
result[i].SetClient(c)
tracks[i] = &result[i]
}
return tracks, nil
result.SetClient(c)
return &result, nil
}
// Need to add fmt import
// "fmt"