module Strive.Options.Activities
( CreateActivityOptions (..),
GetActivityOptions (..),
UpdateActivityOptions (..),
GetCurrentActivitiesOptions (..),
GetRelatedActivitiesOptions,
GetFeedOptions,
)
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, toQuery)
import Strive.Enums (ActivityType)
import Strive.Internal.Options (PaginationOptions)
data CreateActivityOptions = CreateActivityOptions
{ CreateActivityOptions -> Maybe String
createActivityOptions_description :: Maybe String,
CreateActivityOptions -> Maybe Double
createActivityOptions_distance :: Maybe Double
}
deriving (Int -> CreateActivityOptions -> ShowS
[CreateActivityOptions] -> ShowS
CreateActivityOptions -> String
(Int -> CreateActivityOptions -> ShowS)
-> (CreateActivityOptions -> String)
-> ([CreateActivityOptions] -> ShowS)
-> Show CreateActivityOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> CreateActivityOptions -> ShowS
showsPrec :: Int -> CreateActivityOptions -> ShowS
$cshow :: CreateActivityOptions -> String
show :: CreateActivityOptions -> String
$cshowList :: [CreateActivityOptions] -> ShowS
showList :: [CreateActivityOptions] -> ShowS
Show)
instance Default CreateActivityOptions where
def :: CreateActivityOptions
def =
CreateActivityOptions
{ createActivityOptions_description :: Maybe String
createActivityOptions_description = Maybe String
forall a. Maybe a
Nothing,
createActivityOptions_distance :: Maybe Double
createActivityOptions_distance = Maybe Double
forall a. Maybe a
Nothing
}
instance QueryLike CreateActivityOptions where
toQuery :: CreateActivityOptions -> Query
toQuery CreateActivityOptions
options =
[(String, Maybe String)] -> Query
forall a. QueryLike a => a -> Query
toQuery
[ (String
"description", CreateActivityOptions -> Maybe String
createActivityOptions_description CreateActivityOptions
options),
(String
"distance", (Double -> String) -> Maybe Double -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Double -> String
forall a. Show a => a -> String
show (CreateActivityOptions -> Maybe Double
createActivityOptions_distance CreateActivityOptions
options))
]
newtype GetActivityOptions = GetActivityOptions
{ GetActivityOptions -> Bool
getActivityOptions_allEfforts :: Bool
}
deriving (Int -> GetActivityOptions -> ShowS
[GetActivityOptions] -> ShowS
GetActivityOptions -> String
(Int -> GetActivityOptions -> ShowS)
-> (GetActivityOptions -> String)
-> ([GetActivityOptions] -> ShowS)
-> Show GetActivityOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GetActivityOptions -> ShowS
showsPrec :: Int -> GetActivityOptions -> ShowS
$cshow :: GetActivityOptions -> String
show :: GetActivityOptions -> String
$cshowList :: [GetActivityOptions] -> ShowS
showList :: [GetActivityOptions] -> ShowS
Show)
instance Default GetActivityOptions where
def :: GetActivityOptions
def = GetActivityOptions {getActivityOptions_allEfforts :: Bool
getActivityOptions_allEfforts = Bool
False}
instance QueryLike GetActivityOptions where
toQuery :: GetActivityOptions -> Query
toQuery GetActivityOptions
options =
[(String, String)] -> Query
forall a. QueryLike a => a -> Query
toQuery
[ ( String
"approval_prompt",
ByteString -> String
unpack (ByteString -> ByteString
toStrict (Bool -> ByteString
forall a. ToJSON a => a -> ByteString
encode (GetActivityOptions -> Bool
getActivityOptions_allEfforts GetActivityOptions
options)))
)
]
data UpdateActivityOptions = UpdateActivityOptions
{ UpdateActivityOptions -> Maybe String
updateActivityOptions_name :: Maybe String,
UpdateActivityOptions -> Maybe ActivityType
updateActivityOptions_type :: Maybe ActivityType,
UpdateActivityOptions -> Maybe Bool
updateActivityOptions_private :: Maybe Bool,
UpdateActivityOptions -> Maybe Bool
updateActivityOptions_commute :: Maybe Bool,
UpdateActivityOptions -> Maybe Bool
updateActivityOptions_trainer :: Maybe Bool,
UpdateActivityOptions -> Maybe String
updateActivityOptions_gearId :: Maybe String,
UpdateActivityOptions -> Maybe String
updateActivityOptions_description :: Maybe String
}
deriving (Int -> UpdateActivityOptions -> ShowS
[UpdateActivityOptions] -> ShowS
UpdateActivityOptions -> String
(Int -> UpdateActivityOptions -> ShowS)
-> (UpdateActivityOptions -> String)
-> ([UpdateActivityOptions] -> ShowS)
-> Show UpdateActivityOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> UpdateActivityOptions -> ShowS
showsPrec :: Int -> UpdateActivityOptions -> ShowS
$cshow :: UpdateActivityOptions -> String
show :: UpdateActivityOptions -> String
$cshowList :: [UpdateActivityOptions] -> ShowS
showList :: [UpdateActivityOptions] -> ShowS
Show)
instance Default UpdateActivityOptions where
def :: UpdateActivityOptions
def =
UpdateActivityOptions
{ updateActivityOptions_name :: Maybe String
updateActivityOptions_name = Maybe String
forall a. Maybe a
Nothing,
updateActivityOptions_type :: Maybe ActivityType
updateActivityOptions_type = Maybe ActivityType
forall a. Maybe a
Nothing,
updateActivityOptions_private :: Maybe Bool
updateActivityOptions_private = Maybe Bool
forall a. Maybe a
Nothing,
updateActivityOptions_commute :: Maybe Bool
updateActivityOptions_commute = Maybe Bool
forall a. Maybe a
Nothing,
updateActivityOptions_trainer :: Maybe Bool
updateActivityOptions_trainer = Maybe Bool
forall a. Maybe a
Nothing,
updateActivityOptions_gearId :: Maybe String
updateActivityOptions_gearId = Maybe String
forall a. Maybe a
Nothing,
updateActivityOptions_description :: Maybe String
updateActivityOptions_description = Maybe String
forall a. Maybe a
Nothing
}
instance QueryLike UpdateActivityOptions where
toQuery :: UpdateActivityOptions -> Query
toQuery UpdateActivityOptions
options =
[(String, Maybe String)] -> Query
forall a. QueryLike a => a -> Query
toQuery
[ (String
"name", UpdateActivityOptions -> Maybe String
updateActivityOptions_name UpdateActivityOptions
options),
(String
"type", (ActivityType -> String) -> Maybe ActivityType -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap ActivityType -> String
forall a. Show a => a -> String
show (UpdateActivityOptions -> Maybe ActivityType
updateActivityOptions_type UpdateActivityOptions
options)),
( String
"private",
(Bool -> String) -> Maybe Bool -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
(ByteString -> String
unpack (ByteString -> String) -> (Bool -> ByteString) -> Bool -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
toStrict (ByteString -> ByteString)
-> (Bool -> ByteString) -> Bool -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> ByteString
forall a. ToJSON a => a -> ByteString
encode)
(UpdateActivityOptions -> Maybe Bool
updateActivityOptions_private UpdateActivityOptions
options)
),
( String
"commute",
(Bool -> String) -> Maybe Bool -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
(ByteString -> String
unpack (ByteString -> String) -> (Bool -> ByteString) -> Bool -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
toStrict (ByteString -> ByteString)
-> (Bool -> ByteString) -> Bool -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> ByteString
forall a. ToJSON a => a -> ByteString
encode)
(UpdateActivityOptions -> Maybe Bool
updateActivityOptions_commute UpdateActivityOptions
options)
),
( String
"trainer",
(Bool -> String) -> Maybe Bool -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
(ByteString -> String
unpack (ByteString -> String) -> (Bool -> ByteString) -> Bool -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> ByteString
toStrict (ByteString -> ByteString)
-> (Bool -> ByteString) -> Bool -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Bool -> ByteString
forall a. ToJSON a => a -> ByteString
encode)
(UpdateActivityOptions -> Maybe Bool
updateActivityOptions_trainer UpdateActivityOptions
options)
),
(String
"gear_id", UpdateActivityOptions -> Maybe String
updateActivityOptions_gearId UpdateActivityOptions
options),
(String
"description", UpdateActivityOptions -> Maybe String
updateActivityOptions_description UpdateActivityOptions
options)
]
data GetCurrentActivitiesOptions = GetCurrentActivitiesOptions
{ GetCurrentActivitiesOptions -> Maybe UTCTime
getCurrentActivitiesOptions_before :: Maybe UTCTime,
GetCurrentActivitiesOptions -> Maybe UTCTime
getCurrentActivitiesOptions_after :: Maybe UTCTime,
GetCurrentActivitiesOptions -> Integer
getCurrentActivitiesOptions_page :: Integer,
GetCurrentActivitiesOptions -> Integer
getCurrentActivitiesOptions_perPage :: Integer
}
deriving (Int -> GetCurrentActivitiesOptions -> ShowS
[GetCurrentActivitiesOptions] -> ShowS
GetCurrentActivitiesOptions -> String
(Int -> GetCurrentActivitiesOptions -> ShowS)
-> (GetCurrentActivitiesOptions -> String)
-> ([GetCurrentActivitiesOptions] -> ShowS)
-> Show GetCurrentActivitiesOptions
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GetCurrentActivitiesOptions -> ShowS
showsPrec :: Int -> GetCurrentActivitiesOptions -> ShowS
$cshow :: GetCurrentActivitiesOptions -> String
show :: GetCurrentActivitiesOptions -> String
$cshowList :: [GetCurrentActivitiesOptions] -> ShowS
showList :: [GetCurrentActivitiesOptions] -> ShowS
Show)
instance Default GetCurrentActivitiesOptions where
def :: GetCurrentActivitiesOptions
def =
GetCurrentActivitiesOptions
{ getCurrentActivitiesOptions_before :: Maybe UTCTime
getCurrentActivitiesOptions_before = Maybe UTCTime
forall a. Maybe a
Nothing,
getCurrentActivitiesOptions_after :: Maybe UTCTime
getCurrentActivitiesOptions_after = Maybe UTCTime
forall a. Maybe a
Nothing,
getCurrentActivitiesOptions_page :: Integer
getCurrentActivitiesOptions_page = Integer
1,
getCurrentActivitiesOptions_perPage :: Integer
getCurrentActivitiesOptions_perPage = Integer
200
}
instance QueryLike GetCurrentActivitiesOptions where
toQuery :: GetCurrentActivitiesOptions -> Query
toQuery GetCurrentActivitiesOptions
options =
[(String, Maybe String)] -> Query
forall a. QueryLike a => a -> Query
toQuery
[ ( String
"before",
(UTCTime -> String) -> Maybe UTCTime -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
(POSIXTime -> String
forall a. Show a => a -> String
show (POSIXTime -> String)
-> (UTCTime -> POSIXTime) -> UTCTime -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> POSIXTime
utcTimeToPOSIXSeconds)
(GetCurrentActivitiesOptions -> Maybe UTCTime
getCurrentActivitiesOptions_before GetCurrentActivitiesOptions
options)
),
( String
"after",
(UTCTime -> String) -> Maybe UTCTime -> Maybe String
forall a b. (a -> b) -> Maybe a -> Maybe b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap
(POSIXTime -> String
forall a. Show a => a -> String
show (POSIXTime -> String)
-> (UTCTime -> POSIXTime) -> UTCTime -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> POSIXTime
utcTimeToPOSIXSeconds)
(GetCurrentActivitiesOptions -> Maybe UTCTime
getCurrentActivitiesOptions_after GetCurrentActivitiesOptions
options)
),
(String
"page", String -> Maybe String
forall a. a -> Maybe a
Just (Integer -> String
forall a. Show a => a -> String
show (GetCurrentActivitiesOptions -> Integer
getCurrentActivitiesOptions_page GetCurrentActivitiesOptions
options))),
(String
"per_page", String -> Maybe String
forall a. a -> Maybe a
Just (Integer -> String
forall a. Show a => a -> String
show (GetCurrentActivitiesOptions -> Integer
getCurrentActivitiesOptions_perPage GetCurrentActivitiesOptions
options)))
]
type GetRelatedActivitiesOptions = PaginationOptions
type GetFeedOptions = PaginationOptions