Skip to content

Commit 410b0fc

Browse files
committed
Рефактор
- Было: `(parameters: [String: String], mediaFiles: [BodyMaker.MediaFile]?)?` - Стало: `BodyMaker.Parts?`
1 parent 7f3f21a commit 410b0fc

File tree

5 files changed

+44
-34
lines changed

5 files changed

+44
-34
lines changed

SwiftUI-WorkoutApp/Libraries/SWNetwork/Sources/SWNetwork/BodyMaker.swift

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ import Foundation
22

33
/// Делает `body` для запроса
44
public enum BodyMaker {
5-
public struct Parameter {
5+
struct Parameter {
66
let key: String
77
let value: String
88

9-
public init(from element: Dictionary<String, String>.Element) {
9+
init(from element: Dictionary<String, String>.Element) {
1010
self.key = element.key
1111
self.value = element.value
1212
}
@@ -18,7 +18,7 @@ public enum BodyMaker {
1818
}
1919

2020
/// Делает `body` из словаря
21-
public static func makeBody(
21+
static func makeBody(
2222
with parameters: [Parameter]
2323
) -> Data? {
2424
parameters.isEmpty
@@ -30,7 +30,7 @@ public enum BodyMaker {
3030
}
3131

3232
/// Делает `body` из словаря и медиа-файлов
33-
public static func makeBodyWithMultipartForm(
33+
static func makeBodyWithMultipartForm(
3434
parameters: [Parameter],
3535
media: [MediaFile]?,
3636
boundary: String
@@ -59,9 +59,22 @@ public enum BodyMaker {
5959
}
6060
return nil
6161
}
62+
}
63+
64+
public extension BodyMaker {
65+
/// Модель для последующего создания тела запроса
66+
struct Parts {
67+
let parameters: [Parameter]
68+
let mediaFiles: [MediaFile]?
69+
70+
public init(_ parameters: [String: String], _ mediaFiles: [MediaFile]?) {
71+
self.parameters = parameters.map(Parameter.init)
72+
self.mediaFiles = mediaFiles
73+
}
74+
}
6275

6376
/// Медиа-файл для отправки на сервер
64-
public struct MediaFile: Codable, Equatable, Sendable {
77+
struct MediaFile: Codable, Equatable, Sendable {
6578
public let key: String
6679
public let filename: String
6780
public let data: Data

SwiftUI-WorkoutApp/Libraries/SWNetwork/Sources/SWNetwork/RequestComponents.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ public struct RequestComponents {
55
let queryItems: [URLQueryItem]
66
let httpMethod: HTTPMethod
77
let hasMultipartFormData: Bool
8-
let body: (parameters: [String: String], mediaFiles: [BodyMaker.MediaFile]?)?
8+
let bodyParts: BodyMaker.Parts?
99
let boundary: String
1010
let token: String?
1111

@@ -15,23 +15,23 @@ public struct RequestComponents {
1515
/// - queryItems: Параметры `query`, по умолчанию отсутствуют
1616
/// - httpMethod: Метод запроса
1717
/// - hasMultipartFormData: Есть ли в запросе файлы для отправки (в нашем случае картинки), по умолчанию `false`
18-
/// - body: Данные для тела запроса, по умолчанию `nil`
18+
/// - bodyParts: Данные для тела запроса, по умолчанию `nil`
1919
/// - boundary: `Boundary` для `body`, по умолчанию `UUID().uuidString`
2020
/// - token: Токен для авторизации, по умолчанию `nil`
2121
public init(
2222
path: String,
2323
queryItems: [URLQueryItem] = [],
2424
httpMethod: HTTPMethod,
2525
hasMultipartFormData: Bool = false,
26-
body: (parameters: [String: String], mediaFiles: [BodyMaker.MediaFile]?)? = nil,
26+
bodyParts: BodyMaker.Parts? = nil,
2727
boundary: String = UUID().uuidString,
2828
token: String? = nil
2929
) {
3030
self.path = path
3131
self.queryItems = queryItems
3232
self.httpMethod = httpMethod
3333
self.hasMultipartFormData = hasMultipartFormData
34-
self.body = body
34+
self.bodyParts = bodyParts
3535
self.boundary = boundary
3636
self.token = token
3737
}
@@ -58,12 +58,12 @@ extension RequestComponents {
5858
var allHeaders = [HTTPHeaderField]()
5959
var httpBodyData: Data?
6060

61-
if let body {
62-
let parameters = body.parameters.map(BodyMaker.Parameter.init)
61+
if let bodyParts {
62+
let parameters = bodyParts.parameters
6363
if hasMultipartFormData {
6464
httpBodyData = BodyMaker.makeBodyWithMultipartForm(
6565
parameters: parameters,
66-
media: body.mediaFiles,
66+
media: bodyParts.mediaFiles,
6767
boundary: boundary
6868
)
6969
allHeaders.append(.init(

SwiftUI-WorkoutApp/Libraries/SWNetwork/Tests/SWNetworkTests/RequestComponentsTests.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ struct RequestComponentsTests {
6161
path: "/upload",
6262
httpMethod: .post,
6363
hasMultipartFormData: true,
64-
body: (["text": "value"], nil),
64+
bodyParts: .init(["text": "value"], nil),
6565
boundary: "BOUNDARY123"
6666
)
6767
let request = try #require(components.urlRequest)
@@ -91,7 +91,7 @@ struct RequestComponentsTests {
9191
let components = RequestComponents(
9292
path: "/form",
9393
httpMethod: .post,
94-
body: (params, nil)
94+
bodyParts: .init(params, nil)
9595
)
9696
let request = try #require(components.urlRequest)
9797
let bodyData = try #require(request.httpBody)
@@ -112,7 +112,7 @@ struct RequestComponentsTests {
112112
path: "/upload",
113113
httpMethod: .post,
114114
hasMultipartFormData: true,
115-
body: (["title": "Doc"], [media]),
115+
bodyParts: .init(["title": "Doc"], [media]),
116116
boundary: "TESTBOUNDARY"
117117
)
118118
let request = try #require(components.urlRequest)
@@ -182,7 +182,7 @@ struct RequestComponentsTests {
182182
let components = RequestComponents(
183183
path: "/form",
184184
httpMethod: .post,
185-
body: (["empty": ""], nil)
185+
bodyParts: .init(["empty": ""], nil)
186186
)
187187
let request = try #require(components.urlRequest)
188188
let bodyString = try #require(request.httpBody.flatMap { String(data: $0, encoding: .utf8) })
@@ -204,7 +204,7 @@ struct RequestComponentsTests {
204204
path: "/upload",
205205
httpMethod: .post,
206206
hasMultipartFormData: true,
207-
body: ([:], [media]),
207+
bodyParts: .init([:], [media]),
208208
boundary: "BIGBOUNDARY"
209209
)
210210

SwiftUI-WorkoutApp/Libraries/SWNetworkClient/Sources/SWNetworkClient/Endpoint.swift

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -414,10 +414,7 @@ extension Endpoint {
414414
case classID = "class_id"
415415
}
416416

417-
var httpBody: (
418-
parameters: [String: String],
419-
mediaFiles: [BodyMaker.MediaFile]?
420-
)? {
417+
var bodyParts: BodyMaker.Parts? {
421418
switch self {
422419
case .login, .getUser, .getFriendsForUser, .getFriendRequests,
423420
.acceptFriendRequest, .declineFriendRequest, .findUsers,
@@ -435,7 +432,7 @@ extension Endpoint {
435432
.deleteEventPhoto, .deleteParkPhoto:
436433
return nil
437434
case let .registration(form):
438-
return ([
435+
return .init([
439436
ParameterKey.name.rawValue: form.userName,
440437
ParameterKey.fullname.rawValue: form.fullName,
441438
ParameterKey.email.rawValue: form.email,
@@ -467,30 +464,30 @@ extension Endpoint {
467464
} else {
468465
nil
469466
}
470-
return (parameters, mediaFiles)
467+
return .init(parameters, mediaFiles)
471468
case let .resetPassword(login):
472-
return ([ParameterKey.usernameOrEmail.rawValue: login], nil)
469+
return .init([ParameterKey.usernameOrEmail.rawValue: login], nil)
473470
case let .changePassword(current, new):
474-
return ([
471+
return .init([
475472
ParameterKey.password.rawValue: current,
476473
ParameterKey.newPassword.rawValue: new
477474
], nil)
478475
case let .addCommentToPark(_, comment),
479476
let .addCommentToEvent(_, comment),
480477
let .editParkComment(_, _, comment),
481478
let .editEventComment(_, _, comment):
482-
return ([ParameterKey.comment.rawValue: comment], nil)
479+
return .init([ParameterKey.comment.rawValue: comment], nil)
483480
case let .sendMessageTo(message, _):
484-
return ([ParameterKey.message.rawValue: message], nil)
481+
return .init([ParameterKey.message.rawValue: message], nil)
485482
case let .markAsRead(userID):
486-
return ([ParameterKey.fromUserID.rawValue: userID.description], nil)
483+
return .init([ParameterKey.fromUserID.rawValue: userID.description], nil)
487484
case let .createJournal(_, title):
488-
return ([ParameterKey.title.rawValue: title], nil)
485+
return .init([ParameterKey.title.rawValue: title], nil)
489486
case let .saveJournalEntry(_, _, message),
490487
let .editEntry(_, _, _, message):
491-
return ([ParameterKey.message.rawValue: message], nil)
488+
return .init([ParameterKey.message.rawValue: message], nil)
492489
case let .editJournalSettings(_, _, title, viewAccess, commentAccess):
493-
return (
490+
return .init(
494491
[
495492
ParameterKey.title.rawValue: title,
496493
ParameterKey.viewAccess.rawValue: viewAccess.description,
@@ -515,7 +512,7 @@ extension Endpoint {
515512
mimeType: $0.mimeType
516513
)
517514
}
518-
return (parameters, mediaFiles)
515+
return .init(parameters, mediaFiles)
519516
case let .createPark(form), let .editPark(_, form):
520517
let parameters = [
521518
ParameterKey.address.rawValue: form.address,
@@ -535,7 +532,7 @@ extension Endpoint {
535532
mimeType: $0.mimeType
536533
)
537534
}
538-
return (parameters, mediaFiles)
535+
return .init(parameters, mediaFiles)
539536
}
540537
}
541538
}

SwiftUI-WorkoutApp/Libraries/SWNetworkClient/Sources/SWNetworkClient/SWClient.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ private extension SWClient {
544544
queryItems: endpoint.queryItems,
545545
httpMethod: endpoint.method,
546546
hasMultipartFormData: endpoint.hasMultipartFormData,
547-
body: endpoint.httpBody,
547+
bodyParts: endpoint.bodyParts,
548548
token: token ?? savedToken
549549
)
550550
}

0 commit comments

Comments
 (0)