@lomray/microservice-payment-stripe
Version:
Stripe payment microservice based on NodeJS & inverted json.
104 lines (100 loc) • 4.19 kB
JavaScript
;
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;