UNPKG

@lomray/microservice-payment-stripe

Version:

Stripe payment microservice based on NodeJS & inverted json.

68 lines (64 loc) 3.03 kB
'use strict'; 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;