Files
purchases-ios/Sources/Networking/IdentityAPI.swift
T
NachoSoto b08fb7dc08 Renamed CallbackCache.add(callback:) (#1970)
This is the Swifty way to avoid the duplication in `cache.add(callback: callback)`.
2022-10-11 12:47:17 -07:00

49 lines
1.8 KiB
Swift

//
// Copyright RevenueCat Inc. All Rights Reserved.
//
// Licensed under the MIT License (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://opensource.org/licenses/MIT
//
// IdentityAPI.swift
//
// Created by Joshua Liebowitz on 6/15/22.
import Foundation
class IdentityAPI {
typealias LogInResponse = Result<(info: CustomerInfo, created: Bool), BackendError>
typealias LogInResponseHandler = (LogInResponse) -> Void
private let logInCallbacksCache: CallbackCache<LogInCallback>
private let backendConfig: BackendConfiguration
init(backendConfig: BackendConfiguration) {
self.backendConfig = backendConfig
self.logInCallbacksCache = CallbackCache<LogInCallback>()
}
func logIn(currentAppUserID: String,
newAppUserID: String,
completion: @escaping LogInResponseHandler) {
let config = NetworkOperation.UserSpecificConfiguration(httpClient: self.backendConfig.httpClient,
appUserID: currentAppUserID)
let loginOperation = LogInOperation(configuration: config,
newAppUserID: newAppUserID,
loginCallbackCache: self.logInCallbacksCache)
let loginCallback = LogInCallback(cacheKey: loginOperation.cacheKey, completion: completion)
let cacheStatus = self.logInCallbacksCache.add(loginCallback)
self.backendConfig.operationQueue.addCacheableOperation(loginOperation, cacheStatus: cacheStatus)
}
}
// @unchecked because:
// - Class is not `final` (it's mocked). This implicitly makes subclasses `Sendable` even if they're not thread-safe.
extension IdentityAPI: @unchecked Sendable {}