// Package client provides methods for interacting with Yandex Music API endpoints. package client import ( "context" "fmt" "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 } // GetAlbumSimilarEntities gets similar entities for an album (GET /albums/{id}/similar-entities). func (c *Client) GetAlbumSimilarEntities(ctx context.Context, albumID string) (*models.AlbumSimilarEntities, error) { var result models.AlbumSimilarEntities if err := c.request.Get(ctx, fmt.Sprintf("/albums/%s/similar-entities", albumID), nil, &result); err != nil { return nil, err } result.SetClient(c) return &result, nil } // GetAlbumTrailer gets album trailer (GET /albums/{id}/trailer). func (c *Client) GetAlbumTrailer(ctx context.Context, albumID string) (*models.AlbumTrailer, error) { var result models.AlbumTrailer if err := c.request.Get(ctx, fmt.Sprintf("/albums/%s/trailer", albumID), nil, &result); err != nil { return nil, err } result.SetClient(c) return &result, nil }