module Strive.Options 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 Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds)
import Network.HTTP.Types.QueryLike (QueryLike, toQuery)
data PaginationOptions = PaginationOptions
{ paginationOptions_page :: Integer
, paginationOptions_perPage :: Integer
} deriving Show
instance Default PaginationOptions where
def = PaginationOptions
{ paginationOptions_page = 1
, paginationOptions_perPage = 200
}
instance QueryLike PaginationOptions where
toQuery options = toQuery
[ ("page", show (paginationOptions_page options))
, ("per_page", show (paginationOptions_perPage options))
]
data BuildAuthorizeUrlOptions = BuildAuthorizeUrlOptions
{ buildAuthorizeUrlOptions_approvalPrompt :: Bool
, buildAuthorizeUrlOptions_privateScope :: Bool
, buildAuthorizeUrlOptions_writeScope :: Bool
, buildAuthorizeUrlOptions_state :: String
} deriving Show
instance Default BuildAuthorizeUrlOptions where
def = BuildAuthorizeUrlOptions
{ buildAuthorizeUrlOptions_approvalPrompt = False
, buildAuthorizeUrlOptions_privateScope = False
, buildAuthorizeUrlOptions_writeScope = False
, buildAuthorizeUrlOptions_state = ""
}
instance QueryLike BuildAuthorizeUrlOptions where
toQuery options = toQuery
[ ("approval_prompt", unpack (toStrict (encode (buildAuthorizeUrlOptions_approvalPrompt options))))
, ("scope", scopes)
, ("state", buildAuthorizeUrlOptions_state options)
]
where
scopes = unwords
[ if buildAuthorizeUrlOptions_privateScope options then "view_private" else ""
, if buildAuthorizeUrlOptions_writeScope options then "write" else ""
]
data UpdateCurrentAthleteOptions = UpdateCurrentAthleteOptions
{ updateCurrentAthleteOptions_city :: Maybe String
, updateCurrentAthleteOptions_state :: Maybe String
, updateCurrentAthleteOptions_country :: Maybe String
, updateCurrentAthleteOptions_sex :: Maybe Char
, updateCurrentAthleteOptions_weight :: Maybe Double
} deriving Show
instance Default UpdateCurrentAthleteOptions where
def = UpdateCurrentAthleteOptions
{ updateCurrentAthleteOptions_city = Nothing
, updateCurrentAthleteOptions_state = Nothing
, updateCurrentAthleteOptions_country = Nothing
, updateCurrentAthleteOptions_sex = Nothing
, updateCurrentAthleteOptions_weight = Nothing
}
instance QueryLike UpdateCurrentAthleteOptions where
toQuery options = toQuery
[ ("city", updateCurrentAthleteOptions_city options)
, ("state", updateCurrentAthleteOptions_state options)
, ("country", updateCurrentAthleteOptions_country options)
, ("sex", fmap (: []) (updateCurrentAthleteOptions_sex options))
, ("weight", fmap show (updateCurrentAthleteOptions_weight options))
]
type GetAthleteCrsOptions = PaginationOptions
type GetCurrentFriendsOptions = PaginationOptions
type GetFriendsOptions = PaginationOptions
type GetCurrentFollowersOptions = PaginationOptions
type GetFollowersOptions = PaginationOptions
type GetCommonFriendsOptions = PaginationOptions
data CreateActivityOptions = CreateActivityOptions
{ createActivityOptions_description :: Maybe String
, createActivityOptions_distance :: Maybe Double
} deriving Show
instance Default CreateActivityOptions where
def = CreateActivityOptions
{ createActivityOptions_description = Nothing
, createActivityOptions_distance = Nothing
}
instance QueryLike CreateActivityOptions where
toQuery options = toQuery
[ ("description", createActivityOptions_description options)
, ("distance", fmap show (createActivityOptions_distance options))
]
data GetActivityOptions = GetActivityOptions
{ getActivityOptions_allEfforts :: Bool
} deriving Show
instance Default GetActivityOptions where
def = GetActivityOptions
{ getActivityOptions_allEfforts = False
}
instance QueryLike GetActivityOptions where
toQuery options = toQuery
[ ("approval_prompt", unpack (toStrict (encode (getActivityOptions_allEfforts options))))
]
data UpdateActivityOptions = UpdateActivityOptions
{ updateActivityOptions_name :: Maybe String
, updateActivityOptions_type :: Maybe String
, updateActivityOptions_private :: Maybe Bool
, updateActivityOptions_commute :: Maybe Bool
, updateActivityOptions_trainer :: Maybe Bool
, updateActivityOptions_gearId :: Maybe String
, updateActivityOptions_description :: Maybe String
} deriving Show
instance Default UpdateActivityOptions where
def = UpdateActivityOptions
{ updateActivityOptions_name = Nothing
, updateActivityOptions_type = Nothing
, updateActivityOptions_private = Nothing
, updateActivityOptions_commute = Nothing
, updateActivityOptions_trainer = Nothing
, updateActivityOptions_gearId = Nothing
, updateActivityOptions_description = Nothing
}
instance QueryLike UpdateActivityOptions where
toQuery options = toQuery
[ ("name", updateActivityOptions_name options)
, ("type", updateActivityOptions_type options)
, ("private", fmap (unpack . toStrict . encode) (updateActivityOptions_private options))
, ("commute", fmap (unpack . toStrict . encode) (updateActivityOptions_commute options))
, ("trainer", fmap (unpack . toStrict . encode) (updateActivityOptions_trainer options))
, ("gear_id", updateActivityOptions_gearId options)
, ("description", updateActivityOptions_description options)
]
data GetCurrentActivitiesOptions = GetCurrentActivitiesOptions
{ getCurrentActivitiesOptions_before :: Maybe UTCTime
, getCurrentActivitiesOptions_after :: Maybe UTCTime
, getCurrentActivitiesOptions_page :: Integer
, getCurrentActivitiesOptions_perPage :: Integer
} deriving Show
instance Default GetCurrentActivitiesOptions where
def = GetCurrentActivitiesOptions
{ getCurrentActivitiesOptions_before = Nothing
, getCurrentActivitiesOptions_after = Nothing
, getCurrentActivitiesOptions_page = 1
, getCurrentActivitiesOptions_perPage = 200
}
instance QueryLike GetCurrentActivitiesOptions where
toQuery options = toQuery
[ ("before", fmap (show . utcTimeToPOSIXSeconds) (getCurrentActivitiesOptions_before options))
, ("after", fmap (show . utcTimeToPOSIXSeconds) (getCurrentActivitiesOptions_after options))
, ("page", Just (show (getCurrentActivitiesOptions_page options)))
, ("per_page", Just (show (getCurrentActivitiesOptions_perPage options)))
]
type GetFeedOptions = PaginationOptions
data GetActivityCommentsOptions = GetActivityCommentsOptions
{ getActivityCommentsOptions_markdown :: Bool
, getActivityCommentsOptions_page :: Integer
, getActivityCommentsOptions_perPage :: Integer
} deriving Show
instance Default GetActivityCommentsOptions where
def = GetActivityCommentsOptions
{ getActivityCommentsOptions_markdown = False
, getActivityCommentsOptions_page = 1
, getActivityCommentsOptions_perPage = 200
}
instance QueryLike GetActivityCommentsOptions where
toQuery options = toQuery
[ ("before", unpack (toStrict (encode (getActivityCommentsOptions_markdown options))))
, ("page", show (getActivityCommentsOptions_page options))
, ("per_page", show (getActivityCommentsOptions_perPage options))
]
type GetActivityKudoersOptions = PaginationOptions
type GetClubMembersOptions = PaginationOptions
type GetClubActivitiesOptions = PaginationOptions
type GetStarredSegmentsOptions = PaginationOptions
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)))
]
data GetSegmentLeaderboardOptions = GetSegmentLeaderboardOptions
{ getSegmentLeaderboard_gender :: Maybe Char
, getSegmentLeaderboard_ageGroup :: Maybe String
, getSegmentLeaderboard_weightClass :: Maybe String
, getSegmentLeaderboard_following :: Maybe Bool
, getSegmentLeaderboard_clubId :: Maybe Integer
, getSegmentLeaderboard_dateRange :: Maybe String
, getSegmentLeaderboard_page :: Integer
, getSegmentLeaderboard_perPage :: Integer
} deriving Show
instance Default GetSegmentLeaderboardOptions where
def = GetSegmentLeaderboardOptions
{ getSegmentLeaderboard_gender = Nothing
, getSegmentLeaderboard_ageGroup = Nothing
, getSegmentLeaderboard_weightClass = Nothing
, getSegmentLeaderboard_following = Nothing
, getSegmentLeaderboard_clubId = Nothing
, getSegmentLeaderboard_dateRange = Nothing
, getSegmentLeaderboard_page = 1
, getSegmentLeaderboard_perPage = 200
}
instance QueryLike GetSegmentLeaderboardOptions where
toQuery options = toQuery
[ ("gender", fmap (: []) (getSegmentLeaderboard_gender options))
, ("age_group", getSegmentLeaderboard_ageGroup options)
, ("weight_class", getSegmentLeaderboard_weightClass options)
, ("following", fmap (unpack . toStrict . encode) (getSegmentLeaderboard_following options))
, ("club_id", fmap show (getSegmentLeaderboard_clubId options))
, ("date_range", getSegmentLeaderboard_dateRange options)
, ("page", Just (show (getSegmentLeaderboard_page options)))
, ("per_page", Just (show (getSegmentLeaderboard_perPage options)))
]
data ExploreSegmentsOptions = ExploreSegmentsOptions
{ exploreSegmentsOptions_activityType :: String
, 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", exploreSegmentsOptions_activityType options)
, ("min_cat", show (exploreSegmentsOptions_minCat options))
, ("max_cat", show (exploreSegmentsOptions_maxCat options))
]
data GetStreamsOptions = GetStreamsOptions
{ getStreamsOptions_resolution :: Maybe String
, getStreamsOptions_seriesType :: String
} deriving Show
instance Default GetStreamsOptions where
def = GetStreamsOptions
{ getStreamsOptions_resolution = Nothing
, getStreamsOptions_seriesType = "distance"
}
instance QueryLike GetStreamsOptions where
toQuery options = toQuery
[ ("resolution", getStreamsOptions_resolution options)
, ("distance", Just (getStreamsOptions_seriesType options))
]
data UploadActivityOptions = UploadActivityOptions
{ uploadActivityOptions_activityType :: Maybe String
, uploadActivityOptions_name :: Maybe String
, uploadActivityOptions_description :: Maybe String
, uploadActivityOptions_private :: Bool
, uploadActivityOptions_trainer :: Bool
, uploadActivityOptions_externalId :: Maybe String
} deriving Show
instance Default UploadActivityOptions where
def = UploadActivityOptions
{ uploadActivityOptions_activityType = Nothing
, uploadActivityOptions_name = Nothing
, uploadActivityOptions_description = Nothing
, uploadActivityOptions_private = False
, uploadActivityOptions_trainer = False
, uploadActivityOptions_externalId = Nothing
}
instance QueryLike UploadActivityOptions where
toQuery options = toQuery
[ ("activity_type", uploadActivityOptions_activityType options)
, ("name", uploadActivityOptions_name options)
, ("description", uploadActivityOptions_description options)
, ("private", Just (show (fromEnum (uploadActivityOptions_private options))))
, ("trainer", Just (show (fromEnum (uploadActivityOptions_trainer options))))
, ("external_id", uploadActivityOptions_externalId options)
]