-- | 'Strive.Actions.Segments' module Strive.Options.Segments ( GetStarredSegmentsOptions , GetSegmentEffortsOptions (..) , GetSegmentLeaderboardOptions (..) , ExploreSegmentsOptions (..) ) where import Data.Aeson (encode) import Data.ByteString.Char8 (unpack) import Data.ByteString.Lazy (toStrict) import Data.Default (Default, def) import Data.Time.Clock (UTCTime) import Network.HTTP.Types (QueryLike, toQuery) import Strive.Enums (AgeGroup, Gender, SegmentActivityType (Riding), WeightClass) import Strive.Internal.Options (PaginationOptions) -- | 'Strive.Actions.getStarredSegments' type GetStarredSegmentsOptions = PaginationOptions -- | 'Strive.Actions.getSegmentEfforts' data GetSegmentEffortsOptions = GetSegmentEffortsOptions { getSegmentEffortsOptions_athleteId :: Maybe Integer , getSegmentEffortsOptions_range :: Maybe (UTCTime, UTCTime) , getSegmentEffortsOptions_page :: Integer , getSegmentEffortsOptions_perPage :: Integer } deriving Show instance Default GetSegmentEffortsOptions where def = GetSegmentEffortsOptions { getSegmentEffortsOptions_athleteId = Nothing , getSegmentEffortsOptions_range = Nothing , getSegmentEffortsOptions_page = 1 , getSegmentEffortsOptions_perPage = 200 } instance QueryLike GetSegmentEffortsOptions where toQuery options = toQuery [ ("athlete_id", fmap show (getSegmentEffortsOptions_athleteId options)) , ("start_date_local", fmap (unpack . toStrict . encode . fst) (getSegmentEffortsOptions_range options)) , ("end_date_local", fmap (unpack . toStrict . encode . snd) (getSegmentEffortsOptions_range options)) , ("page", Just (show (getSegmentEffortsOptions_page options))) , ("per_page", Just (show (getSegmentEffortsOptions_perPage options))) ] -- | 'Strive.Actions.getSegmentLeaderboard' data GetSegmentLeaderboardOptions = GetSegmentLeaderboardOptions { getSegmentLeaderboardOptions_gender :: Maybe Gender , getSegmentLeaderboardOptions_ageGroup :: Maybe AgeGroup , getSegmentLeaderboardOptions_weightClass :: Maybe WeightClass , getSegmentLeaderboardOptions_following :: Maybe Bool , getSegmentLeaderboardOptions_clubId :: Maybe Integer , getSegmentLeaderboardOptions_dateRange :: Maybe String , getSegmentLeaderboardOptions_contextEntries :: Maybe Integer , getSegmentLeaderboardOptions_page :: Integer , getSegmentLeaderboardOptions_perPage :: Integer } deriving Show instance Default GetSegmentLeaderboardOptions where def = GetSegmentLeaderboardOptions { getSegmentLeaderboardOptions_gender = Nothing , getSegmentLeaderboardOptions_ageGroup = Nothing , getSegmentLeaderboardOptions_weightClass = Nothing , getSegmentLeaderboardOptions_following = Nothing , getSegmentLeaderboardOptions_clubId = Nothing , getSegmentLeaderboardOptions_dateRange = Nothing , getSegmentLeaderboardOptions_contextEntries = Nothing , getSegmentLeaderboardOptions_page = 1 , getSegmentLeaderboardOptions_perPage = 200 } instance QueryLike GetSegmentLeaderboardOptions where toQuery options = toQuery [ ("gender", fmap show (getSegmentLeaderboardOptions_gender options)) , ("age_group", fmap show (getSegmentLeaderboardOptions_ageGroup options)) , ("weight_class", fmap show (getSegmentLeaderboardOptions_weightClass options)) , ("following", fmap (unpack . toStrict . encode) (getSegmentLeaderboardOptions_following options)) , ("club_id", fmap show (getSegmentLeaderboardOptions_clubId options)) , ("date_range", getSegmentLeaderboardOptions_dateRange options) , ("context_entries", fmap show (getSegmentLeaderboardOptions_contextEntries options)) , ("page", Just (show (getSegmentLeaderboardOptions_page options))) , ("per_page", Just (show (getSegmentLeaderboardOptions_perPage options))) ] -- | 'Strive.Actions.exploreSegments' data ExploreSegmentsOptions = ExploreSegmentsOptions { exploreSegmentsOptions_activityType :: SegmentActivityType , exploreSegmentsOptions_minCat :: Integer , exploreSegmentsOptions_maxCat :: Integer } deriving Show instance Default ExploreSegmentsOptions where def = ExploreSegmentsOptions { exploreSegmentsOptions_activityType = Riding , exploreSegmentsOptions_minCat = 0 , exploreSegmentsOptions_maxCat = 5 } instance QueryLike ExploreSegmentsOptions where toQuery options = toQuery [ ("activity_type", show (exploreSegmentsOptions_activityType options)) , ("min_cat", show (exploreSegmentsOptions_minCat options)) , ("max_cat", show (exploreSegmentsOptions_maxCat options)) ]