Created
March 5, 2021 12:44
-
-
Save matiasdim/127a46e8f00e92b8f2d5f21aa0733771 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// ArrangementConverter.swift | |
// Banesco | |
// | |
// Created by Matías Gil Echavarría on 4/03/21. | |
// | |
import ArrangementsClient2 | |
import RetailAccountsAndTransactionsJourney | |
import ClientCommon | |
struct ArrangementConverter { | |
static func convert(_ summaryAggregatedBalance: ArrangementsClient2.SummaryAggregatedBalance) -> RetailAccountsAndTransactionsJourney.SummaryAggregatedBalance { | |
return .init(currency: summaryAggregatedBalance.currency, | |
value: summaryAggregatedBalance.value, | |
additions: summaryAggregatedBalance.additions) | |
} | |
// MARK: - Current Account Converter | |
static func convert(_ account: ArrangementsClient2.CurrentAccount) -> RetailAccountsAndTransactionsJourney.CurrentAccount { | |
return .init(bookedBalance: account.bookedBalance, | |
availableBalance: account.availableBalance, | |
creditLimit: account.creditLimit, | |
iban: account.IBAN, | |
bban: account.BBAN, | |
currency: account.currency, | |
urgentTransferAllowed: account.urgentTransferAllowed, | |
bic: account.BIC, | |
bankBranchCode: account.bankBranchCode, | |
accountInterestRate: account.accountInterestRate, | |
valueDateBalance: account.valueDateBalance, | |
creditLimitUsage: account.creditLimitUsage, | |
creditLimitInterestRate: account.creditLimitInterestRate, | |
creditLimitExpiryDate: account.creditLimitExpiryDate, | |
accruedInterest: account.accruedInterest, | |
debitCardsItems: [] /* account.debitCardsItems.map(DebitCardItem.init) */, | |
accountHolderNames: account.accountHolderNames, | |
startDate: account.startDate, | |
minimumRequiredBalance: account.minimumRequiredBalance, | |
accountHolderAddressLine1: account.accountHolderAddressLine1, | |
accountHolderAddressLine2: account.accountHolderAddressLine2, | |
accountHolderStreetName: account.accountHolderStreetName, | |
town: account.town, | |
postCode: account.postCode, | |
countrySubDivision: account.countrySubDivision, | |
creditAccount: account.creditAccount, | |
debitAccount: account.debitAccount, | |
accountHolderCountry: account.accountHolderCountry, | |
additions: account.additions, | |
identifier: account.id, | |
name: account.name, | |
externalTransferAllowed: account.externalTransferAllowed, | |
crossCurrencyAllowed: account.crossCurrencyAllowed, | |
productKindName: account.productKindName, | |
productTypeName: account.productTypeName, | |
bankAlias: account.bankAlias, | |
sourceId: account.sourceId, | |
visible: account.visible, | |
accountOpeningDate: account.accountOpeningDate, | |
lastUpdateDate: account.lastUpdateDate, | |
userPreferences: nil /* account.userPreferences != nil ? UserPreferences(account.userPreferences!): nil*/, | |
state: nil /* account.state != nil ? StateItem(account.state!): nil */, | |
parentId: account.parentId, | |
subArrangements: nil /* account.subArrangements != nil ? account.subArrangements!.map(BaseProduct.init): nil */, | |
financialInstitutionId: account.financialInstitutionId, | |
lastSyncDate: account.lastSyncDate) | |
} | |
static func convert(_ accounts: ArrangementsClient2.CurrentAccountProductKinds) -> RetailAccountsAndTransactionsJourney.CurrentAccountProductKinds? { | |
return .init(products: accounts.products.map(Self.convert), | |
additions: accounts.additions, | |
name: accounts.name, | |
aggregatedBalance: accounts.aggregatedBalance != nil ? Self.convert(accounts.aggregatedBalance!) : nil) | |
} | |
// MARK: - Savings Account Converter | |
static func convert(_ account: ArrangementsClient2.SavingsAccount) -> RetailAccountsAndTransactionsJourney.SavingsAccount { | |
return .init(bookedBalance: account.bookedBalance, | |
availableBalance: account.availableBalance, | |
accruedInterest: account.accruedInterest, | |
iban: account.IBAN, | |
bban: account.BBAN, | |
currency: account.currency, | |
urgentTransferAllowed: account.urgentTransferAllowed, | |
bic: account.BIC, | |
bankBranchCode: account.bankBranchCode, | |
accountInterestRate: account.accountInterestRate, | |
minimumRequiredBalance: account.minimumRequiredBalance, | |
startDate: account.startDate, | |
termUnit: nil, //account.termUnit, | |
termNumber: account.termNumber, | |
maturityDate: account.maturityDate, | |
maturityAmount: account.maturityAmount, | |
autoRenewalIndicator: account.autoRenewalIndicator, | |
interestPaymentFrequencyUnit: nil,//account.interestPaymentFrequencyUnit, | |
interestPaymentFrequencyNumber: account.interestPaymentFrequencyNumber, | |
principalAmount: account.principalAmount, | |
interestSettlementAccount: account.interestSettlementAccount, | |
accountHolderNames: account.accountHolderNames, | |
valueDateBalance: account.valueDateBalance, | |
accountHolderAddressLine1: account.accountHolderAddressLine1, | |
accountHolderAddressLine2: account.accountHolderAddressLine2, | |
accountHolderStreetName: account.accountHolderStreetName, | |
town: account.town, | |
postCode: account.postCode, | |
countrySubDivision: account.countrySubDivision, | |
accountHolderCountry: account.accountHolderCountry, | |
creditAccount: account.creditAccount, | |
debitAccount: account.debitAccount, | |
additions: account.additions, | |
identifier: account.id, | |
name: account.name, | |
externalTransferAllowed: account.externalTransferAllowed, | |
crossCurrencyAllowed: account.crossCurrencyAllowed, | |
productKindName: account.productKindName, | |
productTypeName: account.productTypeName, | |
bankAlias: account.bankAlias, | |
sourceId: account.sourceId, | |
visible: account.visible, | |
accountOpeningDate: account.accountOpeningDate, | |
lastUpdateDate: account.lastUpdateDate, | |
userPreferences: nil, //account.userPreferences, | |
state: nil, // account.state, | |
parentId: account.parentId, | |
subArrangements: nil, //account.subArrangements, | |
financialInstitutionId: account.financialInstitutionId, | |
lastSyncDate: account.lastSyncDate) | |
} | |
static func convert(_ accounts: ArrangementsClient2.SavingsAccountProductKinds) -> RetailAccountsAndTransactionsJourney.SavingsAccountProductKinds? { | |
return .init(products: accounts.products.map(Self.convert), | |
additions: accounts.additions, | |
name: accounts.name, | |
aggregatedBalance: accounts.aggregatedBalance != nil ? Self.convert(accounts.aggregatedBalance!) : nil) | |
} | |
// MARK: - Term Deposit Converter | |
static func convert(_ account: ArrangementsClient2.TermDeposit) -> RetailAccountsAndTransactionsJourney.TermDeposit { | |
return .init(bookedBalance: account.bookedBalance, | |
principalAmount: account.principalAmount, | |
accruedInterest: account.accruedInterest, | |
iban: account.IBAN, | |
bban: account.BBAN, | |
currency: account.currency, | |
urgentTransferAllowed: account.urgentTransferAllowed, | |
productNumber: account.productNumber, | |
accountInterestRate: account.accountInterestRate, | |
startDate: account.startDate, | |
termUnit: nil,//account.termUnit, | |
termNumber: account.termNumber, | |
maturityDate: account.maturityDate, | |
maturityAmount: account.maturityAmount, | |
autoRenewalIndicator: account.autoRenewalIndicator, | |
interestPaymentFrequencyUnit: nil,//account.interestPaymentFrequencyUnit, | |
interestPaymentFrequencyNumber: account.interestPaymentFrequencyNumber, | |
interestSettlementAccount: account.interestSettlementAccount, | |
valueDateBalance: account.valueDateBalance, | |
accountHolderNames: account.accountHolderNames, | |
outstandingPrincipalAmount: account.outstandingPrincipalAmount, | |
creditAccount: account.creditAccount, | |
debitAccount: account.debitAccount, | |
minimumRequiredBalance: account.minimumRequiredBalance, | |
additions: account.additions, | |
identifier: account.id, | |
name: account.name, | |
externalTransferAllowed: account.externalTransferAllowed, | |
crossCurrencyAllowed: account.crossCurrencyAllowed, | |
productKindName: account.productKindName, | |
productTypeName: account.productTypeName, | |
bankAlias: account.bankAlias, | |
sourceId: account.sourceId, | |
visible: account.visible, | |
accountOpeningDate: account.accountOpeningDate, | |
lastUpdateDate: account.lastUpdateDate, | |
userPreferences: nil,//account.userPreferences, | |
state: nil,//account.state, | |
parentId: account.parentId, | |
subArrangements: nil,//account.subArrangements, | |
financialInstitutionId: account.financialInstitutionId, | |
lastSyncDate: account.lastSyncDate) | |
} | |
static func convert(_ accounts: ArrangementsClient2.TermDepositProductKinds) -> RetailAccountsAndTransactionsJourney.TermDepositProductKinds? { | |
return .init(products: accounts.products.map(Self.convert), | |
additions: accounts.additions, | |
name: accounts.name, | |
aggregatedBalance: accounts.aggregatedBalance != nil ? Self.convert(accounts.aggregatedBalance!) : nil) | |
} | |
// MARK: - Loans Converter | |
static func convert(_ account: ArrangementsClient2.Loan) -> RetailAccountsAndTransactionsJourney.Loan { | |
return .init(bookedBalance: account.bookedBalance, | |
principalAmount: account.principalAmount, | |
currency: account.currency, | |
urgentTransferAllowed: account.urgentTransferAllowed, | |
productNumber: account.productNumber, | |
accountInterestRate: account.accountInterestRate, | |
termUnit: nil,//account.termUnit, | |
termNumber: account.termNumber, | |
outstandingPrincipalAmount: account.outstandingPrincipalAmount, | |
monthlyInstalmentAmount: account.monthlyInstalmentAmount, | |
amountInArrear: account.amountInArrear, | |
interestSettlementAccount: account.interestSettlementAccount, | |
accruedInterest: account.accruedInterest, | |
accountHolderNames: account.accountHolderNames, | |
maturityDate: account.maturityDate, | |
valueDateBalance: account.valueDateBalance, | |
creditAccount: account.creditAccount, | |
debitAccount: account.debitAccount, | |
iban: account.IBAN, | |
bban: account.BBAN, | |
additions: account.additions, | |
identifier: account.id, | |
name: account.name, | |
externalTransferAllowed: account.externalTransferAllowed, | |
crossCurrencyAllowed: account.crossCurrencyAllowed, | |
productKindName: account.productKindName, | |
productTypeName: account.productTypeName, | |
bankAlias: account.bankAlias, | |
sourceId: account.sourceId, | |
visible: account.visible, | |
accountOpeningDate: account.accountOpeningDate, | |
lastUpdateDate: account.lastUpdateDate, | |
userPreferences: nil,//account.userPreferences, | |
state: nil,//account.state, | |
parentId: account.parentId, | |
subArrangements: nil,//account.subArrangements, | |
financialInstitutionId: account.financialInstitutionId, | |
lastSyncDate: account.lastSyncDate) | |
} | |
static func convert(_ accounts: ArrangementsClient2.LoanProductKinds) -> RetailAccountsAndTransactionsJourney.LoanProductKinds? { | |
return .init(products: accounts.products.map(Self.convert), | |
additions: accounts.additions, | |
name: accounts.name, | |
aggregatedBalance: accounts.aggregatedBalance != nil ? Self.convert(accounts.aggregatedBalance!) : nil) | |
} | |
// MARK: - Credit Card Converter | |
static func convert(_ account: ArrangementsClient2.CreditCard) -> RetailAccountsAndTransactionsJourney.CreditCard { | |
return .init(bookedBalance: account.bookedBalance, | |
availableBalance: account.availableBalance, | |
creditLimit: account.creditLimit, | |
number: account.number, | |
currency: account.currency, | |
urgentTransferAllowed: account.urgentTransferAllowed, | |
cardNumber: account.cardNumber, | |
creditCardAccountNumber: account.creditCardAccountNumber, | |
validThru: account.validThru, | |
applicableInterestRate: account.applicableInterestRate, | |
remainingCredit: account.remainingCredit, | |
outstandingPayment: account.outstandingPayment, | |
minimumPayment: account.minimumPayment, | |
minimumPaymentDueDate: account.minimumPaymentDueDate, | |
accountInterestRate: account.accountInterestRate, | |
accountHolderNames: account.accountHolderNames, | |
creditLimitUsage: account.creditLimitUsage, | |
creditLimitInterestRate: account.creditLimitInterestRate, | |
accruedInterest: account.accruedInterest, | |
additions: account.additions, | |
identifier: account.id, | |
name: account.name, | |
externalTransferAllowed: account.externalTransferAllowed, | |
crossCurrencyAllowed: account.crossCurrencyAllowed, | |
productKindName: account.productKindName, | |
productTypeName: account.productTypeName, | |
bankAlias: account.bankAlias, | |
sourceId: account.sourceId, | |
visible: account.visible, | |
accountOpeningDate: account.accountOpeningDate, | |
lastUpdateDate: account.lastUpdateDate, | |
userPreferences: nil,//account.userPreferences, | |
state: nil,//account.state, | |
parentId: account.parentId, | |
subArrangements: nil,//account.subArrangements, | |
financialInstitutionId: account.financialInstitutionId, | |
lastSyncDate: account.lastSyncDate) | |
} | |
static func convert(_ accounts: ArrangementsClient2.CreditCardProductKinds) -> RetailAccountsAndTransactionsJourney.CreditCardProductKinds? { | |
return .init(products: accounts.products.map(Self.convert), | |
additions: accounts.additions, | |
name: accounts.name, | |
aggregatedBalance: accounts.aggregatedBalance != nil ? Self.convert(accounts.aggregatedBalance!) : nil) | |
} | |
// MARK: - Debit Card Converter | |
static func convert(_ account: ArrangementsClient2.DebitCard) -> RetailAccountsAndTransactionsJourney.DebitCard { | |
return .init(number: account.number, | |
urgentTransferAllowed: account.urgentTransferAllowed, | |
cardNumber: account.cardNumber, | |
accountInterestRate: account.accountInterestRate, | |
accountHolderNames: account.accountHolderNames, | |
debitCardsItems: [],//account.debitCardsItems, | |
startDate: account.startDate, | |
validThru: account.validThru, | |
additions: account.additions, | |
identifier: account.id, | |
name: account.name, | |
externalTransferAllowed: account.externalTransferAllowed, | |
crossCurrencyAllowed: account.crossCurrencyAllowed, | |
productKindName: account.productKindName, | |
productTypeName: account.productTypeName, | |
bankAlias: account.bankAlias, | |
sourceId: account.sourceId, | |
visible: account.visible, | |
accountOpeningDate: account.accountOpeningDate, | |
lastUpdateDate: account.lastUpdateDate, | |
userPreferences: nil,//account.userPreferences, | |
state: nil,//account.state, | |
parentId: account.parentId, | |
subArrangements: nil,//account.subArrangements, | |
financialInstitutionId: account.financialInstitutionId, | |
lastSyncDate: account.lastSyncDate) | |
} | |
static func convert(_ accounts: ArrangementsClient2.DebitCardProductKinds) -> RetailAccountsAndTransactionsJourney.DebitCardProductKinds? { | |
return .init(products: accounts.products.map(Self.convert), | |
additions: accounts.additions, | |
name: accounts.name, | |
aggregatedBalance: accounts.aggregatedBalance != nil ? Self.convert(accounts.aggregatedBalance!) : nil) | |
} | |
// MARK: - Investment Accounts Converter | |
static func convert(_ account: ArrangementsClient2.InvestmentAccount) -> RetailAccountsAndTransactionsJourney.InvestmentAccount { | |
return .init(currentInvestmentValue: account.currentInvestmentValue, | |
currency: account.currency, | |
urgentTransferAllowed: account.urgentTransferAllowed, | |
productNumber: account.productNumber, | |
iban: account.IBAN, | |
bban: account.BBAN, | |
additions: account.additions, | |
identifier: account.id, | |
name: account.name, | |
externalTransferAllowed: account.externalTransferAllowed, | |
crossCurrencyAllowed: account.crossCurrencyAllowed, | |
productKindName: account.productKindName, | |
productTypeName: account.productTypeName, | |
bankAlias: account.bankAlias, | |
sourceId: account.sourceId, | |
visible: account.visible, | |
accountOpeningDate: account.accountOpeningDate, | |
lastUpdateDate: account.lastUpdateDate, | |
userPreferences: nil,//account.userPreferences, | |
state: nil,//account.state, | |
parentId: account.parentId, | |
subArrangements: nil,//account.subArrangements, | |
financialInstitutionId: account.financialInstitutionId, | |
lastSyncDate: account.lastSyncDate) | |
} | |
static func convert(_ accounts: ArrangementsClient2.InvestmentAccountProductKinds) -> RetailAccountsAndTransactionsJourney.InvestmentAccountProductKinds? { | |
return .init(products: accounts.products.map(Self.convert), | |
additions: accounts.additions, | |
name: accounts.name, | |
aggregatedBalance: accounts.aggregatedBalance != nil ? Self.convert(accounts.aggregatedBalance!) : nil) | |
} | |
// MARK: - Base Converter Method | |
static func convert(_ summary: ArrangementsClient2.ProductSummary) -> RetailAccountsAndTransactionsJourney.ProductSummary { | |
let aggregatedBalance = summary.aggregatedBalance != nil ? Self.convert(summary.aggregatedBalance!) : nil | |
let currentAccounts = summary.currentAccounts != nil ? Self.convert(summary.currentAccounts!) : nil | |
let savingsAccounts = summary.savingsAccounts != nil ? Self.convert(summary.savingsAccounts!) : nil | |
let termDeposits = summary.termDeposits != nil ? Self.convert(summary.termDeposits!) : nil | |
let loans = summary.loans != nil ? Self.convert(summary.loans!) : nil | |
let creditCards = summary.creditCards != nil ? Self.convert(summary.creditCards!) : nil | |
let debitCards = summary.debitCards != nil ? Self.convert(summary.debitCards!) : nil | |
let investmentAccounts = summary.investmentAccounts != nil ? Self.convert(summary.investmentAccounts!) : nil | |
// let customProductKinds = summary.customProductKinds.map(CustomProductKind.init) | |
let additions = summary.additions | |
return RetailAccountsAndTransactionsJourney.ProductSummary.init(aggregatedBalance: aggregatedBalance, | |
currentAccounts: currentAccounts, | |
savingsAccounts: savingsAccounts, | |
termDeposits: termDeposits, | |
loans: loans, | |
creditCards: creditCards, | |
debitCards: debitCards, | |
investmentAccounts: investmentAccounts, | |
customProductKinds: summary.customProductKinds.map(CustomProductKind.init), | |
additions: additions) | |
// return .init(aggregatedBalance: aggregatedBalance, | |
// currentAccounts: currentAccounts, | |
// savingsAccounts: savingsAccounts, | |
// termDeposits: termDeposits, | |
// loans: loans, | |
// creditCards: creditCards, | |
// debitCards: debitCards, | |
// investmentAccounts: investmentAccounts, | |
// customProductKinds: summary.customProductKinds.map(CustomProductKind.init), | |
// additions: additions) | |
} | |
} | |
struct ErrorResponseConverter { | |
static func convert(_ errorResponse: ClientCommon.ErrorResponse) -> RetailAccountsAndTransactionsJourney.ErrorResponse { | |
switch errorResponse { | |
case let .error(code, data, error): | |
return .init(statusCode: code, data: data, error: error) | |
@unknown default: | |
fatalError() | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment