From 714eb3ae830f62435442804a03c420465dad2fdb Mon Sep 17 00:00:00 2001 From: Book Pauk Date: Wed, 1 Dec 2021 21:26:26 +0700 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BE=20=D1=80=D0=B5=D0=B7=D1=83=D0=BB=D1=8C?= =?UTF-8?q?=D1=82=D0=B0=D1=82=D1=83=20=D1=82=D0=B5=D1=81=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/db/JembaConnManager.js | 35 ++++++++++++++++++++++++------ server/db/jembaMigrations/index.js | 4 ++++ 2 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 server/db/jembaMigrations/index.js diff --git a/server/db/JembaConnManager.js b/server/db/JembaConnManager.js index 08d4f876..0ed3423a 100644 --- a/server/db/JembaConnManager.js +++ b/server/db/JembaConnManager.js @@ -5,10 +5,7 @@ const ayncExit = new (require('../core/AsyncExit'))();//singleton const { JembaDb, JembaDbThread } = require('./JembaDb'); const log = new (require('../core/AppLogger'))().log;//singleton -const jembaMigrations = { - //'app': require('./jembaMigrations/app'), - 'reader-storage': require('./jembaMigrations/reader-storage'), -}; +const jembaMigrations = require('./jembaMigrations'); let instance = null; @@ -17,6 +14,7 @@ class JembaConnManager { constructor() { if (!instance) { this.inited = false; + this.closed = false; instance = this; } @@ -24,7 +22,7 @@ class JembaConnManager { return instance; } - async init(config) { + async init(config, migs = jembaMigrations) { if (this.inited) throw new Error('JembaConnManager initialized already'); @@ -52,7 +50,6 @@ class JembaConnManager { log(`Open "${dbConfig.dbName}" start`); await dbConn.openDb({dbPath, cacheSize: dbConfig.cacheSize, compressed: dbConfig.compressed, forceFileClosing: true}); - ayncExit.add(dbConn.closeDb.bind(dbConn)); if (dbConfig.openAll) { try { @@ -77,7 +74,7 @@ class JembaConnManager { log(`Open "${dbConfig.dbName}" finish`); //миграции - const mig = jembaMigrations[dbConfig.dbName]; + const mig = migs[dbConfig.dbName]; if (mig && mig.data) { const applied = await this.migrate(dbConn, mig.data, mig.table, force); if (applied.length) @@ -86,9 +83,27 @@ class JembaConnManager { this._db[dbConfig.dbName] = dbConn; } + + ayncExit.add(this.close.bind(this)); + this.inited = true; } + async close() { + if (!this.inited) + throw new Error('JembaConnManager not inited'); + + if (this.closed) + throw new Error('JembaConnManager closed'); + + for (const dbConfig of this.config.db) { + await this._db[dbConfig.dbName].closeDb(); + } + + this._db = {}; + this.closed = true; + } + async migrate(db, migs, table, force) { const migrations = _.cloneDeep(migs).sort((a, b) => a.id - b.id); @@ -163,6 +178,12 @@ class JembaConnManager { } get db() { + if (!this.inited) + throw new Error('JembaConnManager not inited'); + + if (this.closed) + throw new Error('JembaConnManager closed'); + return this._db; } } diff --git a/server/db/jembaMigrations/index.js b/server/db/jembaMigrations/index.js new file mode 100644 index 00000000..4769618c --- /dev/null +++ b/server/db/jembaMigrations/index.js @@ -0,0 +1,4 @@ +module.exports = { + //'app': require('./jembaMigrations/app'), + 'reader-storage': require('./reader-storage'), +};