1.0.5 • Published 1 year ago

@multiple-transaction-manager/sequelize v1.0.5

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

@multiple-transaction-manager/sequelize

Sequelize context implementation for multiple-transaction-manager library.

Please refer to the test cases for a sample use case

API

Classes

SeqDBContext

constructor(txnMngr, sequilize)

  • txnMngr: {MultiTxnMngr} The multiple transaction manager to to bind with the context.
  • sequilize: {Sequelize} The Sequelize instance.
  • Returns: {SeqDBContext} The created SeqDBContext instance.

addFunctionTask(execFunc)

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.

addTask(querySql: string, params?: unknown | undefined)

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.

SeqDBTask

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) => Promise<unknown | undefined>) | undefined} Sequelize and current transaction instances are provided to the function.
  • Returns: {SeqDBTask} The created SeqDBTask instance.

Example

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");