1 import * as fs from 'fs'
2 import { join } from 'path'
3 import * as Sequelize from 'sequelize'
5 import { CONFIG } from './constants'
6 // Do not use barrel, we need to load database first
7 import { logger } from '../helpers/logger'
8 import { isTestInstance } from '../helpers/utils'
18 RequestVideoEventModel,
19 RequestVideoQaduModel,
24 BlacklistedVideoModel,
29 const dbname = CONFIG.DATABASE.DBNAME
30 const username = CONFIG.DATABASE.USERNAME
31 const password = CONFIG.DATABASE.PASSWORD
34 sequelize?: Sequelize.Sequelize,
35 init?: (silent: any, callback: any) => void,
37 Application?: ApplicationModel,
40 OAuthClient?: OAuthClientModel,
41 OAuthToken?: OAuthTokenModel,
43 RequestToPod?: RequestToPodModel,
44 RequestVideoEvent?: RequestVideoEventModel,
45 RequestVideoQadu?: RequestVideoQaduModel,
46 Request?: RequestModel,
48 UserVideoRate?: UserVideoRateModel,
50 VideoAbuse?: VideoAbuseModel,
51 BlacklistedVideo?: BlacklistedVideoModel,
52 VideoTag?: VideoTagModel,
56 const sequelize = new Sequelize(dbname, username, password, {
58 host: CONFIG.DATABASE.HOSTNAME,
59 port: CONFIG.DATABASE.PORT,
60 benchmark: isTestInstance(),
62 logging: function (message: string, benchmark: number) {
63 let newMessage = message
64 if (benchmark !== undefined) {
65 newMessage += ' | ' + benchmark + 'ms'
68 logger.debug(newMessage)
72 database.sequelize = sequelize
74 database.init = function (silent: boolean, callback: (err: Error) => void) {
76 const modelDirectory = join(__dirname, '..', 'models')
77 fs.readdir(modelDirectory, function (err, files) {
80 files.filter(function (file) {
81 // For all models but not utils.js
83 file === 'index.js' ||
84 file === 'utils.js' ||
85 file.endsWith('-interface.js') ||
86 file.endsWith('.js.map')
91 .forEach(function (file) {
92 const model = sequelize.import(join(modelDirectory, file))
94 database[model['name']] = model
97 Object.keys(database).forEach(function (modelName) {
98 if ('associate' in database[modelName]) {
99 database[modelName].associate(database)
103 if (!silent) logger.info('Database %s is ready.', dbname)
105 return callback(null)
109 // ---------------------------------------------------------------------------