Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | 8x 8x 8x 8x 8x 8x 8x 8x 8x 6x 6x 6x 6x 6x 6x 6x 53x 53x 52x 48x 5x 5x 5x 5x 53x 5x 48x 4x 44x 2x 42x 1x 41x 9x 32x 31x 1x | import { inject, injectable } from "inversify"; import TransactionType from "../../core/enums/transactionType"; import UnsupportedTxnError from "../../core/errors/unsupportedTxnError"; import { TransactionTypeExtensions } from "../../core/extensions/transactionTypeExtensions"; import PaymentDetails from "../types/paymentDetails"; import { AbstractPaymentDetailsStrategy } from "../strategies/abstractPaymentDetailsStrategy"; import { injectables } from "../../core/types/injectables"; import { ICardOperationStrategy, ICrossBorderTransferFeeStrategy, ICrossBorderTransferStrategy, IDeskWithdrawalStrategy, IStandardFeeStrategy, IStandardTransferStrategy } from "../../core/types/paymentDetailsStrategies"; import ILogger from "../../core/contracts/ILogger"; import Constants from "../../constants"; import PaymentDetailsProcessingError from "../errors/paymentDetailsProcessingError"; @injectable() export default class PaymentDetailsContext { private readonly logger; private readonly cardOperationStrategy; private readonly crossBorderTransferStrategy; private readonly crossBorderTransferFeeStrategy; private readonly deskWithdrawalStrategy; private readonly standardFeeStrategy; private readonly standardTransferStrategy; public constructor( @inject(injectables.ILogger) logger: ILogger, @inject(injectables.ICardOperationStrategy) cardOperationStrategy: ICardOperationStrategy, @inject(injectables.ICrossBorderTransferStrategy) crossBorderTransferStrategy: ICrossBorderTransferStrategy, @inject(injectables.ICrossBorderTransferFeeStrategy) crossBorderTransferFeeStrategy: ICrossBorderTransferFeeStrategy, @inject(injectables.IDeskWithdrawalStrategy) deskWithdrawalStrategy: IDeskWithdrawalStrategy, @inject(injectables.IStandardFeeStrategy) standardFeeStrategy: IStandardFeeStrategy, @inject(injectables.IStandardTransferStrategy) standardTransferStrategy: IStandardTransferStrategy ) { this.logger = logger; this.cardOperationStrategy = cardOperationStrategy; this.crossBorderTransferStrategy = crossBorderTransferStrategy; this.crossBorderTransferFeeStrategy = crossBorderTransferFeeStrategy; this.deskWithdrawalStrategy = deskWithdrawalStrategy; this.standardFeeStrategy = standardFeeStrategy; this.standardTransferStrategy = standardTransferStrategy; } public resolve(reference: string, transactionType: TransactionType, paymentDetailsRaw: string[], additionalDetailsRaw: string[]) { try { const paymentDetailsStrategy = this.tryGetStrategyByType(transactionType); const paymentDetails = paymentDetailsStrategy.tryCreate(paymentDetailsRaw, additionalDetailsRaw); return paymentDetails; } catch(ex) { if (ex instanceof UnsupportedTxnError || ex instanceof PaymentDetailsProcessingError) { this.logger.warn(ex.message, { transactionReference: reference }); this.logger.log(`Falling back to using default payment details body...`, { transactionReference: reference, transactionType: transactionType }); return Constants.defaultPaymentDetails; } throw ex; } } /** * @throws UnsupportedTxnError **/ private tryGetStrategyByType(transactionType: TransactionType): AbstractPaymentDetailsStrategy<PaymentDetails> { if (TransactionTypeExtensions.isCardOperation(transactionType)) { return this.cardOperationStrategy; } else if (TransactionTypeExtensions.isCrossBorderTransfer(transactionType)) { return this.crossBorderTransferStrategy; } else if (TransactionTypeExtensions.isCrossBorderTransferFee(transactionType)) { return this.crossBorderTransferFeeStrategy; } else if (TransactionTypeExtensions.isDeskWithdrawal(transactionType)) { return this.deskWithdrawalStrategy; } else if (TransactionTypeExtensions.isStandardFee(transactionType)) { return this.standardFeeStrategy; } else if (TransactionTypeExtensions.isStandardTransfer(transactionType)) { return this.standardTransferStrategy; } else { throw new UnsupportedTxnError(transactionType); } } } |