packages feed

spotify-0.1.0.0: servant/Spotify/Servant/Playlists.hs

module Spotify.Servant.Playlists where

import Spotify.Servant.Core
import Spotify.Types.Internal.CustomJSON
import Spotify.Types.Misc
import Spotify.Types.Playlists
import Spotify.Types.Simple

import Data.Aeson (FromJSON, ToJSON)
import Data.Text (Text)
import GHC.Generics (Generic)
import Servant.API (
    Capture,
    type (:>),
 )

type GetPlaylist =
    "playlists"
        :> Capture "playlist_id" PlaylistID
        :> SpotGet Playlist

type AddToPlaylist =
    "playlists"
        :> Capture "playlist_id" PlaylistID
        :> "tracks"
        :> SpotBody AddToPlaylistBody
        :> SpotPostCreated AddToPlaylistResponse
data AddToPlaylistBody = AddToPlaylistBody
    { position :: Maybe Int
    , uris :: [URI]
    }
    deriving (Generic)
    deriving (ToJSON)
newtype AddToPlaylistResponse = AddToPlaylistResponse
    { snapshotId :: SnapshotID
    }
    deriving (Generic)
    deriving (FromJSON) via CustomJSON AddToPlaylistResponse

type GetMyPlaylists =
    "me"
        :> "playlists"
        :> SpotPaging PlaylistSimple

type CreatePlaylist =
    "users"
        :> Capture "user_id" UserID
        :> "playlists"
        :> SpotBody CreatePlaylistOpts
        :> SpotPostCreated PlaylistSimple
data CreatePlaylistOpts = CreatePlaylistOpts
    { name :: Text
    , public :: Bool
    , collaborative :: Bool
    , description :: Text
    }
    deriving (Generic)
    deriving (ToJSON)