Skip to content

Commit 26f13ea

Browse files
authored
Merge pull request #1 from PodiumSDK/interval_endpoint
Add Intervals endpoint
2 parents 2850483 + 4e659b6 commit 26f13ea

5 files changed

Lines changed: 99 additions & 0 deletions

File tree

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//
2+
// Endpoints+Intervale.swift
3+
// PodiumRequestsClient
4+
//
5+
// Created by Raphael Lecoq on 1/5/26.
6+
//
7+
8+
import Foundation
9+
10+
extension Endpoints {
11+
enum Interval {
12+
/// Get all interval updates for a specific session.
13+
/// - Parameters:
14+
/// - sessionKey The unique session key to get all the interval updates.
15+
case getAll(sessionKey: Int)
16+
}
17+
}
18+
19+
extension Endpoints.Interval: PodiumEndpoint {
20+
var path: String {
21+
switch self {
22+
case .getAll(let sessionKey):
23+
"/sessions/\(sessionKey)/intervals"
24+
}
25+
}
26+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
//
2+
// IntervalDomain.swift
3+
// PodiumRequestsClient
4+
//
5+
// Created by Raphael Lecoq on 1/5/26.
6+
//
7+
8+
import Foundation
9+
10+
struct IntervalDomain: Decodable {
11+
let date: Date
12+
let driver: Int
13+
let interval: Float
14+
let leader: Float
15+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
//
2+
// IntervalModel.swift
3+
// PodiumRequestsClient
4+
//
5+
// Created by Raphael Lecoq on 1/5/26.
6+
//
7+
8+
import Foundation
9+
10+
public struct IntervalModel: Equatable {
11+
let date: Date
12+
let driver: Int
13+
let interval: Float
14+
let leader: Float
15+
16+
public init(date: Date, driver: Int, interval: Float, leader: Float) {
17+
self.date = date
18+
self.driver = driver
19+
self.interval = interval
20+
self.leader = leader
21+
}
22+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
//
2+
// IntervalMapper.swift
3+
// PodiumRequestsClient
4+
//
5+
// Created by Raphael Lecoq on 1/5/26.
6+
//
7+
8+
import Foundation
9+
10+
enum IntervalMapper {
11+
/// Maps an `IntervalDomain` instance to an `IntervalModel` instance.
12+
///
13+
/// - Parameter domain: The domain model representing interval data to map from.
14+
/// - Returns: An `IntervalModel` created from the given domain model, with all relevant properties converted accordingly.
15+
static func map(from domain: IntervalDomain) -> IntervalModel {
16+
IntervalModel(
17+
date: domain.date,
18+
driver: domain.driver,
19+
interval: domain.interval,
20+
leader: domain.leader
21+
)
22+
}
23+
}

Sources/PodiumRequestsClient/RequestsClient.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,19 @@ public final class RequestsClient: Sendable {
253253

254254
return domain.map { WeatherMapper.map(from: $0) }
255255
}
256+
257+
public func getAllIntervals(
258+
sessionKey: Int,
259+
chunk: Chunk? = nil
260+
) async throws -> [IntervalModel] {
261+
let domain = try await request(
262+
endpoint: Endpoints.Interval.getAll(sessionKey: sessionKey),
263+
type: [IntervalDomain].self,
264+
chunk: chunk
265+
)
266+
267+
return domain.map { IntervalMapper.map(from: $0) }
268+
}
256269
}
257270

258271
extension RequestsClient {

0 commit comments

Comments
 (0)