]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/initializers/database.ts
require -> import
[github/Chocobozzz/PeerTube.git] / server / initializers / database.ts
1 import * as fs from 'fs'
2 import { join } from 'path'
3 import * as Sequelize from 'sequelize'
4
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'
9 import {
10 ApplicationModel,
11 AuthorModel,
12 JobModel,
13 OAuthClientModel,
14 OAuthTokenModel,
15 PodModel,
16 RequestModel,
17 RequestToPodModel,
18 RequestVideoEventModel,
19 RequestVideoQaduModel,
20 TagModel,
21 UserModel,
22 UserVideoRateModel,
23 VideoAbuseModel,
24 BlacklistedVideoModel,
25 VideoTagModel,
26 VideoModel
27 } from '../models'
28
29 const dbname = CONFIG.DATABASE.DBNAME
30 const username = CONFIG.DATABASE.USERNAME
31 const password = CONFIG.DATABASE.PASSWORD
32
33 const database: {
34 sequelize?: Sequelize.Sequelize,
35 init?: (silent: any, callback: any) => void,
36
37 Application?: ApplicationModel,
38 Author?: AuthorModel,
39 Job?: JobModel,
40 OAuthClient?: OAuthClientModel,
41 OAuthToken?: OAuthTokenModel,
42 Pod?: PodModel,
43 RequestToPod?: RequestToPodModel,
44 RequestVideoEvent?: RequestVideoEventModel,
45 RequestVideoQadu?: RequestVideoQaduModel,
46 Request?: RequestModel,
47 Tag?: TagModel,
48 UserVideoRate?: UserVideoRateModel,
49 User?: UserModel,
50 VideoAbuse?: VideoAbuseModel,
51 BlacklistedVideo?: BlacklistedVideoModel,
52 VideoTag?: VideoTagModel,
53 Video?: VideoModel
54 } = {}
55
56 const sequelize = new Sequelize(dbname, username, password, {
57 dialect: 'postgres',
58 host: CONFIG.DATABASE.HOSTNAME,
59 port: CONFIG.DATABASE.PORT,
60 benchmark: isTestInstance(),
61
62 logging: function (message, benchmark) {
63 let newMessage = message
64 if (benchmark !== undefined) {
65 newMessage += ' | ' + benchmark + 'ms'
66 }
67
68 logger.debug(newMessage)
69 }
70 })
71
72 database.sequelize = sequelize
73
74 database.init = function (silent, callback) {
75
76 const modelDirectory = join(__dirname, '..', 'models')
77 fs.readdir(modelDirectory, function (err, files) {
78 if (err) throw err
79
80 files.filter(function (file) {
81 // For all models but not utils.js
82 if (
83 file === 'index.js' ||
84 file === 'utils.js' ||
85 file.endsWith('-interface.js') ||
86 file.endsWith('.js.map')
87 ) return false
88
89 return true
90 })
91 .forEach(function (file) {
92 const model = sequelize.import(join(modelDirectory, file))
93
94 database[model['name']] = model
95 })
96
97 Object.keys(database).forEach(function (modelName) {
98 if ('associate' in database[modelName]) {
99 database[modelName].associate(database)
100 }
101 })
102
103 if (!silent) logger.info('Database %s is ready.', dbname)
104
105 return callback(null)
106 })
107 }
108
109 // ---------------------------------------------------------------------------
110
111 export {
112 database
113 }