]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/initializers/database.ts
Update client modules
[github/Chocobozzz/PeerTube.git] / server / initializers / database.ts
CommitLineData
4d4e5cd4 1import * as fs from 'fs'
65fcc311 2import { join } from 'path'
4d4e5cd4 3import * as Sequelize from 'sequelize'
8c308c2b 4
65fcc311
C
5import { CONFIG } from './constants'
6// Do not use barrel, we need to load database first
7import { logger } from '../helpers/logger'
8import { isTestInstance } from '../helpers/utils'
e02643f3
C
9import {
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'
8c308c2b 28
65fcc311
C
29const dbname = CONFIG.DATABASE.DBNAME
30const username = CONFIG.DATABASE.USERNAME
31const password = CONFIG.DATABASE.PASSWORD
8c308c2b 32
e02643f3
C
33const 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} = {}
b769007f
C
55
56const sequelize = new Sequelize(dbname, username, password, {
feb4bdfd 57 dialect: 'postgres',
65fcc311
C
58 host: CONFIG.DATABASE.HOSTNAME,
59 port: CONFIG.DATABASE.PORT,
60 benchmark: isTestInstance(),
7920c273 61
69818c93 62 logging: function (message: string, benchmark: number) {
7920c273
C
63 let newMessage = message
64 if (benchmark !== undefined) {
65 newMessage += ' | ' + benchmark + 'ms'
66 }
67
68 logger.debug(newMessage)
69 }
feb4bdfd
C
70})
71
b769007f 72database.sequelize = sequelize
feb4bdfd 73
69818c93 74database.init = function (silent: boolean, callback: (err: Error) => void) {
feb4bdfd 75
65fcc311 76 const modelDirectory = join(__dirname, '..', 'models')
b769007f
C
77 fs.readdir(modelDirectory, function (err, files) {
78 if (err) throw err
c45f7f84 79
b769007f
C
80 files.filter(function (file) {
81 // For all models but not utils.js
e02643f3
C
82 if (
83 file === 'index.js' ||
84 file === 'utils.js' ||
85 file.endsWith('-interface.js') ||
86 file.endsWith('.js.map')
87 ) return false
8c308c2b 88
b769007f
C
89 return true
90 })
91 .forEach(function (file) {
65fcc311 92 const model = sequelize.import(join(modelDirectory, file))
b769007f 93
65fcc311 94 database[model['name']] = model
b769007f
C
95 })
96
97 Object.keys(database).forEach(function (modelName) {
98 if ('associate' in database[modelName]) {
99 database[modelName].associate(database)
100 }
101 })
102
11ac88de 103 if (!silent) logger.info('Database %s is ready.', dbname)
b769007f
C
104
105 return callback(null)
106 })
107}
65fcc311
C
108
109// ---------------------------------------------------------------------------
110
e02643f3
C
111export {
112 database
113}