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