@lomray/microservice-payment-stripe
Version:
Stripe payment microservice based on NodeJS & inverted json.
63 lines (59 loc) • 2.45 kB
JavaScript
;
var tslib = require('tslib');
var microserviceNodejsLib = require('@lomray/microservice-nodejs-lib');
var customer = require('../../entities/customer.js');
var messages = require('../../helpers/validators/messages.js');
var card = require('../../repositories/card.js');
/**
* Customer webhook handlers
*/
class Customer {
/**
* @constructor
*/
constructor(manager) {
this.manager = manager;
}
/**
* Handles customer update
*/
handleCustomerUpdated(event, manager) {
return tslib.__awaiter(this, void 0, void 0, function* () {
yield manager.transaction((entityManager) => tslib.__awaiter(this, void 0, void 0, function* () {
const customerRepository = entityManager.getRepository(customer);
const cardRepository = entityManager.getCustomRepository(card);
const { id, invoice_settings: invoiceSettings } = event.data.object;
/**
* @TODO: Investigate why relations return empty array
*/
const customer$1 = yield customerRepository.findOne({ customerId: id });
if (!customer$1) {
throw new microserviceNodejsLib.BaseException({
status: 500,
message: messages.getNotFoundMessage('Customer'),
});
}
const cards = yield cardRepository.find({
userId: customer$1.userId,
});
/**
* Update cards default statuses on change default card for charge
*/
yield Promise.all(cards.map((card$1) => {
card$1.isDefault =
card.extractPaymentMethodId(card$1) === invoiceSettings.default_payment_method;
return cardRepository.save(card$1);
}));
/**
* If customer has default payment method, and it's exist in stripe
*/
if (customer$1.params.hasDefaultPaymentMethod && invoiceSettings.default_payment_method) {
return;
}
customer$1.params.hasDefaultPaymentMethod = Boolean(invoiceSettings.default_payment_method);
yield customerRepository.save(customer$1);
}));
});
}
}
module.exports = Customer;