61 lines
1.7 KiB
JavaScript
61 lines
1.7 KiB
JavaScript
//TODO: удалить модуль в 2023г
|
||
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 (!poolConfig.noBak && await fs.pathExists(dbFileName))
|
||
await fs.copy(dbFileName, `${dbFileName}.bak`);
|
||
|
||
const connPool = new SqliteConnectionPool();
|
||
await connPool.open(poolConfig, 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; |