]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/initializers/database.ts
Remove ng2-completer
[github/Chocobozzz/PeerTube.git] / server / initializers / database.ts
index c89a8b23c70780eec2384d13648021d0db0de5bc..705dec6da402300c68ad30fab14c3f632a728718 100644 (file)
@@ -1,11 +1,12 @@
-import fs = require('fs')
+import * as fs from 'fs'
 import { join } from 'path'
-import Sequelize = require('sequelize')
+import * as Sequelize from 'sequelize'
+import { each } from 'async'
 
 import { CONFIG } from './constants'
 // Do not use barrel, we need to load database first
 import { logger } from '../helpers/logger'
-import { isTestInstance } from '../helpers/utils'
+import { isTestInstance } from '../helpers/core-utils'
 import {
   ApplicationModel,
   AuthorModel,
@@ -59,7 +60,7 @@ const sequelize = new Sequelize(dbname, username, password, {
   port: CONFIG.DATABASE.PORT,
   benchmark: isTestInstance(),
 
-  logging: function (message, benchmark) {
+  logging: function (message: string, benchmark: number) {
     let newMessage = message
     if (benchmark !== undefined) {
       newMessage += ' | ' + benchmark + 'ms'
@@ -71,25 +72,14 @@ const sequelize = new Sequelize(dbname, username, password, {
 
 database.sequelize = sequelize
 
-database.init = function (silent, callback) {
-
+database.init = function (silent: boolean, callback: (err: Error) => void) {
   const modelDirectory = 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 === 'index.js' ||
-        file === 'utils.js' ||
-        file.endsWith('-interface.js') ||
-        file.endsWith('.js.map')
-      ) return false
+  getModelFiles(modelDirectory, function (err, filePaths) {
+    if (err) throw err
 
-      return true
-    })
-    .forEach(function (file) {
-      const model = sequelize.import(join(modelDirectory, file))
+    filePaths.forEach(function (filePath) {
+      const model = sequelize.import(filePath)
 
       database[model['name']] = model
     })
@@ -111,3 +101,52 @@ database.init = function (silent, callback) {
 export {
   database
 }
+
+// ---------------------------------------------------------------------------
+
+function getModelFiles (modelDirectory: string, callback: (err: Error, filePaths: string[]) => void) {
+  fs.readdir(modelDirectory, function (err, files) {
+    if (err) throw err
+
+    const directories = files.filter(function (directory) {
+      // Find directories
+      if (
+        directory.endsWith('.js.map') ||
+        directory === 'index.js' || directory === 'index.ts' ||
+        directory === 'utils.js' || directory === 'utils.ts'
+      ) return false
+
+      return true
+    })
+
+    let modelFilePaths: string[] = []
+
+    // For each directory we read it and append model in the modelFilePaths array
+    each(directories, function (directory: string, eachCallback: ErrorCallback<Error>) {
+      const modelDirectoryPath = join(modelDirectory, directory)
+
+      fs.readdir(modelDirectoryPath, function (err, files) {
+        if (err) return eachCallback(err)
+
+        const filteredFiles = files.filter(file => {
+          if (
+            file === 'index.js' || file === 'index.ts' ||
+            file === 'utils.js' || file === 'utils.ts' ||
+            file.endsWith('-interface.js') || file.endsWith('-interface.ts') ||
+            file.endsWith('.js.map')
+          ) return false
+
+          return true
+        }).map(file => {
+          return join(modelDirectoryPath, file)
+        })
+
+        modelFilePaths = modelFilePaths.concat(filteredFiles)
+
+        return eachCallback(null)
+      })
+    }, function (err: Error) {
+      return callback(err, modelFilePaths)
+    })
+  })
+}