11import Foundation
22import protocol Storage. StorageManagerType
33import protocol NetworkingCore. Network
4+ import protocol WooFoundation. CrashLogger
5+ import enum WooFoundation. SeverityLevel
46
57/// Determines whether an order is eligible for card present payment or not
68///
79public final class OrderCardPresentPaymentEligibilityStore : Store {
810 private let currentSite : ( ) -> Site ?
11+ private let crashLogger : CrashLogger
912 private lazy var siteCIABEligibilityChecker : CIABEligibilityCheckerProtocol = CIABEligibilityChecker (
1013 currentSite: currentSite
1114 )
@@ -14,9 +17,11 @@ public final class OrderCardPresentPaymentEligibilityStore: Store {
1417 dispatcher: Dispatcher ,
1518 storageManager: StorageManagerType ,
1619 network: Network ,
20+ crashLogger: CrashLogger ,
1721 currentSite: @escaping ( ) -> Site ?
1822 ) {
1923 self . currentSite = currentSite
24+ self . crashLogger = crashLogger
2025 super. init (
2126 dispatcher: dispatcher,
2227 storageManager: storageManager,
@@ -55,11 +60,27 @@ private extension OrderCardPresentPaymentEligibilityStore {
5560 cardPresentPaymentsConfiguration: CardPresentPaymentsConfiguration ,
5661 onCompletion: ( Result < Bool , Error > ) -> Void ) {
5762 let storage = storageManager. viewStorage
63+ let storageSite = storage. loadSite ( siteID: siteID) ? . toReadOnly ( )
64+
65+ let site : Site ?
66+ if let storageSite {
67+ site = storageSite
68+ } else {
69+ /// Non - fatal fallback to `currentSite` when a storage site is missing
70+ site = currentSite ( )
71+
72+ logFailedStorageSiteRead (
73+ siteID: siteID,
74+ currentSiteFallbackValue: site
75+ )
76+ }
77+
78+ guard let site else {
79+ logFailedDefaultSiteRead ( siteID: siteID)
5880
59- guard let site = storage. loadSite ( siteID: siteID) ? . toReadOnly ( ) else {
6081 return onCompletion (
6182 . failure(
62- OrderIsEligibleForCardPresentPaymentError . siteNotFoundInStorage
83+ OrderIsEligibleForCardPresentPaymentError . failedToObtainSite
6384 )
6485 )
6586 }
@@ -83,10 +104,42 @@ private extension OrderCardPresentPaymentEligibilityStore {
83104 }
84105}
85106
107+ /// Error logging
108+ private extension OrderCardPresentPaymentEligibilityStore {
109+ func logFailedStorageSiteRead( siteID: Int64 , currentSiteFallbackValue: Site ? ) {
110+ let message = " OrderCardPresentPaymentEligibilityStore: Storage site missing, falling back to currentSite. "
111+
112+ DDLogError ( message)
113+
114+ crashLogger. logMessage (
115+ message,
116+ properties: [
117+ " siteID " : siteID,
118+ " currentSiteID " : currentSiteFallbackValue? . siteID ?? " empty " ,
119+ ] ,
120+ level: . error
121+ )
122+ }
123+
124+ func logFailedDefaultSiteRead( siteID: Int64 ) {
125+ let message = " OrderCardPresentPaymentEligibilityStore: Current default site missing. "
126+
127+ DDLogError ( message)
128+
129+ crashLogger. logMessage (
130+ " OrderCardPresentPaymentEligibilityStore: Current default site missing. " ,
131+ properties: [
132+ " requestedSiteID " : siteID
133+ ] ,
134+ level: . error
135+ )
136+ }
137+ }
138+
86139extension OrderCardPresentPaymentEligibilityStore {
87140 enum OrderIsEligibleForCardPresentPaymentError : Error {
88141 case orderNotFoundInStorage
89- case siteNotFoundInStorage
142+ case failedToObtainSite
90143 case cardReaderPaymentOptionIsNotSupportedForCIABSites
91144 }
92145}
0 commit comments