Multiple Transaction Manager Sequelize adapter
npm install @multiple-transaction-manager/sequelizeconstructor(txnMngr, sequilize)
txnMngr: _{MultiTxnMngr}_ The multiple transaction manager to to bind with the context.
sequilize: _{Sequelize}_ The Sequelize instance.
addFunctionTask(execFunc)
execFunc: _{(sequilize: Sequelize, txn: Transaction, task: Task) => PromiseaddTask(querySql: string, params?: unknown | undefined)
querySql: _{string}_ The query string to be executes in promise.
params: _{unknown | undefined}_ Optional parameter object to bind SQL statement variables.
constructor(context, querySql, params, execFunc)
context: _{SeqDBContext}_ The _SeqDBContext_ to to bind with the task.
querySql: _{string}_ The query string to be executes in promise. __Ignored if execFunc parameter is provided__.
params: _{unknown | undefined}_ Optional parameter object to bind SQL statement variables. __Ignored if execFunc parameter is provided__.
execFunc: _{(sequilize: Sequelize, txn: Transaction, task: Task) => Promisejs
// init manager & context
const txnMngr: MultiTxnMngr = new MultiTxnMngr();
const seqContext = new SeqDBContext(txnMngr, sequelize);
// Add first step
seqContext.addTask("DELETE FROM Students");
// Add second step
seqContext.addTask(
"INSERT INTO Students(id, name, createdAt, updatedAt) VALUES ($id, $name, date(), date())",
{ "id": 1, "name": "Dave" }
);
// Add second step
seqContext.addFunctionTask(
(_sequelize, txn, _task) => {
return new Promise((resolve, reject) => {
Student.create(
{ id: 2, name: "Kevin" },
{ transaction: txn }
).then((newUser) => {
resolve(newUser)
}).catch((err) => {
reject(err);
});
});
});
// Add control step
const controlTask: Task = seqContext.addTask("SELECT * FROM Students");
await txnMngr.exec();
expect(controlTask.getResult().results[1]["name"]).toEqual("Kevin");
``