123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- const _ = require('lodash')
- const fs = require('fs')
- const path = require('path')
- const Promise = require('bluebird')
- const Sequelize = require('sequelize')
- /* global WIKI */
- const operatorsAliases = {
- $eq: Sequelize.Op.eq,
- $ne: Sequelize.Op.ne,
- $gte: Sequelize.Op.gte,
- $gt: Sequelize.Op.gt,
- $lte: Sequelize.Op.lte,
- $lt: Sequelize.Op.lt,
- $not: Sequelize.Op.not,
- $in: Sequelize.Op.in,
- $notIn: Sequelize.Op.notIn,
- $is: Sequelize.Op.is,
- $like: Sequelize.Op.like,
- $notLike: Sequelize.Op.notLike,
- $iLike: Sequelize.Op.iLike,
- $notILike: Sequelize.Op.notILike,
- $regexp: Sequelize.Op.regexp,
- $notRegexp: Sequelize.Op.notRegexp,
- $iRegexp: Sequelize.Op.iRegexp,
- $notIRegexp: Sequelize.Op.notIRegexp,
- $between: Sequelize.Op.between,
- $notBetween: Sequelize.Op.notBetween,
- $overlap: Sequelize.Op.overlap,
- $contains: Sequelize.Op.contains,
- $contained: Sequelize.Op.contained,
- $adjacent: Sequelize.Op.adjacent,
- $strictLeft: Sequelize.Op.strictLeft,
- $strictRight: Sequelize.Op.strictRight,
- $noExtendRight: Sequelize.Op.noExtendRight,
- $noExtendLeft: Sequelize.Op.noExtendLeft,
- $and: Sequelize.Op.and,
- $or: Sequelize.Op.or,
- $any: Sequelize.Op.any,
- $all: Sequelize.Op.all,
- $values: Sequelize.Op.values,
- $col: Sequelize.Op.col
- }
- /**
- * PostgreSQL DB module
- */
- module.exports = {
- Sequelize,
- Op: Sequelize.Op,
- /**
- * Initialize DB
- *
- * @return {Object} DB instance
- */
- init() {
- let self = this
- let dbModelsPath = path.join(WIKI.SERVERPATH, 'models')
- // Define Sequelize instance
- this.inst = new this.Sequelize(WIKI.config.db.db, WIKI.config.db.user, WIKI.config.db.pass, {
- host: WIKI.config.db.host,
- port: WIKI.config.db.port,
- dialect: WIKI.config.db.type,
- storage: WIKI.config.db.storage,
- pool: {
- max: 10,
- min: 0,
- idle: 10000
- },
- logging: log => { WIKI.logger.log('debug', log) },
- operatorsAliases
- })
- // Attempt to connect and authenticate to DB
- this.inst.authenticate().then(() => {
- WIKI.logger.info(`Database (${WIKI.config.db.type}) connection: [ OK ]`)
- }).catch(err => {
- WIKI.logger.error(`Failed to connect to ${WIKI.config.db.type} instance.`)
- WIKI.logger.error(err)
- process.exit(1)
- })
- // Load DB Models
- fs
- .readdirSync(dbModelsPath)
- .filter(file => {
- return (file.indexOf('.') !== 0 && file.indexOf('_') !== 0)
- })
- .forEach(file => {
- let modelName = _.upperFirst(_.camelCase(_.split(file, '.')[0]))
- self[modelName] = self.inst.import(path.join(dbModelsPath, file))
- })
- // Associate DB Models
- require(path.join(dbModelsPath, '_relations.js'))(self)
- // Set init tasks
- let initTasks = {
- // -> Sync DB Schemas
- syncSchemas() {
- return self.inst.sync({
- force: false,
- logging: log => { WIKI.logger.log('debug', log) }
- })
- },
- // -> Set Connection App Name
- setAppName() {
- switch (WIKI.config.db.type) {
- case 'postgres':
- return self.inst.query(`set application_name = 'WIKI.js'`, { raw: true })
- }
- }
- }
- let initTasksQueue = (WIKI.IS_MASTER) ? [
- initTasks.syncSchemas,
- initTasks.setAppName
- ] : [
- initTasks.setAppName
- ]
- // Perform init tasks
- this.onReady = Promise.each(initTasksQueue, t => t()).return(true)
- return this
- }
- }
|