Skip to content

Commit 5c61ebe

Browse files
committed
[MOB-10368] Reorganize some files
1 parent bba088f commit 5c61ebe

25 files changed

+6188
-0
lines changed
Lines changed: 253 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,253 @@
1+
//
2+
// Copyright © 2019 Iterable. All rights reserved.
3+
//
4+
5+
import Foundation
6+
7+
struct DeviceMetadata: Codable {
8+
let deviceId: String
9+
let platform: String
10+
let appPackageName: String
11+
}
12+
13+
// MARK: - API CLIENT FUNCTIONS
14+
15+
class ApiClient {
16+
init(apiKey: String,
17+
authProvider: AuthProvider?,
18+
endpoint: String,
19+
networkSession: NetworkSessionProtocol,
20+
deviceMetadata: DeviceMetadata,
21+
dateProvider: DateProviderProtocol) {
22+
self.apiKey = apiKey
23+
self.authProvider = authProvider
24+
self.endpoint = endpoint
25+
self.networkSession = networkSession
26+
self.deviceMetadata = deviceMetadata
27+
self.dateProvider = dateProvider
28+
}
29+
30+
func convertToURLRequest(iterableRequest: IterableRequest) -> URLRequest? {
31+
guard let authProvider = authProvider else {
32+
return nil
33+
}
34+
35+
let currentDate = dateProvider.currentDate
36+
let apiCallRequest = IterableAPICallRequest(apiKey: apiKey,
37+
endpoint: endpoint,
38+
authToken: authProvider.auth.authToken,
39+
deviceMetadata: deviceMetadata,
40+
iterableRequest: iterableRequest).addingCreatedAt(currentDate)
41+
return apiCallRequest.convertToURLRequest(sentAt: currentDate)
42+
}
43+
44+
func send(iterableRequestResult result: Result<IterableRequest, IterableError>) -> Pending<SendRequestValue, SendRequestError> {
45+
switch result {
46+
case let .success(iterableRequest):
47+
return send(iterableRequest: iterableRequest)
48+
case let .failure(iterableError):
49+
return SendRequestError.createErroredFuture(reason: iterableError.localizedDescription)
50+
}
51+
}
52+
53+
func send<T>(iterableRequestResult result: Result<IterableRequest, IterableError>) -> Pending<T, SendRequestError> where T: Decodable {
54+
switch result {
55+
case let .success(iterableRequest):
56+
return send(iterableRequest: iterableRequest)
57+
case let .failure(iterableError):
58+
return SendRequestError.createErroredFuture(reason: iterableError.localizedDescription)
59+
}
60+
}
61+
62+
func send(iterableRequest: IterableRequest) -> Pending<SendRequestValue, SendRequestError> {
63+
guard let urlRequest = convertToURLRequest(iterableRequest: iterableRequest) else {
64+
return SendRequestError.createErroredFuture()
65+
}
66+
67+
return RequestSender.sendRequest(urlRequest, usingSession: networkSession)
68+
}
69+
70+
func send<T>(iterableRequest: IterableRequest) -> Pending<T, SendRequestError> where T: Decodable {
71+
guard let urlRequest = convertToURLRequest(iterableRequest: iterableRequest) else {
72+
return SendRequestError.createErroredFuture()
73+
}
74+
75+
return RequestSender.sendRequest(urlRequest, usingSession: networkSession)
76+
}
77+
78+
// MARK: - Private
79+
80+
private func createRequestCreator() -> Result<RequestCreator, IterableError> {
81+
guard let authProvider = authProvider else {
82+
return .failure(IterableError.general(description: "authProvider is missing"))
83+
}
84+
85+
return .success(RequestCreator(auth: authProvider.auth, deviceMetadata: deviceMetadata))
86+
}
87+
88+
private let apiKey: String
89+
private weak var authProvider: AuthProvider?
90+
private let endpoint: String
91+
private let networkSession: NetworkSessionProtocol
92+
private let deviceMetadata: DeviceMetadata
93+
private let dateProvider: DateProviderProtocol
94+
}
95+
96+
// MARK: - API REQUEST CALLS
97+
98+
extension ApiClient: ApiClientProtocol {
99+
func register(registerTokenInfo: RegisterTokenInfo, notificationsEnabled: Bool) -> Pending<SendRequestValue, SendRequestError> {
100+
let result = createRequestCreator().flatMap { $0.createRegisterTokenRequest(registerTokenInfo: registerTokenInfo,
101+
notificationsEnabled: notificationsEnabled) }
102+
return send(iterableRequestResult: result)
103+
}
104+
105+
func updateUser(_ dataFields: [AnyHashable: Any], mergeNestedObjects: Bool) -> Pending<SendRequestValue, SendRequestError> {
106+
let result = createRequestCreator().flatMap { $0.createUpdateUserRequest(dataFields: dataFields,
107+
mergeNestedObjects: mergeNestedObjects) }
108+
return send(iterableRequestResult: result)
109+
}
110+
111+
func updateEmail(newEmail: String) -> Pending<SendRequestValue, SendRequestError> {
112+
let result = createRequestCreator().flatMap { $0.createUpdateEmailRequest(newEmail: newEmail) }
113+
return send(iterableRequestResult: result)
114+
}
115+
116+
func getInAppMessages(_ count: NSNumber) -> Pending<SendRequestValue, SendRequestError> {
117+
let result = createRequestCreator().flatMap { $0.createGetInAppMessagesRequest(count) }
118+
return send(iterableRequestResult: result)
119+
}
120+
121+
func disableDevice(forAllUsers allUsers: Bool, hexToken: String) -> Pending<SendRequestValue, SendRequestError> {
122+
let result = createRequestCreator().flatMap { $0.createDisableDeviceRequest(forAllUsers: allUsers,
123+
hexToken: hexToken) }
124+
return send(iterableRequestResult: result)
125+
}
126+
127+
func updateCart(items: [CommerceItem]) -> Pending<SendRequestValue, SendRequestError> {
128+
let result = createRequestCreator().flatMap { $0.createUpdateCartRequest(items: items) }
129+
130+
return send(iterableRequestResult: result)
131+
}
132+
133+
func track(purchase total: NSNumber,
134+
items: [CommerceItem],
135+
dataFields: [AnyHashable: Any]?,
136+
campaignId: NSNumber?,
137+
templateId: NSNumber?) -> Pending<SendRequestValue, SendRequestError> {
138+
let result = createRequestCreator().flatMap { $0.createTrackPurchaseRequest(total,
139+
items: items,
140+
dataFields: dataFields,
141+
campaignId: campaignId,
142+
templateId: templateId) }
143+
return send(iterableRequestResult: result)
144+
}
145+
146+
func track(pushOpen campaignId: NSNumber, templateId: NSNumber?, messageId: String, appAlreadyRunning: Bool, dataFields: [AnyHashable: Any]?) -> Pending<SendRequestValue, SendRequestError> {
147+
let result = createRequestCreator().flatMap { $0.createTrackPushOpenRequest(campaignId,
148+
templateId: templateId,
149+
messageId: messageId,
150+
appAlreadyRunning: appAlreadyRunning,
151+
dataFields: dataFields) }
152+
return send(iterableRequestResult: result)
153+
}
154+
155+
func track(event eventName: String, dataFields: [AnyHashable: Any]?) -> Pending<SendRequestValue, SendRequestError> {
156+
let result = createRequestCreator().flatMap { $0.createTrackEventRequest(eventName,
157+
dataFields: dataFields) }
158+
return send(iterableRequestResult: result)
159+
}
160+
161+
func updateSubscriptions(_ emailListIds: [NSNumber]? = nil,
162+
unsubscribedChannelIds: [NSNumber]? = nil,
163+
unsubscribedMessageTypeIds: [NSNumber]? = nil,
164+
subscribedMessageTypeIds: [NSNumber]? = nil,
165+
campaignId: NSNumber? = nil,
166+
templateId: NSNumber? = nil) -> Pending<SendRequestValue, SendRequestError> {
167+
let result = createRequestCreator().flatMap { $0.createUpdateSubscriptionsRequest(emailListIds,
168+
unsubscribedChannelIds: unsubscribedChannelIds,
169+
unsubscribedMessageTypeIds: unsubscribedMessageTypeIds,
170+
subscribedMessageTypeIds: subscribedMessageTypeIds,
171+
campaignId: campaignId,
172+
templateId: templateId) }
173+
return send(iterableRequestResult: result)
174+
}
175+
176+
func track(inAppOpen inAppMessageContext: InAppMessageContext) -> Pending<SendRequestValue, SendRequestError> {
177+
let result = createRequestCreator().flatMap { $0.createTrackInAppOpenRequest(inAppMessageContext: inAppMessageContext) }
178+
return send(iterableRequestResult: result)
179+
}
180+
181+
func track(inAppClick inAppMessageContext: InAppMessageContext, clickedUrl: String) -> Pending<SendRequestValue, SendRequestError> {
182+
let result = createRequestCreator().flatMap { $0.createTrackInAppClickRequest(inAppMessageContext: inAppMessageContext,
183+
clickedUrl: clickedUrl) }
184+
return send(iterableRequestResult: result)
185+
}
186+
187+
func track(inAppClose inAppMessageContext: InAppMessageContext, source: InAppCloseSource?, clickedUrl: String?) -> Pending<SendRequestValue, SendRequestError> {
188+
let result = createRequestCreator().flatMap { $0.createTrackInAppCloseRequest(inAppMessageContext: inAppMessageContext,
189+
source: source,
190+
clickedUrl: clickedUrl) }
191+
return send(iterableRequestResult: result)
192+
}
193+
194+
func track(inAppDelivery inAppMessageContext: InAppMessageContext) -> Pending<SendRequestValue, SendRequestError> {
195+
let result = createRequestCreator().flatMap { $0.createTrackInAppDeliveryRequest(inAppMessageContext: inAppMessageContext) }
196+
return send(iterableRequestResult: result)
197+
}
198+
199+
func track(inboxSession: IterableInboxSession) -> Pending<SendRequestValue, SendRequestError> {
200+
let result = createRequestCreator().flatMap { $0.createTrackInboxSessionRequest(inboxSession: inboxSession) }
201+
return send(iterableRequestResult: result)
202+
}
203+
204+
func inAppConsume(messageId: String) -> Pending<SendRequestValue, SendRequestError> {
205+
let result = createRequestCreator().flatMap { $0.createInAppConsumeRequest(messageId) }
206+
return send(iterableRequestResult: result)
207+
}
208+
209+
func inAppConsume(inAppMessageContext: InAppMessageContext, source: InAppDeleteSource?) -> Pending<SendRequestValue, SendRequestError> {
210+
let result = createRequestCreator().flatMap { $0.createTrackInAppConsumeRequest(inAppMessageContext: inAppMessageContext,
211+
source: source) }
212+
return send(iterableRequestResult: result)
213+
}
214+
215+
func getRemoteConfiguration() -> Pending<RemoteConfiguration, SendRequestError> {
216+
let result = createRequestCreator().flatMap { $0.createGetRemoteConfigurationRequest() }
217+
return send(iterableRequestResult: result)
218+
}
219+
220+
// MARK: - Embedded Messaging
221+
222+
func getEmbeddedMessages() -> Pending<PlacementsPayload, SendRequestError> {
223+
let result = createRequestCreator().flatMap { $0.createGetEmbeddedMessagesRequest() }
224+
return send(iterableRequestResult: result)
225+
}
226+
227+
@discardableResult
228+
func track(embeddedMessageReceived message: IterableEmbeddedMessage) -> Pending<SendRequestValue, SendRequestError> {
229+
let result = createRequestCreator().flatMap { $0.createEmbeddedMessageReceivedRequest(message) }
230+
return send(iterableRequestResult: result)
231+
}
232+
233+
@discardableResult
234+
func track(embeddedMessageClick message: IterableEmbeddedMessage, buttonIdentifier: String?, clickedUrl: String) -> Pending<SendRequestValue, SendRequestError> {
235+
let result = createRequestCreator().flatMap { $0.createEmbeddedMessageClickRequest(message, buttonIdentifier, clickedUrl) }
236+
return send(iterableRequestResult: result)
237+
}
238+
239+
func track(embeddedMessageDismiss message: IterableEmbeddedMessage) -> Pending<SendRequestValue, SendRequestError> {
240+
let result = createRequestCreator().flatMap { $0.createEmbeddedMessageDismissRequest(message) }
241+
return send(iterableRequestResult: result)
242+
}
243+
244+
func track(embeddedMessageImpression message: IterableEmbeddedMessage) -> Pending<SendRequestValue, SendRequestError> {
245+
let result = createRequestCreator().flatMap { $0.createEmbeddedMessageImpressionRequest(message) }
246+
return send(iterableRequestResult: result)
247+
}
248+
249+
func track(embeddedSession: IterableEmbeddedSession) -> Pending<SendRequestValue, SendRequestError> {
250+
let result = createRequestCreator().flatMap { $0.createTrackEmbeddedSessionRequest(embeddedSession: embeddedSession) }
251+
return send(iterableRequestResult: result)
252+
}
253+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
//
2+
// Copyright © 2020 Iterable. All rights reserved.
3+
//
4+
5+
import Foundation
6+
7+
protocol ApiClientProtocol: AnyObject {
8+
func register(registerTokenInfo: RegisterTokenInfo, notificationsEnabled: Bool) -> Pending<SendRequestValue, SendRequestError>
9+
10+
func updateUser(_ dataFields: [AnyHashable: Any], mergeNestedObjects: Bool) -> Pending<SendRequestValue, SendRequestError>
11+
12+
func updateEmail(newEmail: String) -> Pending<SendRequestValue, SendRequestError>
13+
14+
func updateCart(items: [CommerceItem]) -> Pending<SendRequestValue, SendRequestError>
15+
16+
func track(purchase total: NSNumber, items: [CommerceItem], dataFields: [AnyHashable: Any]?, campaignId: NSNumber?, templateId: NSNumber?) -> Pending<SendRequestValue, SendRequestError>
17+
18+
func track(pushOpen campaignId: NSNumber, templateId: NSNumber?, messageId: String, appAlreadyRunning: Bool, dataFields: [AnyHashable: Any]?) -> Pending<SendRequestValue, SendRequestError>
19+
20+
func track(event eventName: String, dataFields: [AnyHashable: Any]?) -> Pending<SendRequestValue, SendRequestError>
21+
22+
func updateSubscriptions(_ emailListIds: [NSNumber]?,
23+
unsubscribedChannelIds: [NSNumber]?,
24+
unsubscribedMessageTypeIds: [NSNumber]?,
25+
subscribedMessageTypeIds: [NSNumber]?,
26+
campaignId: NSNumber?,
27+
templateId: NSNumber?) -> Pending<SendRequestValue, SendRequestError>
28+
29+
func getInAppMessages(_ count: NSNumber) -> Pending<SendRequestValue, SendRequestError>
30+
31+
func track(inAppOpen inAppMessageContext: InAppMessageContext) -> Pending<SendRequestValue, SendRequestError>
32+
33+
func track(inAppClick inAppMessageContext: InAppMessageContext, clickedUrl: String) -> Pending<SendRequestValue, SendRequestError>
34+
35+
func track(inAppClose inAppMessageContext: InAppMessageContext, source: InAppCloseSource?, clickedUrl: String?) -> Pending<SendRequestValue, SendRequestError>
36+
37+
func track(inAppDelivery inAppMessageContext: InAppMessageContext) -> Pending<SendRequestValue, SendRequestError>
38+
39+
@discardableResult func inAppConsume(messageId: String) -> Pending<SendRequestValue, SendRequestError>
40+
41+
@discardableResult func inAppConsume(inAppMessageContext: InAppMessageContext, source: InAppDeleteSource?) -> Pending<SendRequestValue, SendRequestError>
42+
43+
func track(inboxSession: IterableInboxSession) -> Pending<SendRequestValue, SendRequestError>
44+
45+
func disableDevice(forAllUsers allUsers: Bool, hexToken: String) -> Pending<SendRequestValue, SendRequestError>
46+
47+
func getRemoteConfiguration() -> Pending<RemoteConfiguration, SendRequestError>
48+
49+
func getEmbeddedMessages() -> Pending<PlacementsPayload, SendRequestError>
50+
51+
@discardableResult func track(embeddedMessageReceived message: IterableEmbeddedMessage) -> Pending<SendRequestValue, SendRequestError>
52+
53+
@discardableResult func track(embeddedMessageClick message: IterableEmbeddedMessage, buttonIdentifier: String?, clickedUrl: String) -> Pending<SendRequestValue, SendRequestError>
54+
55+
func track(embeddedMessageDismiss message: IterableEmbeddedMessage) -> Pending<SendRequestValue, SendRequestError>
56+
57+
func track(embeddedMessageImpression message: IterableEmbeddedMessage) -> Pending<SendRequestValue, SendRequestError>
58+
59+
@discardableResult func track(embeddedSession: IterableEmbeddedSession) -> Pending<SendRequestValue, SendRequestError>
60+
}

0 commit comments

Comments
 (0)