UNPKG

@berish/orm

Version:

ORM

106 lines 4.83 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Plain = void 0; const registrator_1 = require("../registrator"); const utils_1 = require("../utils"); const QueueActions = require("./queueActions"); const query_1 = require("../query"); const linq_1 = require("@berish/linq"); class Plain { constructor(ctor, plainName, mode, entityId) { this._className = null; this._plainName = null; this._mode = null; this._entityId = null; this._queue = new utils_1.Queue().action(QueueActions.saveAction).action(QueueActions.removeAction); this._className = typeof ctor === 'string' ? ctor : registrator_1.getClassNameByClass(ctor); this._plainName = plainName; this._mode = mode; this._entityId = entityId; this.initQueueData(); } static create(ctor, plainName, entityId) { const plain = new Plain(ctor, plainName, 'src', entityId); return plain; } static createFromDst(ctor, plainName, entityId) { const plain = new Plain(ctor, plainName, 'dst', entityId); return plain; } initQueueData() { this.queue.data({ plain: this }); } get entityId() { return this._entityId && this._entityId(); } get queue() { return this._queue; } get plainName() { return this._plainName; } get className() { return this._className; } get fullPlainName() { return `${this.className}_${this.plainName}`; } get queryChildsNearly() { const query = new query_1.Query(this.className); const plainQuery = new query_1.Query(this.fullPlainName).equalTo(this._mode, this.entityId).equalTo('level', 0); return query.matchesKeyInQuery('id', this._mode === 'src' ? 'dst' : 'src', plainQuery); } get queryChilds() { const query = new query_1.Query(this.className); const plainQuery = new query_1.Query(this.fullPlainName).equalTo(this._mode, this.entityId); return query.matchesKeyInQuery('id', this._mode === 'src' ? 'dst' : 'src', plainQuery); } get queryParentsNearly() { const query = new query_1.Query(this.className); const plainQuery = new query_1.Query(this.fullPlainName) .equalTo(this._mode === 'src' ? 'dst' : 'src', this.entityId) .equalTo('level', 0); return query.matchesKeyInQuery('id', this._mode, plainQuery); } get queryParents() { const query = new query_1.Query(this.className); const plainQuery = new query_1.Query(this.fullPlainName).equalTo(this._mode === 'src' ? 'dst' : 'src', this.entityId); return query.matchesKeyInQuery('id', this._mode, plainQuery); } add(obj) { const items = Array.isArray(obj) ? obj : [obj]; const ids = items.map((m) => (typeof m === 'string' ? m : m.id)); if (this._mode === 'dst') this.queue.data((data) => (Object.assign(Object.assign({}, data), { dstAdded: linq_1.default.from(data.dstAdded || []).concat(ids) }))); else this.queue.data((data) => (Object.assign(Object.assign({}, data), { srcAdded: linq_1.default.from(data.srcAdded || []).concat(ids) }))); return this; } remove(obj) { const items = Array.isArray(obj) ? obj : [obj]; const ids = items.map((m) => (typeof m === 'string' ? m : m.id)); if (this._mode === 'dst') this.queue.data((data) => (Object.assign(Object.assign({}, data), { dstRemoved: linq_1.default.from(data.dstRemoved || []).concat(ids) }))); else this.queue.data((data) => (Object.assign(Object.assign({}, data), { srcRemoved: linq_1.default.from(data.srcRemoved || []).concat(ids) }))); return this; } execute(manager) { this.queue.data({ manager }); return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { yield this.queue.execute((err) => reject(err)); resolve(); })).finally(() => this.initQueueData()); } } exports.Plain = Plain; //# sourceMappingURL=plain.js.map