]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/initializers/database.js
Videos likes/dislikes is implemented :)
[github/Chocobozzz/PeerTube.git] / server / initializers / database.js
index 8626895ee6fd4cd60d8bfac71065d900399f2c84..043152a0e33f95ac389f017b97e6cd10487efe43 100644 (file)
@@ -1,39 +1,77 @@
 'use strict'
 
-const config = require('config')
-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 dbname = 'peertube' + config.get('database.suffix')
-const host = config.get('database.host')
-const port = config.get('database.port')
-
-const database = {
-  connect: connect
-}
+const database = {}
 
-function connect () {
-  mongoose.Promise = global.Promise
-  mongoose.connect('mongodb://' + host + ':' + port + '/' + 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)
+  })
+}