UNPKG

@synerty/vortexjs

Version:

Custom observable data serialisation and routing based on Angular 2+

76 lines 9.6 kB
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==