Sequelize context implementation for multiple-transaction-manager library.
Please refer to the test cases for a sample use case
txnMngr
: {MultiTxnMngr} The multiple transaction manager to to bind with the context.sequilize
: {Sequelize} The Sequelize instance.- Returns: {SeqDBContext} The created SeqDBContext instance.
Adds a task to the transaction manager.
execFunc
: {(sequilize: Sequelize, txn: Transaction, task: Task) => Promise<unknown | undefined>) | undefined} The function to be executes in promise. Sequelize and current transaction instances are provided to the function.- Returns: {SeqDBTask} Returns the created SeqDBTask instance.
A shortcut to add a SQL task to the transaction manager.
querySql
: {string} The query string to be executes in promise.params
: {unknown | undefined} Optional parameter object to bind SQL statement variables.- Returns: {SeqDBTask} The created SeqDBTask instance.
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) => Promise<unknown | undefined>) | undefined} Sequelize and current transaction instances are provided to the function.- Returns: {SeqDBTask} The created SeqDBTask instance.
https://github.com/kaplanke/mtxn-sequelize/blob/master/test/mtxn.seq.test.ts
// 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<unknown | undefined>((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");