gancio-upstream/server/api/models/index.js

80 lines
2.2 KiB
JavaScript
Raw Normal View History

2019-06-07 17:02:33 +02:00
const Sequelize = require('sequelize')
// this is an hack: https://github.com/sequelize/sequelize/pull/14800
const livePatchMariaDBDialect = require('sequelize/lib/dialects/mariadb/query')
livePatchMariaDBDialect.prototype.handleJsonSelectQuery = () => null
2021-10-18 15:46:38 +02:00
const Umzug = require('umzug')
const path = require('path')
2021-09-27 11:14:11 +02:00
const config = require('../../config')
const log = require('../../log')
2022-02-26 21:27:40 +01:00
const settingsController = require('../controller/settings')
2021-09-27 11:14:11 +02:00
const db = {
sequelize: null,
close () {
2021-10-18 15:46:38 +02:00
if (db.sequelize) {
return db.sequelize.close()
}
2021-09-27 11:14:11 +02:00
},
2021-10-18 15:46:38 +02:00
connect (dbConf = config.db) {
log.debug(`Connecting to DB: ${JSON.stringify(dbConf)}`)
// dbConf.dialectOptions = { autoJsonMap: false }
2022-05-06 23:04:12 +02:00
if (dbConf.dialect === 'sqlite') {
dbConf.retry = {
match: [
Sequelize.ConnectionError,
Sequelize.ConnectionTimedOutError,
Sequelize.TimeoutError,
/Deadlock/i,
/SQLITE_BUSY/],
max: 15
}
}
2021-09-27 11:14:11 +02:00
db.sequelize = new Sequelize(dbConf)
2021-10-18 15:46:38 +02:00
return db.sequelize.authenticate()
},
async isEmpty () {
2022-06-25 23:15:58 +02:00
try {
const users = await db.sequelize.query('SELECT * from users')
return !(users && users.length)
} catch (e) {
return true
}
2021-10-18 15:46:38 +02:00
},
async runMigrations () {
2022-01-26 09:51:42 +01:00
const logging = config.status !== 'READY' ? false : log.debug.bind(log)
2021-10-18 15:46:38 +02:00
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')
}
})
2022-05-06 23:04:12 +02:00
return umzug.up()
},
async initialize () {
2022-01-26 09:51:42 +01:00
if (config.status === 'READY') {
try {
await db.connect()
log.debug('Running migrations')
2022-02-26 21:27:40 +01:00
await db.runMigrations()
return settingsController.load()
} catch (e) {
log.warn(` ⚠️ Cannot connect to db, check your configuration => ${e}`)
process.exit(1)
}
}
2021-09-27 11:14:11 +02:00
}
}
2019-09-11 19:12:24 +02:00
2021-09-27 11:14:11 +02:00
module.exports = db