Skip to content

Commit f4f0337

Browse files
committed
[BOOK-40] feat: Implement NetworkProvider
1 parent 50889c5 commit f4f0337

File tree

1 file changed

+27
-2
lines changed

1 file changed

+27
-2
lines changed
Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,39 @@
11
// Copyright © 2025 Booket. All rights reserved
22

3-
import Foundation
43
import BKData
4+
import Foundation
5+
6+
public protocol NetworkRequestable {
7+
func data(for request: URLRequest) async throws -> (Data, URLResponse)
8+
}
59

610
public struct DefaultNetworkProvider: NetworkProvider {
11+
private let requestor: NetworkRequestable
12+
13+
init(requestor: NetworkRequestable) {
14+
self.requestor = requestor
15+
}
16+
717
@discardableResult
818
public func request<T: Decodable>(
919
target: RequestTarget,
1020
type: T.Type
1121
) async throws -> T {
12-
22+
let request = try target.makeURLRequest()
23+
let (data, response) = try await requestor.data(for: request)
24+
25+
guard let httpResponse = response as? HTTPURLResponse else {
26+
throw NetworkError.invalidResponse
27+
}
28+
29+
guard let responseDTO = try? JSONDecoder().decode(T.self, from: data) else {
30+
switch httpResponse.statusCode {
31+
case 401: throw NetworkError.unauthorized
32+
case 500...599: throw NetworkError.internalServerError
33+
default: throw NetworkError.invalidResponse
34+
}
35+
}
36+
37+
return responseDTO
1338
}
1439
}

0 commit comments

Comments
 (0)