-- |
module Strive.Actions.Clubs
( getClub
, getCurrentClubs
, getClubMembers
, getClubActivities
, joinClub
, leaveClub
) where
import Data.ByteString.Char8 (unpack)
import Data.ByteString.Lazy (toStrict)
import Network.HTTP.Conduit (responseBody, responseStatus)
import Network.HTTP.Types (Query, methodPost, ok200, toQuery)
import Strive.Client (Client)
import Strive.Internal.HTTP (buildRequest, get, performRequest)
import Strive.Options (GetClubActivitiesOptions, GetClubMembersOptions)
import Strive.Types (ActivitySummary, AthleteSummary, ClubDetailed,
ClubSummary)
-- |
getClub :: Client -> Integer -> IO (Either String ClubDetailed)
getClub client clubId = get client resource query
where
resource = "api/v3/clubs/" ++ show clubId
query = [] :: Query
-- |
getCurrentClubs :: Client -> IO (Either String [ClubSummary])
getCurrentClubs client = get client resource query
where
resource = "api/v3/athlete/clubs"
query = [] :: Query
-- |
getClubMembers :: Client -> Integer -> GetClubMembersOptions -> IO (Either String [AthleteSummary])
getClubMembers client clubId options = get client resource query
where
resource = "api/v3/clubs/" ++ show clubId ++ "/members"
query = toQuery options
-- |
getClubActivities :: Client -> Integer -> GetClubActivitiesOptions -> IO (Either String [ActivitySummary])
getClubActivities client clubId options = get client resource query
where
resource = "api/v3/clubs/" ++ show clubId ++ "/activities"
query = toQuery options
-- |
joinClub :: Client -> Integer -> IO (Either String ())
joinClub client clubId = do
request <- buildRequest methodPost client resource query
response <- performRequest client request
return (if responseStatus response == ok200
then Right ()
else Left ((unpack . toStrict . responseBody) response))
where
resource = "api/v3/clubs/" ++ show clubId ++ "/join"
query = [] :: Query
-- |
leaveClub :: Client -> Integer -> IO (Either String ())
leaveClub client clubId = do
request <- buildRequest methodPost client resource query
response <- performRequest client request
return (if responseStatus response == ok200
then Right ()
else Left ((unpack . toStrict . responseBody) response))
where
resource = "api/v3/clubs/" ++ show clubId ++ "/leave"
query = [] :: Query