Files
gancio/server/api/models/index.js
2021-10-18 15:46:38 +02:00

57 lines
1.4 KiB
JavaScript

const Sequelize = require('sequelize')
const Umzug = require('umzug')
const path = require('path')
const config = require('../../config')
const log = require('../../log')
const db = {
sequelize: null,
close () {
if (db.sequelize) {
return db.sequelize.close()
}
},
connect (dbConf = config.db) {
log.debug(`Connecting to DB: ${JSON.stringify(dbConf)}`)
db.sequelize = new Sequelize(dbConf)
return db.sequelize.authenticate()
},
async isEmpty () {
const users = await db.sequelize.query('SELECT * from users').catch(e => {})
return !(users && users.length)
},
async runMigrations () {
const logging = config.firstrun ? false : log.debug.bind(log)
const umzug = new Umzug({
storage: 'sequelize',
storageOptions: { sequelize: db.sequelize },
logging,
migrations: {
wrap: fun => {
return () =>
fun(db.sequelize.queryInterface, Sequelize).catch(e => {
// log.error(e)
return false
})
},
path: path.resolve(__dirname, '..', '..', 'migrations')
}
})
return await umzug.up()
}
}
if (!config.firstrun) {
try {
db.connect().then(e => {
log.debug('Running migrations')
db.runMigrations()
})
} catch (e) {
log.warn(` ⚠️ Cannot connect to db, check your configuration => ${e}`)
process.exit(1)
}
}
module.exports = db