// Package client provides methods for interacting with Yandex Music API endpoints. package client import ( "context" "gitea.mrixs.me/Mrixs/yandex-music-api-go/internal/models" "gitea.mrixs.me/Mrixs/yandex-music-api-go/internal/utils" ) // GetAlbums gets albums by their IDs (GET /tracks?album-ids=...). // Returns a slice of Album pointers, or nil if no IDs are provided. func (c *Client) GetAlbums(ctx context.Context, albumIDs []string) ([]*models.Album, error) { if len(albumIDs) == 0 { return nil, nil } params := map[string]string{ "album-ids": joinIDs(albumIDs), } var result []models.Album if err := c.request.Get(ctx, "/albums", 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 } // GetAlbum gets a single album by ID using GetAlbums. // Returns an error if no album is found with the given ID. func (c *Client) GetAlbum(ctx context.Context, albumID string) (*models.Album, error) { albums, err := c.GetAlbums(ctx, []string{albumID}) if err != nil { return nil, err } if len(albums) == 0 { return nil, utils.NewYandexMusicError("album not found", utils.ErrNotFound) } return albums[0], nil } // GetAlbumsWithTracks gets albums with tracks expanded (GET /tracks?with-tracks=true). // Returns a slice of Album pointers with their tracks populated. func (c *Client) GetAlbumsWithTracks(ctx context.Context, albumIDs []string) ([]*models.Album, error) { if len(albumIDs) == 0 { return nil, nil } params := map[string]string{ "album-ids": joinIDs(albumIDs), "with-tracks": "true", } var result []models.Album if err := c.request.Get(ctx, "/albums", 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 }