Skip to content

Commit d3461b6

Browse files
Remove JsonKeyValueRepresentable
1 parent 0e37a96 commit d3461b6

File tree

2 files changed

+61
-73
lines changed

2 files changed

+61
-73
lines changed

swift-sdk/Constants.swift

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public enum Const {
4646
public enum UserDefault {
4747
static let payloadKey = "itbl_payload_key"
4848
static let attributionInfoKey = "itbl_attribution_info_key"
49-
public static let emailKey = "itbl_email"
49+
static let emailKey = "itbl_email"
5050
static let userIdKey = "itbl_userid"
5151
static let authTokenKey = "itbl_auth_token"
5252
static let ddlChecked = "itbl_ddl_checked"
@@ -74,16 +74,6 @@ public enum Const {
7474
}
7575
}
7676

77-
public protocol JsonKeyValueRepresentable {
78-
var key: JsonKeyRepresentable { get }
79-
var value: JsonValueRepresentable { get }
80-
}
81-
82-
public struct JsonKeyValue: JsonKeyValueRepresentable {
83-
public let key: JsonKeyRepresentable
84-
public let value: JsonValueRepresentable
85-
}
86-
8777
public protocol JsonKeyRepresentable {
8878
var jsonKey: String { get }
8979
}

swift-sdk/Internal/RequestCreator.swift

Lines changed: 60 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ struct RequestCreator {
3232

3333
func createRegisterTokenRequest(registerTokenInfo: RegisterTokenInfo,
3434
notificationsEnabled: Bool) -> Result<IterableRequest, IterableError> {
35-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
35+
if case .none = auth.emailOrUserId {
3636
ITBError("Both email and userId are nil")
3737
return .failure(IterableError.general(description: "Both email and userId are nil"))
3838
}
39-
39+
4040
let dataFields = DataFieldsHelper.createDataFields(sdkVersion: registerTokenInfo.sdkVersion,
4141
deviceId: registerTokenInfo.deviceId,
4242
device: UIDevice.current,
@@ -56,7 +56,7 @@ struct RequestCreator {
5656

5757
body[JsonKey.device.jsonKey] = deviceDictionary
5858

59-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
59+
setCurrentUser(inDict: &body)
6060

6161
if auth.email == nil, auth.userId != nil {
6262
body[JsonKey.preferUserId.jsonKey] = true
@@ -66,16 +66,16 @@ struct RequestCreator {
6666
}
6767

6868
func createUpdateUserRequest(dataFields: [AnyHashable: Any], mergeNestedObjects: Bool) -> Result<IterableRequest, IterableError> {
69-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
69+
if case .none = auth.emailOrUserId {
7070
ITBError("Both email and userId are nil")
7171
return .failure(IterableError.general(description: "Both email and userId are nil"))
7272
}
73-
73+
7474
var body = [AnyHashable: Any]()
7575

7676
body[JsonKey.dataFields.jsonKey] = dataFields
7777
body[JsonKey.mergeNestedObjects.jsonKey] = NSNumber(value: mergeNestedObjects)
78-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
78+
setCurrentUser(inDict: &body)
7979

8080
if auth.email == nil, auth.userId != nil {
8181
body[JsonKey.preferUserId.jsonKey] = true
@@ -85,11 +85,11 @@ struct RequestCreator {
8585
}
8686

8787
func createTrackPurchaseRequest(_ total: NSNumber, items: [CommerceItem], dataFields: [AnyHashable: Any]?) -> Result<IterableRequest, IterableError> {
88-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
88+
if case .none = auth.emailOrUserId {
8989
ITBError("Both email and userId are nil")
9090
return .failure(IterableError.general(description: "Both email and userId are nil"))
9191
}
92-
92+
9393
var itemsToSerialize = [[AnyHashable: Any]]()
9494

9595
for item in items {
@@ -98,7 +98,7 @@ struct RequestCreator {
9898

9999
var apiUserDict = [AnyHashable: Any]()
100100

101-
apiUserDict.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
101+
setCurrentUser(inDict: &apiUserDict)
102102

103103
var body: [String: Any] = [JsonKey.Commerce.user: apiUserDict,
104104
JsonKey.Commerce.items: itemsToSerialize,
@@ -122,9 +122,7 @@ struct RequestCreator {
122122
reqDataFields[JsonKey.appAlreadyRunning.jsonKey] = appAlreadyRunning
123123
body[JsonKey.dataFields.jsonKey] = reqDataFields
124124

125-
if let keyValueForCurrentUser = keyValueForCurrentUser {
126-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
127-
}
125+
setCurrentUser(inDict: &body)
128126

129127
body[JsonKey.campaignId.jsonKey] = campaignId
130128

@@ -138,14 +136,15 @@ struct RequestCreator {
138136
}
139137

140138
func createTrackEventRequest(_ eventName: String, dataFields: [AnyHashable: Any]?) -> Result<IterableRequest, IterableError> {
141-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
139+
if case .none = auth.emailOrUserId {
142140
ITBError("Both email and userId are nil")
143141
return .failure(IterableError.general(description: "Both email and userId are nil"))
144142
}
145-
143+
146144
var body = [AnyHashable: Any]()
147145

148-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
146+
setCurrentUser(inDict: &body)
147+
149148
body.setValue(for: .eventName, value: eventName)
150149

151150
if let dataFields = dataFields {
@@ -161,14 +160,14 @@ struct RequestCreator {
161160
subscribedMessageTypeIds: [NSNumber]? = nil,
162161
campaignId: NSNumber? = nil,
163162
templateId: NSNumber? = nil) -> Result<IterableRequest, IterableError> {
164-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
163+
if case .none = auth.emailOrUserId {
165164
ITBError("Both email and userId are nil")
166165
return .failure(IterableError.general(description: "Both email and userId are nil"))
167166
}
168-
167+
169168
var body = [AnyHashable: Any]()
170169

171-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
170+
setCurrentUser(inDict: &body)
172171

173172
if let emailListIds = emailListIds {
174173
body[JsonKey.emailListIds.jsonKey] = emailListIds
@@ -198,11 +197,11 @@ struct RequestCreator {
198197
}
199198

200199
func createGetInAppMessagesRequest(_ count: NSNumber) -> Result<IterableRequest, IterableError> {
201-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
200+
if case .none = auth.emailOrUserId {
202201
ITBError("Both email and userId are nil")
203202
return .failure(IterableError.general(description: "Both email and userId are nil"))
204203
}
205-
204+
206205
var args: [AnyHashable: Any] = [JsonKey.InApp.count: count.description,
207206
JsonKey.platform.jsonKey: JsonValue.iOS.jsonStringValue,
208207
JsonKey.systemVersion.jsonKey: UIDevice.current.systemVersion,
@@ -212,22 +211,22 @@ struct RequestCreator {
212211
args[JsonKey.InApp.packageName] = packageName
213212
}
214213

215-
args.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
214+
setCurrentUser(inDict: &args)
216215

217216
return .success(.get(createGetRequest(forPath: Const.Path.getInAppMessages, withArgs: args as! [String: String])))
218217
}
219218

220219
func createTrackInAppOpenRequest(inAppMessageContext: InAppMessageContext) -> Result<IterableRequest, IterableError> {
221-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
220+
if case .none = auth.emailOrUserId {
222221
ITBError("Both email and userId are nil")
223222
return .failure(IterableError.general(description: "Both email and userId are nil"))
224223
}
225-
224+
226225
var body = [AnyHashable: Any]()
227226

228227
body.setValue(for: .messageId, value: inAppMessageContext.messageId)
229228

230-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
229+
setCurrentUser(inDict: &body)
231230

232231
body.setValue(for: .inAppMessageContext, value: inAppMessageContext.toMessageContextDictionary())
233232
body.setValue(for: .deviceInfo, value: deviceMetadata.asDictionary())
@@ -240,16 +239,16 @@ struct RequestCreator {
240239
}
241240

242241
func createTrackInAppClickRequest(inAppMessageContext: InAppMessageContext, clickedUrl: String) -> Result<IterableRequest, IterableError> {
243-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
242+
if case .none = auth.emailOrUserId {
244243
ITBError("Both email and userId are nil")
245244
return .failure(IterableError.general(description: "Both email and userId are nil"))
246245
}
247-
246+
248247
var body = [AnyHashable: Any]()
249248

250249
body.setValue(for: .messageId, value: inAppMessageContext.messageId)
251250

252-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
251+
setCurrentUser(inDict: &body)
253252

254253
body.setValue(for: .clickedUrl, value: clickedUrl)
255254

@@ -264,11 +263,11 @@ struct RequestCreator {
264263
}
265264

266265
func createTrackInAppCloseRequest(inAppMessageContext: InAppMessageContext, source: InAppCloseSource?, clickedUrl: String?) -> Result<IterableRequest, IterableError> {
267-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
266+
if case .none = auth.emailOrUserId {
268267
ITBError("Both email and userId are nil")
269268
return .failure(IterableError.general(description: "Both email and userId are nil"))
270269
}
271-
270+
272271
var body = [AnyHashable: Any]()
273272

274273
body.setValue(for: .messageId, value: inAppMessageContext.messageId)
@@ -288,22 +287,22 @@ struct RequestCreator {
288287
body.setValue(for: .inboxSessionId, value: inboxSessionId)
289288
}
290289

291-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
290+
setCurrentUser(inDict: &body)
292291

293292
return .success(.post(createPostRequest(path: Const.Path.trackInAppClose, body: body)))
294293
}
295294

296295
func createTrackInAppDeliveryRequest(inAppMessageContext: InAppMessageContext) -> Result<IterableRequest, IterableError> {
297-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
296+
if case .none = auth.emailOrUserId {
298297
ITBError("Both email and userId are nil")
299298
return .failure(IterableError.general(description: "Both email and userId are nil"))
300299
}
301-
300+
302301
var body = [AnyHashable: Any]()
303302

304303
body.setValue(for: .messageId, value: inAppMessageContext.messageId)
305304

306-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
305+
setCurrentUser(inDict: &body)
307306

308307
body.setValue(for: .inAppMessageContext, value: inAppMessageContext.toMessageContextDictionary())
309308
body.setValue(for: .deviceInfo, value: deviceMetadata.asDictionary())
@@ -312,26 +311,26 @@ struct RequestCreator {
312311
}
313312

314313
func createInAppConsumeRequest(_ messageId: String) -> Result<IterableRequest, IterableError> {
315-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
314+
if case .none = auth.emailOrUserId {
316315
ITBError("Both email and userId are nil")
317316
return .failure(IterableError.general(description: "Both email and userId are nil"))
318317
}
319-
318+
320319
var body = [AnyHashable: Any]()
321320

322321
body.setValue(for: .messageId, value: messageId)
323322

324-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
323+
setCurrentUser(inDict: &body)
325324

326325
return .success(.post(createPostRequest(path: Const.Path.inAppConsume, body: body)))
327326
}
328327

329328
func createTrackInAppConsumeRequest(inAppMessageContext: InAppMessageContext, source: InAppDeleteSource?) -> Result<IterableRequest, IterableError> {
330-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
329+
if case .none = auth.emailOrUserId {
331330
ITBError("Both email and userId are nil")
332331
return .failure(IterableError.general(description: "Both email and userId are nil"))
333332
}
334-
333+
335334
var body = [AnyHashable: Any]()
336335

337336
body.setValue(for: .messageId, value: inAppMessageContext.messageId)
@@ -347,17 +346,17 @@ struct RequestCreator {
347346
body.setValue(for: .inboxSessionId, value: inboxSessionId)
348347
}
349348

350-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
349+
setCurrentUser(inDict: &body)
351350

352351
return .success(.post(createPostRequest(path: Const.Path.inAppConsume, body: body)))
353352
}
354353

355354
func createTrackInboxSessionRequest(inboxSession: IterableInboxSession) -> Result<IterableRequest, IterableError> {
356-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
355+
if case .none = auth.emailOrUserId {
357356
ITBError("Both email and userId are nil")
358357
return .failure(IterableError.general(description: "Both email and userId are nil"))
359358
}
360-
359+
361360
guard let inboxSessionId = inboxSession.id else {
362361
return .failure(IterableError.general(description: "expecting session UUID"))
363362
}
@@ -371,8 +370,8 @@ struct RequestCreator {
371370
}
372371

373372
var body = [AnyHashable: Any]()
374-
375-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
373+
374+
setCurrentUser(inDict: &body)
376375

377376
body.setValue(for: .inboxSessionId, value: inboxSessionId)
378377
body.setValue(for: .inboxSessionStart, value: IterableUtil.int(fromDate: sessionStartTime))
@@ -394,9 +393,7 @@ struct RequestCreator {
394393
body.setValue(for: .token, value: hexToken)
395394

396395
if !allUsers {
397-
if let keyValueForCurrentUser = keyValueForCurrentUser {
398-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
399-
}
396+
setCurrentUser(inDict: &body)
400397
}
401398

402399
return .success(.post(createPostRequest(path: Const.Path.disableDevice, body: body)))
@@ -416,17 +413,6 @@ struct RequestCreator {
416413

417414
// MARK: - PRIVATE
418415

419-
private var keyValueForCurrentUser: JsonKeyValueRepresentable? {
420-
switch auth.emailOrUserId {
421-
case let .email(email):
422-
return JsonKeyValue(key: JsonKey.email, value: email)
423-
case let .userId(userId):
424-
return JsonKeyValue(key: JsonKey.userId, value: userId)
425-
case .none:
426-
return nil
427-
}
428-
}
429-
430416
private func createPostRequest(path: String, body: [AnyHashable: Any]? = nil) -> PostRequest {
431417
PostRequest(path: path,
432418
args: [JsonKey.Header.apiKey: apiKey],
@@ -448,14 +434,26 @@ struct RequestCreator {
448434
return apnsType == .sandbox ? JsonValue.apnsSandbox.jsonStringValue : JsonValue.apnsProduction.jsonStringValue
449435
}
450436
}
437+
438+
private func setCurrentUser(inDict dict: inout [AnyHashable: Any]) {
439+
switch auth.emailOrUserId {
440+
case let .email(email):
441+
dict.setValue(for: .email, value: email)
442+
case let .userId(userId):
443+
dict.setValue(for: .userId, value: userId)
444+
case .none:
445+
ITBInfo("Current user is unavailable")
446+
}
447+
448+
}
451449
}
452450

453451
// MARK: - DEPRECATED
454452

455453
extension RequestCreator {
456454
// deprecated - will be removed in version 6.3.x or above
457455
func createTrackInAppOpenRequest(_ messageId: String) -> Result<IterableRequest, IterableError> {
458-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
456+
if case .none = auth.emailOrUserId {
459457
ITBError("Both email and userId are nil")
460458
return .failure(IterableError.general(description: "Both email and userId are nil"))
461459
}
@@ -464,7 +462,7 @@ extension RequestCreator {
464462

465463
body.setValue(for: .messageId, value: messageId)
466464

467-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
465+
setCurrentUser(inDict: &body)
468466

469467
let inAppMessageContext = InAppMessageContext.from(messageId: messageId, deviceMetadata: deviceMetadata)
470468
body.setValue(for: .inAppMessageContext, value: inAppMessageContext.toMessageContextDictionary())
@@ -475,17 +473,17 @@ extension RequestCreator {
475473

476474
// deprecated - will be removed in version 6.3.x or above
477475
func createTrackInAppClickRequest(_ messageId: String, clickedUrl: String) -> Result<IterableRequest, IterableError> {
478-
guard let keyValueForCurrentUser = keyValueForCurrentUser else {
476+
if case .none = auth.emailOrUserId {
479477
ITBError("Both email and userId are nil")
480478
return .failure(IterableError.general(description: "Both email and userId are nil"))
481479
}
482-
480+
483481
var body = [AnyHashable: Any]()
484482

485483
body.setValue(for: .messageId, value: messageId)
486484
body.setValue(for: .clickedUrl, value: clickedUrl)
487485

488-
body.setValue(for: keyValueForCurrentUser.key, value: keyValueForCurrentUser.value)
486+
setCurrentUser(inDict: &body)
489487

490488
let inAppMessageContext = InAppMessageContext.from(messageId: messageId, deviceMetadata: deviceMetadata)
491489
body.setValue(for: .inAppMessageContext, value: inAppMessageContext.toMessageContextDictionary())

0 commit comments

Comments
 (0)