-- |
module Strive.Actions.Segments
( getSegment,
getStarredSegments,
getSegmentEfforts,
getSegmentLeaderboard,
exploreSegments,
)
where
import Data.List (intercalate)
import Network.HTTP.Types (Query, toQuery)
import Strive.Aliases (Latitude, Longitude, Result, SegmentId)
import Strive.Client (Client)
import Strive.Internal.HTTP (get)
import Strive.Options
( ExploreSegmentsOptions,
GetSegmentEffortsOptions,
GetSegmentLeaderboardOptions,
GetStarredSegmentsOptions,
)
import Strive.Types
( EffortDetailed,
SegmentDetailed,
SegmentExplorerResponse,
SegmentLeaderboardResponse,
SegmentSummary,
)
-- |
getSegment :: Client -> SegmentId -> IO (Result SegmentDetailed)
getSegment client segmentId = get client resource query
where
resource = "api/v3/segments/" <> show segmentId
query = [] :: Query
-- |
getStarredSegments ::
Client -> GetStarredSegmentsOptions -> IO (Result [SegmentSummary])
getStarredSegments client options = get client resource query
where
resource = "api/v3/segments/starred"
query = toQuery options
-- |
getSegmentEfforts ::
Client ->
SegmentId ->
GetSegmentEffortsOptions ->
IO (Result [EffortDetailed])
getSegmentEfforts client segmentId options = get client resource query
where
resource = "api/v3/segments/" <> show segmentId <> "/all_efforts"
query = toQuery options
-- |
getSegmentLeaderboard ::
Client ->
SegmentId ->
GetSegmentLeaderboardOptions ->
IO (Result SegmentLeaderboardResponse)
getSegmentLeaderboard client segmentId options = get client resource query
where
resource = "api/v3/segments/" <> show segmentId <> "/leaderboard"
query = toQuery options
-- |
exploreSegments ::
Client ->
(Latitude, Longitude, Latitude, Longitude) ->
ExploreSegmentsOptions ->
IO (Result SegmentExplorerResponse)
exploreSegments client (south, west, north, east) options =
get
client
resource
query
where
resource = "api/v3/segments/explore"
query =
toQuery
[("bounds", intercalate "," (fmap show [south, west, north, east]))]
<> toQuery options