0.2.0 • Published 4 years ago

@slimio/sqlite-transaction v0.2.0

Weekly downloads
7
License
MIT
Repository
github
Last release
4 years ago

sqlite-transaction

Version Maintenance MIT dep size Known Vulnerabilities Build Status

SQLite transaction manager for SlimIO events addon. Designed to work with the sqlite npm package.

Requirements

Getting Started

This package is available in the Node Package Repository and can be easily installed with npm or yarn.

$ npm i @slimio/sqlite-transaction
# or
$ yarn add @slimio/sqlite-transaction

Usage example

Take the following example with an SQLite DB (with a table users).

const tM = new TransactionManager(db, {
    interval: 500,
    verbose: true
});
tM.registerSubject("user", {
    insert: "INSERT INTO users (username, password) VALUES (?, ?)"
});

tM.once("user.insert", (openAt, data, aData) => {
    console.log(`User insertion requested at: ${new Date(openAt)}, now successfully inserted!`);
});

const tId = tM.open("insert", "user", ["fraxken", "admin"]);
const ret = tM.attachData(tId, { foo: "bar" });

API

Create a new SQLite transaction manager. The first argument must be an SQLite db (from the npm package sqlite). Available options are described by the following interface:

interface ConstructorOptions {
    interval?: number;
    verbose?: boolean;
}

Default values are interval 5000 (milliseconds) and verbose false.

const sqlite = require("sqlite");
const transactionManager = require("@slimio/sqlite-transaction");

const db = await sqlite.open("./db.sqlite");
const tM = new transactionManager(db, { interval: 1000 });

Register a new Subject on the Transaction Manager object. The subject name must be typeof string or symbol. The actions argument must be described by a JavaScript Object as follow:

interface Actions {
    insert?: string;
    delete?: string;
    update?: string;
}
tM.registerSubject("test", {
    update: "...",
    delete: "..."
});

Load subjects from a given .json file. The file must be indented as follow:

{
    "subjectName": {
        "insert": "INSERT INTO table (field) VALUES ('val')",
        "update": "..."
    }
}

Example

await tM.loadSubjectsFromFile("./subjects.json");

Open a new request that will be queue and handled in a SQLite transaction. action and subject arguments are not mandatory and must be valid. Action must be either insert, update or delete.

The action must exist on the given subject.

Roadmap

  • Ability to lock/unlock requests (db handle priority).
  • Reduce/Agregate same requests (alarm with row occurence for example).

Dependencies

NameRefactoringSecurity RiskUsage
@slimio/timerMinorLowDriftless Timer

License

MIT