@synerty/vortexjs
Version:
Custom observable data serialisation and routing based on Angular 2+
76 lines • 9.6 kB
JavaScript
import { Inject, Injectable } from "@angular/core";
import { Payload } from "../Payload";
import { TupleActionStorageServiceABC } from "./TupleActionStorageServiceABC";
import { SqlFactoryService } from "../storage-api/sql-api-factory";
import * as i0 from "@angular/core";
import * as i1 from "../storage-api/sql-api-factory";
const DATABASE_NAME = "tupleActions";
const tableName = "tupleActions";
const databaseSchema = [
`CREATE TABLE IF NOT EXISTS ${tableName}
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
scope TEXT,
uuid REAL,
payload TEXT,
UNIQUE (scope, uuid)
)`,
];
export class TupleActionStorageSqlService extends TupleActionStorageServiceABC {
webSqlFactory;
webSql;
constructor(webSqlFactory) {
super();
this.webSqlFactory = webSqlFactory;
this.webSql = webSqlFactory.createApi(DATABASE_NAME, databaseSchema);
}
async storeAction(scope, tupleAction, payload) {
const encodedPayload = await payload.toEncodedPayload();
const sql = `INSERT INTO ${tableName}
(scope, uuid, payload)
VALUES (?, ?, ?)`;
const bindParams = [scope, tupleAction.uuid, encodedPayload];
await this.webSql.execute([{ sql: sql, bindParams: bindParams }]);
}
async loadNextAction() {
const sql = `SELECT payload
FROM ${tableName}
ORDER BY id
LIMIT 1`;
const bindParams = [];
const rows = await this.webSql.query({
sql: sql,
bindParams: bindParams,
});
if (!rows?.length) {
return null;
}
const row1 = rows[0];
return await Payload.fromEncodedPayload(row1.payload);
}
async countActions() {
const sql = `SELECT count(payload) as count
FROM ${tableName}`;
const bindParams = [];
const rows = await this.webSql.query({
sql: sql,
bindParams: bindParams,
});
return rows == null ? 0 : rows[0].count;
}
async deleteAction(scope, actionUuid) {
const sql = `DELETE FROM ${tableName}
WHERE scope=? AND uuid=?`;
const bindParams = [scope, actionUuid];
await this.webSql.execute([{ sql: sql, bindParams: bindParams }]);
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TupleActionStorageSqlService, deps: [{ token: SqlFactoryService }], target: i0.ɵɵFactoryTarget.Injectable });
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TupleActionStorageSqlService });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TupleActionStorageSqlService, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: i1.SqlFactoryService, decorators: [{
type: Inject,
args: [SqlFactoryService]
}] }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVwbGUtYWN0aW9uLXN0b3JhZ2Utc3FsLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdm9ydGV4L2FjdGlvbi1zdG9yYWdlL3R1cGxlLWFjdGlvbi1zdG9yYWdlLXNxbC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRW5ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFOUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7OztBQUVuRSxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUM7QUFFckMsTUFBTSxTQUFTLEdBQUcsY0FBYyxDQUFDO0FBQ2pDLE1BQU0sY0FBYyxHQUFHO0lBQ25CLDhCQUE4QixTQUFTOzs7Ozs7O09BT3BDO0NBQ04sQ0FBQztBQUdGLE1BQU0sT0FBTyw0QkFBNkIsU0FBUSw0QkFBNEI7SUFJbkM7SUFIL0IsTUFBTSxDQUFZO0lBRTFCLFlBQ3VDLGFBQWdDO1FBRW5FLEtBQUssRUFBRSxDQUFDO1FBRjJCLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUluRSxJQUFJLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUNiLEtBQWEsRUFDYixXQUEyQixFQUMzQixPQUFnQjtRQUVoQixNQUFNLGNBQWMsR0FBVyxNQUFNLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2hFLE1BQU0sR0FBRyxHQUFHLGVBQWUsU0FBUzs7cUNBRVAsQ0FBQztRQUM5QixNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRTdELE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWM7UUFDaEIsTUFBTSxHQUFHLEdBQUc7MkJBQ08sU0FBUzs7NEJBRVIsQ0FBQztRQUNyQixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFdEIsTUFBTSxJQUFJLEdBQVUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN4QyxHQUFHLEVBQUUsR0FBRztZQUNSLFVBQVUsRUFBRSxVQUFVO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQ2YsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQixPQUFPLE1BQU0sT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVk7UUFDZCxNQUFNLEdBQUcsR0FBRzsyQkFDTyxTQUFTLEVBQUUsQ0FBQztRQUMvQixNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFdEIsTUFBTSxJQUFJLEdBQVUsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN4QyxHQUFHLEVBQUUsR0FBRztZQUNSLFVBQVUsRUFBRSxVQUFVO1NBQ3pCLENBQUMsQ0FBQztRQUVILE9BQU8sSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQzVDLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQWEsRUFBRSxVQUFrQjtRQUNoRCxNQUFNLEdBQUcsR0FBRyxlQUFlLFNBQVM7NkNBQ0MsQ0FBQztRQUN0QyxNQUFNLFVBQVUsR0FBRyxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV2QyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEUsQ0FBQzt3R0FoRVEsNEJBQTRCLGtCQUl6QixpQkFBaUI7NEdBSnBCLDRCQUE0Qjs7NEZBQTVCLDRCQUE0QjtrQkFEeEMsVUFBVTs7MEJBS0YsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgVHVwbGVBY3Rpb25BQkMgfSBmcm9tIFwiLi4vVHVwbGVBY3Rpb25cIjtcbmltcG9ydCB7IFBheWxvYWQgfSBmcm9tIFwiLi4vUGF5bG9hZFwiO1xuaW1wb3J0IHsgVHVwbGVBY3Rpb25TdG9yYWdlU2VydmljZUFCQyB9IGZyb20gXCIuL1R1cGxlQWN0aW9uU3RvcmFnZVNlcnZpY2VBQkNcIjtcbmltcG9ydCB7IFNxbEFwaUFCQyB9IGZyb20gXCIuLi9zdG9yYWdlLWFwaS9zcWwtYXBpLWFiY1wiO1xuaW1wb3J0IHsgU3FsRmFjdG9yeVNlcnZpY2UgfSBmcm9tIFwiLi4vc3RvcmFnZS1hcGkvc3FsLWFwaS1mYWN0b3J5XCI7XG5cbmNvbnN0IERBVEFCQVNFX05BTUUgPSBcInR1cGxlQWN0aW9uc1wiO1xuXG5jb25zdCB0YWJsZU5hbWUgPSBcInR1cGxlQWN0aW9uc1wiO1xuY29uc3QgZGF0YWJhc2VTY2hlbWEgPSBbXG4gICAgYENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTICR7dGFibGVOYW1lfVxuICAgICAoXG4gICAgICAgIGlkIElOVEVHRVIgUFJJTUFSWSBLRVkgQVVUT0lOQ1JFTUVOVCxcbiAgICAgICAgc2NvcGUgVEVYVCxcbiAgICAgICAgdXVpZCBSRUFMLFxuICAgICAgICBwYXlsb2FkIFRFWFQsXG4gICAgICAgIFVOSVFVRSAoc2NvcGUsIHV1aWQpXG4gICAgIClgLFxuXTtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFR1cGxlQWN0aW9uU3RvcmFnZVNxbFNlcnZpY2UgZXh0ZW5kcyBUdXBsZUFjdGlvblN0b3JhZ2VTZXJ2aWNlQUJDIHtcbiAgICBwcml2YXRlIHdlYlNxbDogU3FsQXBpQUJDO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoU3FsRmFjdG9yeVNlcnZpY2UpIHByaXZhdGUgd2ViU3FsRmFjdG9yeTogU3FsRmFjdG9yeVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLndlYlNxbCA9IHdlYlNxbEZhY3RvcnkuY3JlYXRlQXBpKERBVEFCQVNFX05BTUUsIGRhdGFiYXNlU2NoZW1hKTtcbiAgICB9XG5cbiAgICBhc3luYyBzdG9yZUFjdGlvbihcbiAgICAgICAgc2NvcGU6IHN0cmluZyxcbiAgICAgICAgdHVwbGVBY3Rpb246IFR1cGxlQWN0aW9uQUJDLFxuICAgICAgICBwYXlsb2FkOiBQYXlsb2FkXG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGVuY29kZWRQYXlsb2FkOiBzdHJpbmcgPSBhd2FpdCBwYXlsb2FkLnRvRW5jb2RlZFBheWxvYWQoKTtcbiAgICAgICAgY29uc3Qgc3FsID0gYElOU0VSVCBJTlRPICR7dGFibGVOYW1lfVxuICAgICAgICAgICAgICAgICAgICAoc2NvcGUsIHV1aWQsIHBheWxvYWQpXG4gICAgICAgICAgICAgICAgICAgIFZBTFVFUyAoPywgPywgPylgO1xuICAgICAgICBjb25zdCBiaW5kUGFyYW1zID0gW3Njb3BlLCB0dXBsZUFjdGlvbi51dWlkLCBlbmNvZGVkUGF5bG9hZF07XG5cbiAgICAgICAgYXdhaXQgdGhpcy53ZWJTcWwuZXhlY3V0ZShbeyBzcWw6IHNxbCwgYmluZFBhcmFtczogYmluZFBhcmFtcyB9XSk7XG4gICAgfVxuXG4gICAgYXN5bmMgbG9hZE5leHRBY3Rpb24oKTogUHJvbWlzZTxQYXlsb2FkIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBzcWwgPSBgU0VMRUNUIHBheWxvYWRcbiAgICAgICAgICAgICAgICAgICAgRlJPTSAke3RhYmxlTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgT1JERVIgQlkgaWRcbiAgICAgICAgICAgICAgICAgICAgTElNSVQgMWA7XG4gICAgICAgIGNvbnN0IGJpbmRQYXJhbXMgPSBbXTtcblxuICAgICAgICBjb25zdCByb3dzOiBhbnlbXSA9IGF3YWl0IHRoaXMud2ViU3FsLnF1ZXJ5KHtcbiAgICAgICAgICAgIHNxbDogc3FsLFxuICAgICAgICAgICAgYmluZFBhcmFtczogYmluZFBhcmFtcyxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFyb3dzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgcm93MSA9IHJvd3NbMF07XG4gICAgICAgIHJldHVybiBhd2FpdCBQYXlsb2FkLmZyb21FbmNvZGVkUGF5bG9hZChyb3cxLnBheWxvYWQpO1xuICAgIH1cblxuICAgIGFzeW5jIGNvdW50QWN0aW9ucygpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgICAgICBjb25zdCBzcWwgPSBgU0VMRUNUIGNvdW50KHBheWxvYWQpIGFzIGNvdW50XG4gICAgICAgICAgICAgICAgICAgIEZST00gJHt0YWJsZU5hbWV9YDtcbiAgICAgICAgY29uc3QgYmluZFBhcmFtcyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IHJvd3M6IGFueVtdID0gYXdhaXQgdGhpcy53ZWJTcWwucXVlcnkoe1xuICAgICAgICAgICAgc3FsOiBzcWwsXG4gICAgICAgICAgICBiaW5kUGFyYW1zOiBiaW5kUGFyYW1zLFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcm93cyA9PSBudWxsID8gMCA6IHJvd3NbMF0uY291bnQ7XG4gICAgfVxuXG4gICAgYXN5bmMgZGVsZXRlQWN0aW9uKHNjb3BlOiBzdHJpbmcsIGFjdGlvblV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBzcWwgPSBgREVMRVRFIEZST00gJHt0YWJsZU5hbWV9XG4gICAgICAgICAgICAgICAgICAgIFdIRVJFIHNjb3BlPT8gQU5EIHV1aWQ9P2A7XG4gICAgICAgIGNvbnN0IGJpbmRQYXJhbXMgPSBbc2NvcGUsIGFjdGlvblV1aWRdO1xuXG4gICAgICAgIGF3YWl0IHRoaXMud2ViU3FsLmV4ZWN1dGUoW3sgc3FsOiBzcWwsIGJpbmRQYXJhbXM6IGJpbmRQYXJhbXMgfV0pO1xuICAgIH1cbn1cbiJdfQ==