@lomray/microservice-payment-stripe
Version:
Stripe payment microservice based on NodeJS & inverted json.
68 lines (64 loc) • 3.03 kB
JavaScript
;
var tslib = require('tslib');
var payout = require('../../entities/payout.js');
var extractIdFromStripeInstance = require('../../helpers/extract-id-from-stripe-instance.js');
var parser = require('../parser.js');
/**
* Payout webhook handlers
*/
class Payout {
/**
* @constructor
*/
constructor(manager) {
this.manager = manager;
}
/**
* Handle payout occur
* @description Payout can be created or updated
*/
handlePayoutOccur(event) {
return tslib.__awaiter(this, void 0, void 0, function* () {
const { id: payoutId, amount, description, method, type, destination, arrival_date: arrivalDate, status, failure_code: failureCode, failure_message: failureMessage, currency, created, } = event.data.object;
// Common data
const data = Object.assign({ type: parser.parseStripePayoutType(type), arrivalDate: new Date(Number(arrivalDate) * 1000), registeredAt: new Date(Number(created) * 1000), status: parser.parseStripePayoutStatus(status), method: method }, (destination ? { destination: extractIdFromStripeInstance(destination) } : {}));
// Add deps in transaction
yield this.manager.transaction((entityManager) => tslib.__awaiter(this, void 0, void 0, function* () {
const payoutRepository = entityManager.getRepository(payout);
const payout$1 = yield payoutRepository.findOne({
where: {
payoutId,
},
});
if (!payout$1) {
const payoutEntity = payoutRepository.create(Object.assign({ amount, arrivalDate: data.arrivalDate, method: data.method, payoutId,
description,
failureCode,
failureMessage,
currency, type: data.type, status: data.status, registeredAt: data.registeredAt }, (data.destination ? { destination: data.destination } : {})));
yield payoutRepository.save(payoutEntity);
return;
}
// Do not update payout if event: created
if (event.type === 'payout.created') {
return;
}
if (data.destination) {
payout$1.destination = data.destination;
}
payout$1.amount = amount;
payout$1.arrivalDate = data.arrivalDate;
payout$1.method = data.method;
payout$1.description = description;
payout$1.failureMessage = failureMessage;
payout$1.failureCode = failureCode;
payout$1.currency = currency;
payout$1.type = data.type;
payout$1.status = data.status;
payout$1.registeredAt = data.registeredAt;
yield payoutRepository.save(payout$1);
}));
});
}
}
module.exports = Payout;