lib/sptfy/track.ex

defmodule Sptfy.Track do
  @moduledoc """
  https://developer.spotify.com/documentation/web-api/reference-beta/#category-tracks
  """

  use Sptfy.Client

  alias Sptfy.Object.{AudioFeature, FullTrack}

  get "/v1/tracks",
    as: :get_tracks,
    query: [{:ids, required: true}, :market],
    mapping: {:list, module: FullTrack, key: "tracks"}

  get "/v1/tracks/:id",
    as: :get_track,
    query: [:market],
    mapping: {:single, module: FullTrack}

  get "/v1/audio-features",
    as: :get_tracks_audio_features,
    query: [{:ids, required: true}],
    mapping: {:list, module: AudioFeature, key: "audio_features"}

  get "/v1/audio-features/:id",
    as: :get_track_audio_features,
    query: [],
    mapping: {:single, module: AudioFeature}

  get "/v1/audio-analysis/:id",
    as: :get_audio_analysis,
    query: [],
    mapping: :as_is,
    return_type: {:ok, map()}
end