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
showList :: [CreateActivityOptions] -> ShowS
$cshowList :: [CreateActivityOptions] -> ShowS
show :: CreateActivityOptions -> String
$cshow :: CreateActivityOptions -> String
showsPrec :: Int -> CreateActivityOptions -> ShowS
$cshowsPrec :: Int -> CreateActivityOptions -> ShowS
Show
instance Default CreateActivityOptions where
def :: CreateActivityOptions
def = CreateActivityOptions :: Maybe String -> Maybe Double -> CreateActivityOptions
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 (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))
]
data 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
showList :: [GetActivityOptions] -> ShowS
$cshowList :: [GetActivityOptions] -> ShowS
show :: GetActivityOptions -> String
$cshow :: GetActivityOptions -> String
showsPrec :: Int -> GetActivityOptions -> ShowS
$cshowsPrec :: Int -> GetActivityOptions -> ShowS
Show
instance Default GetActivityOptions where
def :: GetActivityOptions
def = GetActivityOptions :: Bool -> GetActivityOptions
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
showList :: [UpdateActivityOptions] -> ShowS
$cshowList :: [UpdateActivityOptions] -> ShowS
show :: UpdateActivityOptions -> String
$cshow :: UpdateActivityOptions -> String
showsPrec :: Int -> UpdateActivityOptions -> ShowS
$cshowsPrec :: Int -> UpdateActivityOptions -> ShowS
Show
instance Default UpdateActivityOptions where
def :: UpdateActivityOptions
def = UpdateActivityOptions :: Maybe String
-> Maybe ActivityType
-> Maybe Bool
-> Maybe Bool
-> Maybe Bool
-> Maybe String
-> Maybe String
-> UpdateActivityOptions
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 (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 (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 (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 (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
showList :: [GetCurrentActivitiesOptions] -> ShowS
$cshowList :: [GetCurrentActivitiesOptions] -> ShowS
show :: GetCurrentActivitiesOptions -> String
$cshow :: GetCurrentActivitiesOptions -> String
showsPrec :: Int -> GetCurrentActivitiesOptions -> ShowS
$cshowsPrec :: Int -> GetCurrentActivitiesOptions -> ShowS
Show
instance Default GetCurrentActivitiesOptions where
def :: GetCurrentActivitiesOptions
def = GetCurrentActivitiesOptions :: Maybe UTCTime
-> Maybe UTCTime
-> Integer
-> Integer
-> GetCurrentActivitiesOptions
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 (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 (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