UNPKG

@lomray/microservice-payment-stripe

Version:

Stripe payment microservice based on NodeJS & inverted json.

104 lines (100 loc) 4.19 kB
'use strict'; var tslib = require('tslib'); var microserviceNodejsLib = require('@lomray/microservice-nodejs-lib'); var Event = require('@lomray/microservices-client-api/constants/events/payment-stripe'); var toExpirationDate = require('../../helpers/formatters/to-expiration-date.js'); var messages = require('../../helpers/validators/messages.js'); var card = require('../../repositories/card.js'); /** * Payment method webhook handlers */ class PaymentMethod { /** * @constructor */ constructor(manager) { this.manager = manager; this.cardRepository = manager.getCustomRepository(card); } /** * Handles payment method update * @description Expected card that can be setup via setupIntent */ handlePaymentMethodUpdated(event) { var _a, _b; return tslib.__awaiter(this, void 0, void 0, function* () { const { id, card: cardPaymentMethod, billing_details: billing, } = event.data.object; if (!cardPaymentMethod) { throw new microserviceNodejsLib.BaseException({ status: 500, message: "Payment method card wasn't provided", }); } const card = yield this.cardRepository .createQueryBuilder('card') .where(`card.params->>'paymentMethodId' = :value OR card."paymentMethodId" = :value`, { value: id, }) .getOne(); if (!card) { throw new microserviceNodejsLib.BaseException({ status: 500, message: messages.getNotFoundMessage('Payment method'), }); } const { exp_month: expMonth, exp_year: expYear, last4: lastDigits, brand, funding, issuer, country, } = cardPaymentMethod; const expired = toExpirationDate(expMonth, expYear); card.lastDigits = lastDigits; card.expired = expired; card.brand = brand; card.funding = funding; card.origin = country; // If billing was updated to null - SHOULD set null card.country = ((_a = billing.address) === null || _a === void 0 ? void 0 : _a.country) || null; card.postalCode = ((_b = billing.address) === null || _b === void 0 ? void 0 : _b.postal_code) || null; card.params.issuer = issuer; yield this.cardRepository.save(card); yield microserviceNodejsLib.Microservice.eventPublish(Event.PaymentMethodUpdated, { funding, brand, expired, lastDigits, cardId: card.id, }); }); } /** * Handles payment method detach * @description Card and other payment methods should be removed in according subscribers * @TODO: Handle other payment methods if needed */ handlePaymentMethodDetached(event) { return tslib.__awaiter(this, void 0, void 0, function* () { const { id: paymentMethodId, card: cardPaymentMethod } = event.data .object; if (!cardPaymentMethod) { throw new microserviceNodejsLib.BaseException({ status: 500, message: "Payment method card wasn't provided", }); } const card = yield this.cardRepository .createQueryBuilder('card') .where(`card.params->>'paymentMethodId' = :value OR card."paymentMethodId" = :value`, { value: paymentMethodId, }) .getOne(); if (!card) { throw new microserviceNodejsLib.BaseException({ status: 500, message: messages.getNotFoundMessage('Payment method'), }); } yield this.cardRepository.remove(card, { data: { isFromWebhook: true } }); yield microserviceNodejsLib.Microservice.eventPublish(Event.PaymentMethodRemoved, { paymentMethodId, }); }); } } module.exports = PaymentMethod;