const fs = require('fs-extra'); const SqliteConnectionPool = require('./SqliteConnectionPool'); const log = new (require('../core/AppLogger'))().log;//singleton const migrations = { 'app': require('./migrations/app'), 'readerStorage': require('./migrations/readerStorage'), }; let instance = null; //singleton class ConnManager { constructor() { if (!instance) { this.inited = false; instance = this; } return instance; } async init(config) { this.config = config; this._pool = {}; const force = null;//(config.branch == 'development' ? 'last' : null); for (const poolConfig of this.config.db) { const dbFileName = this.config.dataDir + '/' + poolConfig.fileName; //бэкап if (await fs.pathExists(dbFileName)) await fs.copy(dbFileName, `${dbFileName}.bak`); const connPool = new SqliteConnectionPool(); await connPool.open(poolConfig.connCount, dbFileName); log(`Opened database "${poolConfig.poolName}"`); //миграции const migs = migrations[poolConfig.poolName]; if (migs && migs.data.length) { const applied = await connPool.migrate(migs.data, migs.table, force); if (applied.length) log(`${applied.length} migrations applied to "${poolConfig.poolName}"`); } this._pool[poolConfig.poolName] = connPool; } this.inited = true; } get pool() { return this._pool; } } module.exports = ConnManager;