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