UNPKG

@flowfuse/flowfuse

Version:

An open source low-code development platform

86 lines (73 loc) 2.62 kB
/** * The database connection. * * This handles the connection to the database and the data models, views and * controllers. * * - {@link forge.db.models models} - The underlying data models * - {@link forge.db.views views} - Utilities for generating presentable views of models * - {@link forge.db.controllers controllers} - Utilities for operating on the models * * @namespace db * @memberof forge */ const path = require('path') const fp = require('fastify-plugin') const { Sequelize } = require('sequelize') const controllers = require('./controllers') const migrations = require('./migrations') const models = require('./models') const utils = require('./utils') const views = require('./views') module.exports = fp(async function (app, _opts) { utils.init(app) const dbOptions = { dialect: app.config.db.type || 'sqlite' } app.log.info(`Database driver: ${dbOptions.dialect}`) if (dbOptions.dialect === 'sqlite') { let filename = app.config.db.storage || 'forge.db' if (filename !== ':memory:') { if (!path.isAbsolute(filename)) { filename = path.join(app.config.home, 'var', filename) } } dbOptions.storage = filename app.log.info(`Database file: ${filename}`) } else if (dbOptions.dialect === 'mariadb') { dbOptions.host = app.config.db.host || 'mariadb' dbOptions.port = app.config.db.port || 3306 dbOptions.username = app.config.db.user dbOptions.password = /* app.secrets.dbPassword || */ app.config.db.password } else if (dbOptions.dialect === 'postgres') { dbOptions.host = app.config.db.host || 'postgres' dbOptions.port = app.config.db.port || 5432 dbOptions.username = app.config.db.user dbOptions.password = /* app.secrets.dbPassword || */ app.config.db.password dbOptions.database = app.config.db.database || 'flowforge' if (app.config.db.ssl) { dbOptions.dialectOptions = { ssl: true } } } dbOptions.logging = !!app.config.db.logging const sequelize = new Sequelize(dbOptions) const db = { sequelize, models, views, controllers, utils } app.decorate('db', db) app.addHook('onClose', async (_) => { await sequelize.close() }) await sequelize.authenticate() await migrations.init(app) await migrations.applyPendingMigrations() await models.init(app) await views.init(app) await controllers.init(app) }, { name: 'app.db' })