/
models.js
162 lines (134 loc) · 5.13 KB
/
models.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
'use strict';
//embeddable docs first
const Status = require('./schema/Status');
const StatusLog = require('./schema/StatusLog');
const RequestLog = require('./schema/RequestLog');
const ApprovalStep = require('./schema/ApprovalStep');
const Right_Rule = require('./schema/Right_Rule');
const RightAdjustment = require('./schema/RightAdjustment');
const Request_WorkperiodRecover = require('./schema/Request_WorkperiodRecover');
const Request_TimeSavingDeposit = require('./schema/Request_TimeSavingDeposit');
const ValidInterval = require('./schema/ValidInterval');
const CompulsoryLeaveRequest = require('./schema/CompulsoryLeaveRequest');
const OvertimeSettlement = require('./schema/OvertimeSettlement');
//then regular docs
const AccountCollection = require('./schema/AccountCollection');
const AccountScheduleCalendar = require('./schema/AccountScheduleCalendar');
const AccountNWDaysCalendar = require('./schema/AccountNWDaysCalendar');
const Company = require('./schema/Company');
const User = require('./schema/User');
const User_Admin = require('./schema/User_Admin');
const User_Account = require('./schema/User_Account');
const User_Manager = require('./schema/User_Manager');
const Department = require('./schema/Department');
const LoginAttempt = require('./schema/LoginAttempt');
const Request_AbsenceElem = require('./schema/Request_AbsenceElem');
const Request = require('./schema/Request');
const RecoverQuantity = require('./schema/RecoverQuantity');
const CompulsoryLeave = require('./schema/CompulsoryLeave');
const RightCollection = require('./schema/RightCollection');
const Type = require('./schema/Type');
const Right = require('./schema/Right');
const Right_Renewal = require('./schema/Right_Renewal');
const Calendar = require('./schema/Calendar');
const CalendarEvent = require('./schema/CalendarEvent');
const Beneficiary = require('./schema/Beneficiary');
const Adjustment = require('./schema/Adjustment');
const Message = require('./schema/Message');
const Invitation = require('./schema/Invitation');
const UserRenewalStat = require('./schema/UserRenewalStat');
const Lunch = require('./schema/Lunch');
const Overtime = require('./schema/Overtime');
var models = {};
exports = module.exports = models;
// Default set of options used when loading models
// the requirements are overwritten defferently in company api and in tests
models.requirements = {
mongoose: null, // the mongoose object
db: null, // database connexion to link with shemas
autoIndex: false, // boolean used to autoindex schemas
removeIndex: false, // Remove index on start, autoIndex must be true to recreate the index
embeddedSchemas: [], // collect embedable schemas in this array
app: null // reference to application, not really fully loaded when load() is called
};
/**
* Load all models
* return a promise for indexation
* @return {Promise}
*/
models.load = function() {
const requirements = this.requirements;
let promises = [];
//embeddable docs first
Status(requirements);
StatusLog(requirements);
RequestLog(requirements);
ApprovalStep(requirements);
Right_Rule(requirements);
RightAdjustment(requirements);
Request_WorkperiodRecover(requirements);
Request_TimeSavingDeposit(requirements);
ValidInterval(requirements);
CompulsoryLeaveRequest(requirements);
OvertimeSettlement(requirements);
//then regular docs
AccountCollection(requirements);
AccountScheduleCalendar(requirements);
AccountNWDaysCalendar(requirements);
Company(requirements);
User(requirements);
User_Admin(requirements);
User_Account(requirements);
User_Manager(requirements);
Department(requirements);
LoginAttempt(requirements);
Request_AbsenceElem(requirements);
Request(requirements);
RecoverQuantity(requirements);
CompulsoryLeave(requirements);
RightCollection(requirements);
Type(requirements);
Right(requirements);
Right_Renewal(requirements);
Calendar(requirements);
CalendarEvent(requirements);
Beneficiary(requirements);
Adjustment(requirements);
Message(requirements);
Invitation(requirements);
UserRenewalStat(requirements);
Lunch(requirements);
Overtime(requirements);
if (!requirements.autoIndex) {
// Nothing to index
return Promise.resolve([]);
}
requirements.db.modelNames().forEach(name => {
let indexPromise = new Promise((resolve, reject) => {
let indexes = requirements.db.models[name].schema.indexes();
if (indexes.length === 0) {
// nothing to index
return resolve(true);
}
/**
* Add a on index to capture indexation errors
*/
requirements.db.models[name].on('index', function(err) {
if (err) {
return reject(new Error('on index '+requirements.db.name+'.'+name+' model -> '+err.message));
}
resolve(true);
});
});
promises.push(indexPromise);
if (requirements.removeIndex) {
requirements.db.models[name].collection.dropAllIndexes((err, results) => {
if (err) {
console.error(err);
}
console.log('removeIndex=true Indexes where removed on '+name);
});
}
});
return Promise.all(promises);
};