-- |
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