Skip to content

Commit

Permalink
adding transaction hook
Browse files Browse the repository at this point in the history
  • Loading branch information
yohane55 authored Feb 9, 2020
1 parent 165288f commit 7aaf160
Showing 1 changed file with 65 additions and 0 deletions.
65 changes: 65 additions & 0 deletions hooks/sequelize-transaction-hook.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/* eslint-disable require-atomic-updates */
const start = (options = {}) => {
return async hook => {
if (
hook.params.transaction ||
(hook.params.sequelize && options.params.sequelize.transaction)
) {
// already in transaction probably in diffrent hook or service
// so we dont create or commit the transaction in this service
return hook;
}

const sequelize = await hook.app.get("sequelizeClient");
const transaction = await sequelize.transaction();

hook.params.transaction = transaction;
hook.params.transactionOwner = hook.path;
hook.params.sequelize = hook.params.sequelize || {};
hook.params.sequelize.transaction = transaction;

return hook;
};
};

const end = () => {
return hook => {
const { params } = hook.params;
if (
!params ||
!params.transactionOwner ||
params.transactionOwner !== hook.path
) {
// transaction probably from diffrent hook or service
// so we dont commit or rollback the transaction in this service
return hook;
}
const trx = params.sequelize.transacrion || params.transacrion;
return trx.then(t => t.commit()).then(() => hook);
};
};

const rollback = () => {
return hook => {
const { params } = hook.params;
if (
!params ||
!params.transactionOwner ||
params.transactionOwner !== hook.path
) {
// transaction probably from diffrent hook or service
// so we dont commit or rollback the transaction in this service
return hook;
}
const trx = params.sequelize.transacrion || params.transacrion;
return trx.then(t => t.rollback()).then(() => hook);
};
};

module.exports = {
transaction: {
start,
end,
rollback
}
};

0 comments on commit 7aaf160

Please sign in to comment.