-- | '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)) ]