X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Finitializers%2Fdatabase.js;h=043152a0e33f95ac389f017b97e6cd10487efe43;hb=2d7653dc8726185615bab66353c4e3fb8fbb5a5f;hp=20dcc056e42493695135f70a22888ca1744c2ab7;hpb=e861452fb26553177ad4e32bfb18b4fd8a5b1816;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/initializers/database.js b/server/initializers/database.js index 20dcc056e..043152a0e 100644 --- a/server/initializers/database.js +++ b/server/initializers/database.js @@ -1,35 +1,77 @@ 'use strict' -const mongoose = require('mongoose') +const fs = require('fs') +const path = require('path') +const Sequelize = require('sequelize') const constants = require('../initializers/constants') const logger = require('../helpers/logger') +const utils = require('../helpers/utils') -// Bootstrap models -require('../models/user') -require('../models/oauth-client') -require('../models/oauth-token') -require('../models/pods') -require('../models/video') -// Request model needs Video model -require('../models/request') - -const database = { - connect: connect -} +const database = {} -function connect () { - mongoose.Promise = global.Promise - mongoose.connect('mongodb://' + constants.CONFIG.DATABASE.HOST + ':' + constants.CONFIG.DATABASE.PORT + '/' + constants.CONFIG.DATABASE.DBNAME) - mongoose.connection.on('error', function () { - throw new Error('Mongodb connection error.') - }) +const dbname = constants.CONFIG.DATABASE.DBNAME +const username = constants.CONFIG.DATABASE.USERNAME +const password = constants.CONFIG.DATABASE.PASSWORD - mongoose.connection.on('open', function () { - logger.info('Connected to mongodb.') - }) -} +const sequelize = new Sequelize(dbname, username, password, { + dialect: 'postgres', + host: constants.CONFIG.DATABASE.HOSTNAME, + port: constants.CONFIG.DATABASE.PORT, + benchmark: utils.isTestInstance(), + + logging: function (message, benchmark) { + let newMessage = message + if (benchmark !== undefined) { + newMessage += ' | ' + benchmark + 'ms' + } + + logger.debug(newMessage) + } +}) + +database.sequelize = sequelize +database.Sequelize = Sequelize +database.init = init // --------------------------------------------------------------------------- module.exports = database + +// --------------------------------------------------------------------------- + +function init (silent, callback) { + if (!callback) { + callback = silent + silent = false + } + + if (!callback) callback = function () {} + + const modelDirectory = path.join(__dirname, '..', 'models') + fs.readdir(modelDirectory, function (err, files) { + if (err) throw err + + files.filter(function (file) { + // For all models but not utils.js + if (file === 'utils.js') return false + + return true + }) + .forEach(function (file) { + const model = sequelize.import(path.join(modelDirectory, file)) + + database[model.name] = model + }) + + Object.keys(database).forEach(function (modelName) { + if ('associate' in database[modelName]) { + database[modelName].associate(database) + } + }) + + if (!silent) logger.info('Database %s is ready.', dbname) + + return callback(null) + }) +}