Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Currently this are my findings
- 1. NULL PAYMENT CARD LIMIT
- this is caused by createPaymentCard in PaymentCardSynchronizationManager.swift because
- private func createPaymentCard(_ psPaymentCard: PSPaymentCard?) -> PaymentCard? {
- guard let psPaymentCard = psPaymentCard else {
- return nil
- }
- let paymentCard = PaymentCard()
- paymentCard.id = psPaymentCard.id
- paymentCard.cardOwnerId = psPaymentCard.cardOwnerId
- paymentCard.accountOwnerId = psPaymentCard.accountOwnerId ?? psPaymentCard.cardOwnerId
- paymentCard.expirationDate = psPaymentCard.expirationDate
- paymentCard.deliveryDate = psPaymentCard.shippingDate ?? Date().addingTimeInterval(604800)
- paymentCard.accountNumber = psPaymentCard.accountNumber
- paymentCard.maskedNumber = psPaymentCard.maskedNumber
- paymentCard.ownerName = psPaymentCard.nameOnCard
- paymentCard.visualType = psPaymentCard.visualType
- if let main = psPaymentCard.main {
- paymentCard.main = main
- }
- if let accountOwnerId = psPaymentCard.accountOwnerId {
- paymentCard.accountOwnerId = accountOwnerId
- }
- paymentCard.status = psPaymentCard.status
- paymentCard.type = psPaymentCard.account?.type
- // 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()""
- if paymentCard.limit == nil {
- paymentCard.limit = PaymentCardLimit()
- }
- return paymentCard
- }
- 2. DUPLICATE CARD LIMIT
- since in number 1 we created a new row in realm for Payment Card limit that has no value (NULL) in
- private func synchronizeCardLimit(for paymentCards: [PaymentCard]) -> [Promise<Bool>] {
- return paymentCards.map { paymentCard -> Promise<Bool> in
- Promise<Bool> { value in
- self.paymentCardApiManager
- .getPaymentCardLimit(accountNumber: paymentCard.accountNumber)
- .done { psPaymentCardLimit in
- // here we are creating again a new instance of payment card limit but now
- // we are putting some value from psPaymentCardLimit
- // so everytime "synchronizeCardLimit" is called we are adding new value in realm
- let paymentCardLimit = self.createPaymentCardLimit(psPaymentCardLimit)
- try! self.realm.write {
- // this doest not actually update the old value of "paymentCardLimit" but insert a new one
- // but updates the paymentCard.limit with new Object
- paymentCard.limit = paymentCardLimit
- value.fulfill(true)
- }
- }.catch { error in
- value.reject(error)
- }
- }
- }
- }
- Possible solution so far
- private func createPaymentCard(_ psPaymentCard: PSPaymentCard?) -> PaymentCard? {
- guard let psPaymentCard = psPaymentCard else {
- return nil
- }
- let paymentCard = PaymentCard()
- paymentCard.id = psPaymentCard.id
- paymentCard.cardOwnerId = psPaymentCard.cardOwnerId
- paymentCard.accountOwnerId = psPaymentCard.accountOwnerId ?? psPaymentCard.cardOwnerId
- paymentCard.expirationDate = psPaymentCard.expirationDate
- paymentCard.deliveryDate = psPaymentCard.shippingDate ?? Date().addingTimeInterval(604800)
- paymentCard.accountNumber = psPaymentCard.accountNumber
- paymentCard.maskedNumber = psPaymentCard.maskedNumber
- paymentCard.ownerName = psPaymentCard.nameOnCard
- paymentCard.visualType = psPaymentCard.visualType
- if let main = psPaymentCard.main {
- paymentCard.main = main
- }
- if let accountOwnerId = psPaymentCard.accountOwnerId {
- paymentCard.accountOwnerId = accountOwnerId
- }
- paymentCard.status = psPaymentCard.status
- paymentCard.type = psPaymentCard.account?.type
- // let paymentCard = self.paymentCardRepository
- // .findAll()
- // .filter { paymentCard in
- // return paymentCard.id == psPaymentCard.id
- // }.first
- // ##################### BUT IS CRASHES HERE #################
- if let paymentCard = self.paymentCardRepository.find(psPaymentCard.id),
- let paymentCardLimit = paymentCard.limit
- {
- paymentCard.limit = paymentCardLimit
- } else {
- paymentCard.limit = PaymentCardLimit()
- }
- //
- // if paymentCard.limit == nil {
- // paymentCard.limit = PaymentCardLimit()
- // }
- return paymentCard
- }
- private func synchronizeCardLimit(for paymentCards: [PaymentCard]) -> [Promise<Bool>] {
- return paymentCards.map { paymentCard -> Promise<Bool> in
- Promise<Bool> { value in
- self.paymentCardApiManager
- .getPaymentCardLimit(accountNumber: paymentCard.accountNumber)
- .done { psPaymentCardLimit in
- // let paymentCardLimit = self.createPaymentCardLimit(psPaymentCardLimit)
- try! self.realm.write {
- paymentCard.limit.amount = psPaymentCardLimit.amount.amount
- paymentCard.limit.currency = psPaymentCardLimit.amount.currency
- value.fulfill(true)
- }
- }.catch { error in
- value.reject(error)
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement