Advertisement
Guest User

Untitled

a guest
Feb 20th, 2020
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 5.92 KB | None | 0 0
  1. Currently this are my findings
  2.  
  3. 1. NULL PAYMENT CARD LIMIT
  4.  
  5. this is caused by createPaymentCard in PaymentCardSynchronizationManager.swift because
  6.  
  7. private func createPaymentCard(_ psPaymentCard: PSPaymentCard?) -> PaymentCard? {
  8.         guard let psPaymentCard = psPaymentCard else {
  9.             return nil
  10.         }
  11.        
  12.         let paymentCard = PaymentCard()
  13.         paymentCard.id = psPaymentCard.id
  14.         paymentCard.cardOwnerId = psPaymentCard.cardOwnerId
  15.         paymentCard.accountOwnerId = psPaymentCard.accountOwnerId ?? psPaymentCard.cardOwnerId
  16.         paymentCard.expirationDate = psPaymentCard.expirationDate
  17.         paymentCard.deliveryDate = psPaymentCard.shippingDate ?? Date().addingTimeInterval(604800)
  18.         paymentCard.accountNumber = psPaymentCard.accountNumber
  19.         paymentCard.maskedNumber = psPaymentCard.maskedNumber
  20.         paymentCard.ownerName = psPaymentCard.nameOnCard
  21.         paymentCard.visualType = psPaymentCard.visualType
  22.        
  23.         if let main = psPaymentCard.main {
  24.             paymentCard.main = main
  25.         }
  26.        
  27.         if let accountOwnerId = psPaymentCard.accountOwnerId {
  28.             paymentCard.accountOwnerId = accountOwnerId
  29.         }
  30.        
  31.         paymentCard.status = psPaymentCard.status
  32.         paymentCard.type = psPaymentCard.account?.type        
  33.        
  34.         // we are creating here a new instance of Payment card limit if the paymentCard.limit == nil, but the problem is it will always // be nil because it is always a new instance thus the "let paymentCard = PaymentCard()""
  35.         if paymentCard.limit == nil {
  36.             paymentCard.limit = PaymentCardLimit()
  37.         }        
  38.         return paymentCard
  39.     }
  40.  
  41. 2. DUPLICATE CARD LIMIT
  42.  
  43. since in number 1 we created a new row in realm for Payment Card limit that has no value (NULL) in
  44.  
  45. private func synchronizeCardLimit(for paymentCards: [PaymentCard]) -> [Promise<Bool>] {
  46.        
  47.         return paymentCards.map { paymentCard -> Promise<Bool> in
  48.             Promise<Bool> { value in
  49.                 self.paymentCardApiManager
  50.                     .getPaymentCardLimit(accountNumber: paymentCard.accountNumber)
  51.                     .done { psPaymentCardLimit in
  52.  
  53.                             // here we are creating again a new instance of payment card limit but now
  54.                             // we are putting some value from psPaymentCardLimit
  55.                             // so everytime "synchronizeCardLimit" is called we are adding new value in realm
  56.                             let paymentCardLimit = self.createPaymentCardLimit(psPaymentCardLimit)
  57.                         try! self.realm.write {
  58.                             // this doest not actually update the old value of "paymentCardLimit" but insert a new one
  59.                             // but updates the paymentCard.limit with new Object
  60.                             paymentCard.limit = paymentCardLimit
  61.                             value.fulfill(true)
  62.                         }
  63.                     }.catch { error  in
  64.                         value.reject(error)
  65.                 }
  66.             }
  67.         }
  68.     }
  69.  
  70.  
  71.     Possible solution so far
  72.  
  73.     private func createPaymentCard(_ psPaymentCard: PSPaymentCard?) -> PaymentCard? {
  74.         guard let psPaymentCard = psPaymentCard else {
  75.             return nil
  76.         }
  77.        
  78.         let paymentCard = PaymentCard()
  79.         paymentCard.id = psPaymentCard.id
  80.         paymentCard.cardOwnerId = psPaymentCard.cardOwnerId
  81.         paymentCard.accountOwnerId = psPaymentCard.accountOwnerId ?? psPaymentCard.cardOwnerId
  82.         paymentCard.expirationDate = psPaymentCard.expirationDate
  83.         paymentCard.deliveryDate = psPaymentCard.shippingDate ?? Date().addingTimeInterval(604800)
  84.         paymentCard.accountNumber = psPaymentCard.accountNumber
  85.         paymentCard.maskedNumber = psPaymentCard.maskedNumber
  86.         paymentCard.ownerName = psPaymentCard.nameOnCard
  87.         paymentCard.visualType = psPaymentCard.visualType
  88.        
  89.         if let main = psPaymentCard.main {
  90.             paymentCard.main = main
  91.         }
  92.        
  93.         if let accountOwnerId = psPaymentCard.accountOwnerId {
  94.             paymentCard.accountOwnerId = accountOwnerId
  95.         }
  96.        
  97.         paymentCard.status = psPaymentCard.status
  98.         paymentCard.type = psPaymentCard.account?.type
  99.        
  100. //        let paymentCard = self.paymentCardRepository
  101. //        .findAll()
  102. //        .filter { paymentCard in
  103. //            return paymentCard.id == psPaymentCard.id
  104. //        }.first
  105.        
  106.         // ##################### BUT IS CRASHES HERE #################
  107.         if let paymentCard = self.paymentCardRepository.find(psPaymentCard.id),
  108.             let paymentCardLimit = paymentCard.limit
  109.         {
  110.            
  111.             paymentCard.limit = paymentCardLimit
  112.            
  113.         } else {
  114.             paymentCard.limit = PaymentCardLimit()
  115.         }
  116. //
  117. //        if paymentCard.limit == nil {
  118. //            paymentCard.limit = PaymentCardLimit()
  119. //        }
  120.        
  121.         return paymentCard
  122.     }
  123.  
  124.  
  125. private func synchronizeCardLimit(for paymentCards: [PaymentCard]) -> [Promise<Bool>] {
  126.        
  127.         return paymentCards.map { paymentCard -> Promise<Bool> in
  128.             Promise<Bool> { value in
  129.                 self.paymentCardApiManager
  130.                     .getPaymentCardLimit(accountNumber: paymentCard.accountNumber)
  131.                     .done { psPaymentCardLimit in
  132. //                        let paymentCardLimit = self.createPaymentCardLimit(psPaymentCardLimit)
  133.                         try! self.realm.write {
  134.                             paymentCard.limit.amount = psPaymentCardLimit.amount.amount
  135.                             paymentCard.limit.currency = psPaymentCardLimit.amount.currency
  136.                             value.fulfill(true)
  137.                         }
  138.                     }.catch { error  in
  139.                         value.reject(error)
  140.                 }
  141.             }
  142.         }
  143.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement