{-# LANGUAGE TemplateHaskell #-}
module Strive.Types.Athletes
( AthleteDetailed (..)
, AthleteSummary (..)
, AthleteMeta (..)
, ActivityTotals (..)
, AthleteStats (..)
) where
import Data.Aeson.TH (deriveFromJSON)
import Data.Text (Text)
import Data.Time.Clock (UTCTime)
import Strive.Enums (Gender, MeasurementPreference, ResourceState)
import Strive.Internal.TH (options)
import Strive.Types.Clubs (ClubSummary)
import Strive.Types.Gear (GearSummary)
data AthleteDetailed = AthleteDetailed
{ athleteDetailed_bikes :: [GearSummary]
, athleteDetailed_city :: Text
, athleteDetailed_clubs :: [ClubSummary]
, athleteDetailed_country :: Text
, athleteDetailed_createdAt :: UTCTime
, athleteDetailed_datePreference :: Text
, athleteDetailed_email :: Text
, athleteDetailed_firstname :: Text
, athleteDetailed_follower :: Maybe Text
, athleteDetailed_followerCount :: Integer
, athleteDetailed_friend :: Maybe Text
, athleteDetailed_friendCount :: Integer
, athleteDetailed_ftp :: Maybe Integer
, athleteDetailed_id :: Integer
, athleteDetailed_lastname :: Text
, athleteDetailed_measurementPreference :: MeasurementPreference
, athleteDetailed_mutualFriendCount :: Integer
, athleteDetailed_premium :: Bool
, athleteDetailed_profile :: Text
, athleteDetailed_profileMedium :: Text
, athleteDetailed_resourceState :: ResourceState
, athleteDetailed_sex :: Maybe Gender
, athleteDetailed_shoes :: [GearSummary]
, athleteDetailed_state :: Maybe Text
, athleteDetailed_updatedAt :: UTCTime
, athleteDetailed_weight :: Maybe Double
} deriving Show
$(deriveFromJSON options ''AthleteDetailed)
data AthleteSummary = AthleteSummary
{ athleteSummary_city :: Maybe Text
, athleteSummary_country :: Maybe Text
, athleteSummary_createdAt :: UTCTime
, athleteSummary_firstname :: Text
, athleteSummary_follower :: Maybe Text
, athleteSummary_friend :: Maybe Text
, athleteSummary_id :: Integer
, athleteSummary_lastname :: Text
, athleteSummary_premium :: Bool
, athleteSummary_profile :: Text
, athleteSummary_profileMedium :: Text
, athleteSummary_resourceState :: ResourceState
, athleteSummary_sex :: Maybe Gender
, athleteSummary_state :: Maybe Text
, athleteSummary_updatedAt :: UTCTime
} deriving Show
$(deriveFromJSON options ''AthleteSummary)
data AthleteMeta = AthleteMeta
{ athleteMeta_id :: Integer
, athleteMeta_resourceState :: ResourceState
} deriving Show
$(deriveFromJSON options ''AthleteMeta)
data ActivityTotals = ActivityTotals
{ activityTotals_count :: Integer
, activityTotals_distance :: Double
, activityTotals_movingTime :: Double
, activityTotals_elapsedTime :: Double
, activityTotals_elevationGain :: Double
, activityTotals_achievementCount :: Double
} deriving Show
$(deriveFromJSON options ''ActivityTotals)
data AthleteStats = AthleteStats
{ athleteStats_biggestRideDistance :: Double
, athleteStats_biggestClimbElevationGain :: Double
, athleteStats_recentRideTotals :: ActivityTotals
, athleteStats_recentRunTotals :: ActivityTotals
, athleteStats_ytdRideTotals :: ActivityTotals
, athleteStats_ytdRunTotals :: ActivityTotals
, athleteStats_allRideTotals :: ActivityTotals
, athleteStats_allRunTotals :: ActivityTotals
} deriving Show
$(deriveFromJSON options ''AthleteStats)