lms-sync 1.0.93 → 1.0.94

Sign up to get free protection for your applications and to get access to all the features.
@@ -23,43 +23,33 @@ const {
23
23
  Users,
24
24
  Semesters,
25
25
  Employees,
26
+ UserRoles,
27
+ Applications,
28
+ Roles
26
29
 
27
30
 
28
31
  } = db
29
32
 
30
33
  const server = {
31
34
 
32
- async Campus(){
35
+ async AcademicYear(){
33
36
  try {
34
37
  await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
38
+
35
39
  console.log("");
36
40
  console.log("########################################################")
37
- console.log(" Campuses Migration ")
41
+ console.log(" Academic Years Migration ")
38
42
  console.log("########################################################")
39
43
  console.log("");
40
44
 
41
45
  const db_schema = schema
42
- let maxIds = await Campuses.max('_id'); //Fetch maximum _id directly from the campuses model
43
- let maxIdsSem = await Semesters.max('_id'); //Fetch maximum _id directly from the campuses model
44
- let maxIdsUser = await Users.max('_id'); //Fetch maximum _id directly from the campuses model
45
-
46
+ let maxIds = await AcademicYears.max('_id'); // Fetch maximum _id directly from the AcademicYears model
46
47
  let maxId = maxIds|| 0;
47
- let maxIdSems = maxIdsSem || 0;
48
- let maxIdUsers = maxIdsUser || 0;
49
-
50
- await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Users__id_seq"`);
51
- await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Users__id_seq" RESTART WITH ${maxIdUsers + 1}`);
52
-
53
- await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Campuses__id_seq"`);
54
- await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Campuses__id_seq" RESTART WITH ${maxId + 1}`);
55
-
56
- await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Semesters__id_seq"`);
57
- await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Semesters__id_seq" RESTART WITH ${maxIdSems + 1}`);
58
-
48
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."AcademicYears__id_seq"`);
49
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicYears__id_seq" RESTART WITH ${maxId + 1}`);
59
50
  await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
60
51
 
61
52
 
62
-
63
53
  let userDefPayload = {
64
54
  email: 'ccci_integrator@gmail.com',
65
55
  password: '$2a$12$Q.h3Q9IN6vsIxGBa/EgfOOABeXTcwxt4t9cu4nqAK.nczGRRtZJUS',
@@ -76,122 +66,62 @@ const server = {
76
66
  defaults: userDefPayload
77
67
  });
78
68
 
79
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
69
+ const acadYearApi = await api.AcademicYear()
70
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
80
71
 
81
- let yearDefPayload = {
82
- from: 1799,
83
- to: 1800,
84
- modifiedById: userMail?._id,
85
- createdById: userMail?._id,
86
- default: false,
87
- }
88
- let [yeardef, createdyear] = await AcademicYears.findOrCreate({
89
- where: {
90
- from: yearDefPayload.from,
91
- to: yearDefPayload.to,
92
- },
93
- defaults: yearDefPayload
94
- });
72
+ let createdCounter = 0
73
+ let errorCounter = 0
74
+ let uniqueErrors = new Set()
95
75
 
96
- // let semesterData = [
97
- // {
98
- // code: '1st Semester',
99
- // description: '1st Semester',
100
- // modifiedById: userMail?._id,
101
- // createdById: userMail?._id
102
- // },
103
- // {
104
- // code: '2nd Semester',
105
- // description: '2nd Semester',
106
- // modifiedById: userMail?._id,
107
- // createdById: userMail?._id
108
- // },
109
- // {
110
- // code: 'Summer',
111
- // description: 'Summer',
112
- // modifiedById: userMail?._id,
113
- // createdById: userMail?._id
114
- // },
115
- // {
116
- // code: 'School Year',
117
- // description: 'School Year',
118
- // modifiedById: userMail?._id,
119
- // createdById: userMail?._id
120
- // }
121
-
122
- // ]
76
+ const { acadYearResult, currentSchoolYear } = acadYearApi;
123
77
 
124
- // for (let sem = 0; sem < semesterData.length; sem++) {
125
- // const semesters = semesterData[sem];
126
-
127
- // let semestersPayload = {
128
- // code: semesters.code,
129
- // description: semesters.description,
130
- // modifiedById: userMail?._id,
131
- // createdById: userMail?._id
132
- // }
133
78
 
134
- // let [semdefaults, semcreateddef] = await Semesters.findOrCreate({
135
- // where: { code: semestersPayload.code},
136
- // defaults: semestersPayload
137
- // });
138
- // }
79
+ let uFrom = new Set()
80
+ let uTo = new Set()
139
81
 
140
- const campusApi = await api.Campus()
141
-
142
- let campusDefPayload = {
143
- name: 'Campus Default',
144
- code: 'DEF',
145
- email: 'campus_default@gmail.com',
146
- address: 'MSC',
147
- modifiedById: userMail?._id,
148
- createdById: userMail?._id
149
- };
150
-
151
- let [defaults, createddef] = await Campuses.findOrCreate({
152
- where: { name: campusDefPayload.name, code: campusDefPayload.code},
153
- defaults: campusDefPayload
154
- });
82
+ let newYears = []
155
83
 
156
- let createdCounter = 0
157
- let errorCounter = 0
158
- let uniqueErrors = new Set()
84
+ const exYear = await AcademicYears.findAll()
85
+ const exYearMap = new Map(exYear.map(year => [`[${year.from} - ${year.to}]`, year]))
86
+
159
87
 
160
- let uCode = new Set()
161
- let uName = new Set()
88
+ for (let i = 0; i < acadYearResult.length; i++){
89
+ try {
90
+ let _acadyear = acadYearResult[i]
91
+ // console.log('_acadyear :>> ', _acadyear);
162
92
 
163
- let newCampus = []
93
+ let [from, to] = _acadyear.year.split('-')
164
94
 
165
- const existingCampus = await Campuses.findAll()
166
- const existingCampusMap = new Map(existingCampus.map(campus => [`[${campus.code}] - ${campus.name}`, campus]))
167
-
168
- for (let i = 0; i < campusApi.length; i++){
169
- try {
170
-
171
- let _campus = campusApi[i]
95
+ to = /^\d+$/.test(to) ? parseInt(to, 10) : null;
96
+ from = /^\d+$/.test(from) ? parseInt(from, 10) : null;
97
+
98
+ let defaultDate = new Date()
99
+ let currentYear = defaultDate.getFullYear()
100
+ let previousYear = currentYear - 1
101
+
102
+ let isDefault = false
103
+ if(from == previousYear && to == currentYear) isDefault = true
172
104
 
173
105
  let modifiedById = userMail?._id
174
106
  let createdById = userMail?._id
175
107
 
176
- let name = _campus?.name
177
- let code = _campus?.code
178
-
179
108
  let migratedAt = new Date() //present date of the migration
180
- let migratedTable = 'Campuses' // sql counterpart main table
181
- let referenceId = _campus?.id // id of the data
109
+ let migratedTable = 'AcademicYears' // sql counterpart main table
110
+ let referenceId = _acadyear?.id // id of the data
182
111
  let isMigrated = true
183
112
 
184
- if(uCode.has(code) && uName.has(name)){
185
- const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
113
+
114
+ if(uFrom.has(from) && uTo.has(to)){
115
+ const errorMsg = `Duplicate Payload Found: [${from} - ${to}]`
186
116
  if(!uniqueErrors.has(errorMsg)){
187
117
  logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
188
118
  uniqueErrors.add(errorMsg)
189
119
  errorCounter++
190
120
  }
191
121
  }
192
- else if ( existingCampusMap.has(`[${code}] - ${name}`)){
193
- const existingCampus = existingCampusMap.get(`[${code}] - ${name}`)
194
- const errorMsg = `Existing Data Found:[${existingCampus.code}] - ${existingCampus.name}`
122
+ else if ( exYearMap.has(`[${from} - ${to}]`)){
123
+ const exYear = exYearMap.get(`[${from} - ${to}]`)
124
+ const errorMsg = `Existing Data Found:[${exYear.from} - ${exYear.to}]`
195
125
  if(!uniqueErrors.has(errorMsg)){
196
126
  logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
197
127
  uniqueErrors.add(errorMsg)
@@ -199,15 +129,14 @@ const server = {
199
129
  }
200
130
  }
201
131
  else{
202
- uCode.add(code)
203
- uName.add(name)
204
- newCampus.push({
205
- name: _campus?.name,
206
- code: _campus?.code,
207
- email: _campus?.email,
208
- address: _campus?.address,
132
+ uFrom.add(from)
133
+ uTo.add(to)
134
+ newYears.push({
135
+ from,
136
+ to,
209
137
  modifiedById,
210
138
  createdById,
139
+ default: isDefault,
211
140
  migratedAt,
212
141
  migratedTable,
213
142
  referenceId,
@@ -216,27 +145,26 @@ const server = {
216
145
  }
217
146
 
218
147
  } catch (error) {
219
- ;
220
- logger.error(`Error occurred: ${error.stack} ${error}`);
148
+ ;
149
+ logger.error(`Error occurred: ${error.stack} ${error}`);
221
150
  }
222
151
  }
223
152
 
224
- // bulk create new campus Records
225
- if (newCampus.length > 0) {
226
- await Campuses.bulkCreate(newCampus)
227
- createdCounter += newCampus.length
228
-
229
- newCampus.forEach((campus, index) => {
230
- logger.info(`${index + 1}/${index + 1}: New Campus Record Created: [${campus.code}], ${campus.name}`)
231
- });
232
- }
153
+ if (newYears.length > 0) {
154
+ await AcademicYears.bulkCreate(newYears)
155
+ createdCounter += newYears.length
156
+
157
+ newYears.forEach((year, index) => {
158
+ logger.info(`${index + 1}/${index + 1}: New Academic Years Record Created: [${year.from} - ${year.to}]`)
159
+ });
160
+ }
233
161
 
234
162
  console.log("");
235
163
  console.log("########################################################")
236
164
  console.log("")
237
- logger.info('Campus Data Migration Completed');
238
- logger.info(`Total Successful Campus Records Created: ${createdCounter}/${createdCounter}`);
239
- logger.info(`Total Existing Campus Records: ${errorCounter}/${errorCounter}`);
165
+ logger.info('Academic Years Data Migration Completed');
166
+ logger.info(`Total Successful Academic Years Records Created: ${createdCounter}/${createdCounter}`);
167
+ logger.info(`Total Existing Academic Years Records: ${errorCounter}/${errorCounter}`);
240
168
  logger.info(`Total Records: ${createdCounter + errorCounter}`);
241
169
  console.log("")
242
170
  console.log("########################################################")
@@ -256,86 +184,86 @@ const server = {
256
184
  }
257
185
  },
258
186
 
259
- async College(){
187
+ async Semester(){
260
188
  try {
261
189
  await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
262
190
 
263
191
  console.log("");
264
192
  console.log("########################################################")
265
- console.log(" Colleges Migration ")
193
+ console.log(" Semesters Migration ")
266
194
  console.log("########################################################")
267
195
  console.log("");
268
196
 
269
197
  const db_schema = schema
270
- let maxIds = await Colleges.max('_id'); // Fetch maximum _id directly from the Colleges model
198
+ let maxIds = await AcademicYears.max('_id'); // Fetch maximum _id directly from the AcademicYears model
271
199
  let maxId = maxIds|| 0;
272
- await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Colleges__id_seq"`);
273
- await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Colleges__id_seq" RESTART WITH ${maxId + 1}`);
274
-
200
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Semesters__id_seq"`);
201
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Semesters__id_seq" RESTART WITH ${maxId + 1}`);
275
202
  await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
276
203
 
277
- const collegeApi = await api.College()
278
- const campusApi = await api.Campus()
279
204
 
280
- const campusSeq = await Campuses.findAll()
281
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
282
- const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
283
-
284
- let defaultPayload = {
285
- name: 'Colleges Default',
286
- code: 'DefCol',
287
- campusId: campusDefault._id,
288
- modifiedById: userMail?._id,
289
- createdById: userMail?._id
205
+ let userDefPayload = {
206
+ email: 'ccci_integrator@gmail.com',
207
+ password: '$2a$12$Q.h3Q9IN6vsIxGBa/EgfOOABeXTcwxt4t9cu4nqAK.nczGRRtZJUS',
208
+ temporaryPassword: 'P@ssw0rd123',
209
+ firstName: 'Androi',
210
+ lastName: 'Pamisaran',
211
+ adminScopes: [],
212
+ createdAt: new Date(),
213
+ updatedAt: new Date()
290
214
  };
291
215
 
292
- let [defaults, createddef] = await Colleges.findOrCreate({
293
- where: { name: defaultPayload.name, code: defaultPayload.code},
294
- defaults: defaultPayload
295
- });
216
+ let [userDefault, createdUser] = await Users.findOrCreate({
217
+ where: { email: userDefPayload.email },
218
+ defaults: userDefPayload
219
+ });
220
+
221
+ const acadYearApi = await api.AcademicYear()
222
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
296
223
 
297
224
  let createdCounter = 0
298
225
  let errorCounter = 0
299
- let uniqueErrors = new Set()
226
+ let uniqueErrors = new Set()
227
+
228
+ const { acadYearResult, currentSchoolYear } = acadYearApi;
229
+
300
230
 
301
231
  let uCode = new Set()
302
- let uName = new Set()
232
+ let uDesc = new Set()
303
233
 
304
- let newColleges = []
234
+ let newYears = []
305
235
 
306
- const existingCollege = await Colleges.findAll()
307
- const existingCollegeMap = new Map(existingCollege.map(college => [`[${college.code}] - ${college.name}`, college]))
236
+ const exYear = await Semesters.findAll()
237
+ const exYearMap = new Map(exYear.map(sem => [`[${sem.code}] ${sem.description}`, sem]))
238
+
308
239
 
309
- for (let i = 0; i < collegeApi.length; i++){
240
+ for (let i = 0; i < acadYearResult.length; i++){
310
241
  try {
311
- let _college = collegeApi[i]
312
-
313
- let campusMap = campusApi.find(a => a.id === _college?.campus_id)
314
-
315
- let _campus = campusSeq.find(b => b.name === campusMap?.name)
242
+ let _acadyear = acadYearResult[i]
316
243
 
317
244
  let modifiedById = userMail?._id
318
245
  let createdById = userMail?._id
319
246
 
320
- let name = _college?.name
321
- let code = _college?.code
322
-
323
247
  let migratedAt = new Date() //present date of the migration
324
- let migratedTable = 'Colleges' // sql counterpart main table
325
- let referenceId = _college.id // id of the data
248
+ let migratedTable = 'AcademicYears' // sql counterpart main table
249
+ let referenceId = _acadyear?.id // id of the data
326
250
  let isMigrated = true
327
251
 
328
- if(uCode.has(code) && uName.has(name)){
329
- const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
252
+ let code = _acadyear?.term
253
+ let description = _acadyear?.term
254
+
255
+
256
+ if(uCode.has(code) && uDesc.has(description)){
257
+ const errorMsg = `Duplicate Payload Found: [${code}] ${description}]`
330
258
  if(!uniqueErrors.has(errorMsg)){
331
259
  logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
332
260
  uniqueErrors.add(errorMsg)
333
261
  errorCounter++
334
262
  }
335
263
  }
336
- else if ( existingCollegeMap.has(`[${code}] - ${name}`)){
337
- const existingCollege = existingCollegeMap.get(`[${code}] - ${name}`)
338
- const errorMsg = `Existing Data Found:[${existingCollege.code}] - ${existingCollege.name}`
264
+ else if ( exYearMap.has(`[${code}] ${description}`)){
265
+ const exYear = exYearMap.get(`[${code}] ${description}`)
266
+ const errorMsg = `Existing Data Found:[${exYear.code}] ${exYear.description}]`
339
267
  if(!uniqueErrors.has(errorMsg)){
340
268
  logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
341
269
  uniqueErrors.add(errorMsg)
@@ -344,20 +272,15 @@ const server = {
344
272
  }
345
273
  else{
346
274
  uCode.add(code)
347
- uName.add(name)
348
- newColleges.push({
349
- name: _college?.name,
350
- code: _college?.code,
351
- campusId: _campus?._id??campusDefault?._id,
275
+ uDesc.add(description)
276
+ newYears.push({
277
+ code,
278
+ description,
352
279
  modifiedById,
353
280
  createdById,
354
281
  migratedAt,
355
282
  migratedTable,
356
283
  referenceId,
357
- isMigrated,
358
- migratedAt,
359
- migratedTable,
360
- referenceId,
361
284
  isMigrated
362
285
  })
363
286
  }
@@ -368,31 +291,28 @@ const server = {
368
291
  }
369
292
  }
370
293
 
371
- // bulk create new campus Records
372
- if (newColleges.length > 0) {
373
- await Colleges.bulkCreate(newColleges)
374
- createdCounter += newColleges.length
375
-
376
- newColleges.forEach((colleges, index) => {
377
- logger.info(`${index + 1}/${index + 1}: New Colleges Record Created: [${colleges.code}], ${colleges.name}`)
378
- });
379
- }
380
-
381
- let itemLength = createdCounter + errorCounter;
294
+ if (newYears.length > 0) {
295
+ await Semesters.bulkCreate(newYears)
296
+ createdCounter += newYears.length
297
+
298
+ newYears.forEach((year, index) => {
299
+ logger.info(`${index + 1}/${index + 1}: New Semesters Years Record Created: [${year.code} - ${year.description}]`)
300
+ });
301
+ }
382
302
 
383
303
  console.log("");
384
304
  console.log("########################################################")
385
305
  console.log("")
386
- logger.info('College Data Migration Completed');
387
- logger.info(`Total Successful College Records Created: ${createdCounter}/${createdCounter}`);
388
- logger.info(`Total Existing College Records: ${errorCounter}/${errorCounter}`);
389
- logger.info(`Total Records: ${itemLength}`)
306
+ logger.info('Semesters Data Migration Completed');
307
+ logger.info(`Total Successful Semesters Records Created: ${createdCounter}/${createdCounter}`);
308
+ logger.info(`Total Existing Semesters Records: ${errorCounter}/${errorCounter}`);
309
+ logger.info(`Total Records: ${createdCounter + errorCounter}`);
390
310
  console.log("")
391
311
  console.log("########################################################")
392
312
  console.log("")
393
313
 
394
314
  let totalSummary = {
395
- itemLength: itemLength,
315
+ itemLength: createdCounter + errorCounter,
396
316
  error: errorCounter,
397
317
  success: createdCounter
398
318
  }
@@ -405,48 +325,128 @@ const server = {
405
325
  }
406
326
  },
407
327
 
408
- async AcademicDepartment(){
328
+ async Campus(){
409
329
  try {
410
330
  await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
411
-
412
331
  console.log("");
413
332
  console.log("########################################################")
414
- console.log(" Academic Departments Migration ")
333
+ console.log(" Campuses Migration ")
415
334
  console.log("########################################################")
416
335
  console.log("");
417
336
 
418
337
  const db_schema = schema
419
- let maxIds = await AcademicDepartments.max('_id'); // Fetch maximum _id directly from the AcademicDepartments model
338
+ let maxIds = await Campuses.max('_id'); //Fetch maximum _id directly from the campuses model
339
+ let maxIdsSem = await Semesters.max('_id'); //Fetch maximum _id directly from the campuses model
340
+ let maxIdsUser = await Users.max('_id'); //Fetch maximum _id directly from the campuses model
341
+
420
342
  let maxId = maxIds|| 0;
421
- await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."AcademicDepartments__id_seq"`);
422
- await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicDepartments__id_seq" RESTART WITH ${maxId + 1}`);
343
+ let maxIdSems = maxIdsSem || 0;
344
+ let maxIdUsers = maxIdsUser || 0;
345
+
346
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Users__id_seq"`);
347
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Users__id_seq" RESTART WITH ${maxIdUsers + 1}`);
348
+
349
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Campuses__id_seq"`);
350
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Campuses__id_seq" RESTART WITH ${maxId + 1}`);
351
+
352
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Semesters__id_seq"`);
353
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Semesters__id_seq" RESTART WITH ${maxIdSems + 1}`);
354
+
423
355
  await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
424
356
 
425
- const departmentApi = await api.Department()
426
- const campusApi = await api.Campus()
427
- const collegeApi = await api.College()
428
- const instructorApi = await api.Instructor()
429
357
 
430
- const campusSeq = await Campuses.findAll()
431
- const collegeSeq = await Colleges.findAll()
432
- const departmentSeq = await AcademicDepartments.findAll()
433
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
434
- const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
435
- const collegeDefault = await Colleges.findOne({ where: { name: 'Colleges Default' } });
358
+
359
+ let userDefPayload = {
360
+ email: 'ccci_integrator@gmail.com',
361
+ password: '$2a$12$Q.h3Q9IN6vsIxGBa/EgfOOABeXTcwxt4t9cu4nqAK.nczGRRtZJUS',
362
+ temporaryPassword: 'P@ssw0rd123',
363
+ firstName: 'Androi',
364
+ lastName: 'Pamisaran',
365
+ adminScopes: [],
366
+ createdAt: new Date(),
367
+ updatedAt: new Date()
368
+ };
436
369
 
437
- let defaultPayload = {
438
- name: 'AcademicDepartments Default',
439
- code: 'AcadDeptDef',
440
- campusId: campusDefault._id,
441
- collegeId: collegeDefault._id,
442
- chairPersonId: 99999,
370
+ let [userDefault, createdUser] = await Users.findOrCreate({
371
+ where: { email: userDefPayload.email },
372
+ defaults: userDefPayload
373
+ });
374
+
375
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
376
+
377
+ let yearDefPayload = {
378
+ from: 1799,
379
+ to: 1800,
380
+ modifiedById: userMail?._id,
381
+ createdById: userMail?._id,
382
+ default: false,
383
+ }
384
+ let [yeardef, createdyear] = await AcademicYears.findOrCreate({
385
+ where: {
386
+ from: yearDefPayload.from,
387
+ to: yearDefPayload.to,
388
+ },
389
+ defaults: yearDefPayload
390
+ });
391
+
392
+ // let semesterData = [
393
+ // {
394
+ // code: '1st Semester',
395
+ // description: '1st Semester',
396
+ // modifiedById: userMail?._id,
397
+ // createdById: userMail?._id
398
+ // },
399
+ // {
400
+ // code: '2nd Semester',
401
+ // description: '2nd Semester',
402
+ // modifiedById: userMail?._id,
403
+ // createdById: userMail?._id
404
+ // },
405
+ // {
406
+ // code: 'Summer',
407
+ // description: 'Summer',
408
+ // modifiedById: userMail?._id,
409
+ // createdById: userMail?._id
410
+ // },
411
+ // {
412
+ // code: 'School Year',
413
+ // description: 'School Year',
414
+ // modifiedById: userMail?._id,
415
+ // createdById: userMail?._id
416
+ // }
417
+
418
+ // ]
419
+
420
+ // for (let sem = 0; sem < semesterData.length; sem++) {
421
+ // const semesters = semesterData[sem];
422
+
423
+ // let semestersPayload = {
424
+ // code: semesters.code,
425
+ // description: semesters.description,
426
+ // modifiedById: userMail?._id,
427
+ // createdById: userMail?._id
428
+ // }
429
+
430
+ // let [semdefaults, semcreateddef] = await Semesters.findOrCreate({
431
+ // where: { code: semestersPayload.code},
432
+ // defaults: semestersPayload
433
+ // });
434
+ // }
435
+
436
+ const campusApi = await api.Campus()
437
+
438
+ let campusDefPayload = {
439
+ name: 'Campus Default',
440
+ code: 'DEF',
441
+ email: 'campus_default@gmail.com',
442
+ address: 'MSC',
443
443
  modifiedById: userMail?._id,
444
444
  createdById: userMail?._id
445
445
  };
446
446
 
447
- let [defaults, createddef] = await AcademicDepartments.findOrCreate({
448
- where: { name: defaultPayload.name, code: defaultPayload.code},
449
- defaults: defaultPayload
447
+ let [defaults, createddef] = await Campuses.findOrCreate({
448
+ where: { name: campusDefPayload.name, code: campusDefPayload.code},
449
+ defaults: campusDefPayload
450
450
  });
451
451
 
452
452
  let createdCounter = 0
@@ -455,33 +455,26 @@ const server = {
455
455
 
456
456
  let uCode = new Set()
457
457
  let uName = new Set()
458
- let newAcadDept = []
459
- const exAcadDept = await AcademicDepartments.findAll()
460
- const exAcadDeptMap = new Map(exAcadDept.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
461
458
 
462
- let uCodeTwo = new Set()
463
- let uNameTwo = new Set()
464
- let newAcadDeptTwo = []
465
- const exAcadDeptTwo = await AcademicDepartments.findAll()
466
- const exAcadDeptMapTwo = new Map(exAcadDeptTwo.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
467
-
459
+ let newCampus = []
468
460
 
469
- for (let i = 0; i < departmentApi.length; i++){
461
+ const existingCampus = await Campuses.findAll()
462
+ const existingCampusMap = new Map(existingCampus.map(campus => [`[${campus.code}] - ${campus.name}`, campus]))
463
+
464
+ for (let i = 0; i < campusApi.length; i++){
470
465
  try {
471
- let _acadDept = departmentApi[i]
472
- let _college = collegeSeq.find( col => col.code === _acadDept?.code)
473
- let college = collegeApi.find( cols => cols.code === _acadDept?.code)
474
- let _campus = campusApi.find(cam => cam.id === college?.campus_id)
475
- let campus = campusSeq.find(camp => camp.code === _campus?.code)
476
- let chairPersonDefault = 0
466
+
467
+ let _campus = campusApi[i]
468
+
477
469
  let modifiedById = userMail?._id
478
470
  let createdById = userMail?._id
479
- let name = _acadDept?.name
480
- let code = _acadDept?.code
471
+
472
+ let name = _campus?.name
473
+ let code = _campus?.code
481
474
 
482
475
  let migratedAt = new Date() //present date of the migration
483
- let migratedTable = 'Departments' // sql counterpart main table
484
- let referenceId = _acadDept.id // id of the data
476
+ let migratedTable = 'Campuses' // sql counterpart main table
477
+ let referenceId = _campus?.id // id of the data
485
478
  let isMigrated = true
486
479
 
487
480
  if(uCode.has(code) && uName.has(name)){
@@ -492,9 +485,9 @@ const server = {
492
485
  errorCounter++
493
486
  }
494
487
  }
495
- else if ( exAcadDeptMap.has(`[${code}] - ${name}`)){
496
- const exAcadDept = exAcadDeptMap.get(`[${code}] - ${name}`)
497
- const errorMsg = `Existing Data Found:[${exAcadDept.code}] - ${exAcadDept.name}`
488
+ else if ( existingCampusMap.has(`[${code}] - ${name}`)){
489
+ const existingCampus = existingCampusMap.get(`[${code}] - ${name}`)
490
+ const errorMsg = `Existing Data Found:[${existingCampus.code}] - ${existingCampus.name}`
498
491
  if(!uniqueErrors.has(errorMsg)){
499
492
  logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
500
493
  uniqueErrors.add(errorMsg)
@@ -504,11 +497,11 @@ const server = {
504
497
  else{
505
498
  uCode.add(code)
506
499
  uName.add(name)
507
- newAcadDept.push({
508
- name: _acadDept?.name,
509
- code: _acadDept?.code,
510
- collegeId: _college?._id??collegeDefault?._id,
511
- campusId: campus?._id??campusDefault?._id,
500
+ newCampus.push({
501
+ name: _campus?.name,
502
+ code: _campus?.code,
503
+ email: _campus?.email,
504
+ address: _campus?.address,
512
505
  modifiedById,
513
506
  createdById,
514
507
  migratedAt,
@@ -517,166 +510,238 @@ const server = {
517
510
  isMigrated
518
511
  })
519
512
  }
513
+
520
514
  } catch (error) {
521
- logger.error(`Error occurred: ${error.stack} ${error}`);
515
+ ;
516
+ logger.error(`Error occurred: ${error.stack} ${error}`);
522
517
  }
523
518
  }
524
- if (newAcadDept.length > 0) {
525
- await AcademicDepartments.bulkCreate(newAcadDept)
526
- createdCounter += newAcadDept.length
527
-
528
- newAcadDept.forEach((dept, index) => {
529
- logger.info(`${index + 1}/${index + 1}: New Academic Department Record Created: [${dept.code}], ${dept.name}`)
530
- });
531
- }
532
519
 
533
-
534
- //additional departments from instructors api
535
- for (let j = 0; j < instructorApi.length; j++) {
536
- try {
537
- let instructor = instructorApi[j];
538
- let modifiedById = userMail?._id
539
- let createdById = userMail?._id
520
+ // bulk create new campus Records
521
+ if (newCampus.length > 0) {
522
+ await Campuses.bulkCreate(newCampus)
523
+ createdCounter += newCampus.length
540
524
 
541
- let acadDepartmentMap = departmentApi.find(a => a.name === instructor?.department_name)
525
+ newCampus.forEach((campus, index) => {
526
+ logger.info(`${index + 1}/${index + 1}: New Campus Record Created: [${campus.code}], ${campus.name}`)
527
+ });
528
+ }
542
529
 
543
- let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
530
+ console.log("");
531
+ console.log("########################################################")
532
+ console.log("")
533
+ logger.info('Campus Data Migration Completed');
534
+ logger.info(`Total Successful Campus Records Created: ${createdCounter}/${createdCounter}`);
535
+ logger.info(`Total Existing Campus Records: ${errorCounter}/${errorCounter}`);
536
+ logger.info(`Total Records: ${createdCounter + errorCounter}`);
537
+ console.log("")
538
+ console.log("########################################################")
539
+ console.log("")
544
540
 
545
- let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
541
+ let totalSummary = {
542
+ itemLength: createdCounter + errorCounter,
543
+ error: errorCounter,
544
+ success: createdCounter
545
+ }
546
+ return totalSummary
546
547
 
547
- let campusDefault = "MSC - Boac Campus"
548
- let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
548
+ } catch (error) {
549
+ ;
550
+ logger.error(`Error occurred: ${error.stack} ${error}`);
551
+
552
+ }
553
+ },
549
554
 
550
- let code = instructor?.department_name ?? 'CODE'
551
- code = code.split(/\s+/).map((word) => word.charAt(0).toUpperCase()).join('')
555
+ async College(){
556
+ try {
557
+ await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
552
558
 
553
- let name = instructor?.department_name
559
+ console.log("");
560
+ console.log("########################################################")
561
+ console.log(" Colleges Migration ")
562
+ console.log("########################################################")
563
+ console.log("");
554
564
 
555
- if(uCodeTwo.has(code) && uNameTwo.has(name)){
565
+ const db_schema = schema
566
+ let maxIds = await Colleges.max('_id'); // Fetch maximum _id directly from the Colleges model
567
+ let maxId = maxIds|| 0;
568
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Colleges__id_seq"`);
569
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Colleges__id_seq" RESTART WITH ${maxId + 1}`);
570
+
571
+ await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
572
+
573
+ const collegeApi = await api.College()
574
+ const campusApi = await api.Campus()
575
+
576
+ const campusSeq = await Campuses.findAll()
577
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
578
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
579
+
580
+ let defaultPayload = {
581
+ name: 'Colleges Default',
582
+ code: 'DefCol',
583
+ campusId: campusDefault._id,
584
+ modifiedById: userMail?._id,
585
+ createdById: userMail?._id
586
+ };
587
+
588
+ let [defaults, createddef] = await Colleges.findOrCreate({
589
+ where: { name: defaultPayload.name, code: defaultPayload.code},
590
+ defaults: defaultPayload
591
+ });
592
+
593
+ let createdCounter = 0
594
+ let errorCounter = 0
595
+ let uniqueErrors = new Set()
596
+
597
+ let uCode = new Set()
598
+ let uName = new Set()
599
+
600
+ let newColleges = []
601
+
602
+ const existingCollege = await Colleges.findAll()
603
+ const existingCollegeMap = new Map(existingCollege.map(college => [`[${college.code}] - ${college.name}`, college]))
604
+
605
+ for (let i = 0; i < collegeApi.length; i++){
606
+ try {
607
+ let _college = collegeApi[i]
608
+
609
+ let campusMap = campusApi.find(a => a.id === _college?.campus_id)
610
+
611
+ let _campus = campusSeq.find(b => b.name === campusMap?.name)
612
+
613
+ let modifiedById = userMail?._id
614
+ let createdById = userMail?._id
615
+
616
+ let name = _college?.name
617
+ let code = _college?.code
618
+
619
+ let migratedAt = new Date() //present date of the migration
620
+ let migratedTable = 'Colleges' // sql counterpart main table
621
+ let referenceId = _college.id // id of the data
622
+ let isMigrated = true
623
+
624
+ if(uCode.has(code) && uName.has(name)){
556
625
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
557
- if(!uniqueErrors.has(errorMsg)){
626
+ if(!uniqueErrors.has(errorMsg)){
558
627
  logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
559
628
  uniqueErrors.add(errorMsg)
560
629
  errorCounter++
630
+ }
561
631
  }
562
- }
563
- else if ( exAcadDeptMapTwo.has(`[${code}] - ${name}`)){
564
- const exAcadDeptTwo = exAcadDeptMapTwo.get(`[${code}] - ${name}`)
565
- const errorMsg = `Existing Data Found:[${exAcadDeptTwo.code}] - ${exAcadDeptTwo.name}`
632
+ else if ( existingCollegeMap.has(`[${code}] - ${name}`)){
633
+ const existingCollege = existingCollegeMap.get(`[${code}] - ${name}`)
634
+ const errorMsg = `Existing Data Found:[${existingCollege.code}] - ${existingCollege.name}`
566
635
  if(!uniqueErrors.has(errorMsg)){
567
- logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
568
- uniqueErrors.add(errorMsg)
569
- errorCounter++
636
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
637
+ uniqueErrors.add(errorMsg)
638
+ errorCounter++
570
639
  }
571
- }
640
+ }
572
641
  else{
573
- uCodeTwo.add(code)
574
- uNameTwo.add(name)
575
- newAcadDeptTwo.push({
576
- name: instructor?.department_name,
577
- code: code,
642
+ uCode.add(code)
643
+ uName.add(name)
644
+ newColleges.push({
645
+ name: _college?.name,
646
+ code: _college?.code,
647
+ campusId: _campus?._id??campusDefault?._id,
578
648
  modifiedById,
579
649
  createdById,
580
- campusId: campusMap?._id??_campusDefault?._id,
581
- collegeId: collegeDefault?._id,
582
-
650
+ migratedAt,
651
+ migratedTable,
652
+ referenceId,
653
+ isMigrated,
654
+ migratedAt,
655
+ migratedTable,
656
+ referenceId,
657
+ isMigrated
583
658
  })
584
659
  }
585
-
586
-
660
+
587
661
  } catch (error) {
588
- logger.error(`Error occurred: ${error} ${error.stack}`);
662
+ ;
663
+ logger.error(`Error occurred: ${error.stack} ${error}`);
589
664
  }
590
665
  }
591
- if (newAcadDeptTwo.length > 0) {
592
- await AcademicDepartments.bulkCreate(newAcadDeptTwo)
593
- createdCounter += newAcadDeptTwo.length
594
666
 
595
- newAcadDeptTwo.forEach((deptTwo, index) => {
596
- logger.info(`${index + 1}/${index + 1}: New Academic Department Record Created: [${deptTwo.code}], ${deptTwo.name}`)
597
- });
598
- }
667
+ // bulk create new campus Records
668
+ if (newColleges.length > 0) {
669
+ await Colleges.bulkCreate(newColleges)
670
+ createdCounter += newColleges.length
671
+
672
+ newColleges.forEach((colleges, index) => {
673
+ logger.info(`${index + 1}/${index + 1}: New Colleges Record Created: [${colleges.code}], ${colleges.name}`)
674
+ });
675
+ }
676
+
677
+ let itemLength = createdCounter + errorCounter;
599
678
 
600
679
  console.log("");
601
680
  console.log("########################################################")
602
681
  console.log("")
603
- logger.info('Academic Department Data Migration Completed');
604
- logger.info(`Total Successful Academic Department Records Created: ${createdCounter}/${createdCounter}`);
605
- logger.info(`Total Existing Academic Department Records: ${errorCounter}/${errorCounter}`);
606
- logger.info(`Total Records: ${createdCounter + errorCounter}`);
682
+ logger.info('College Data Migration Completed');
683
+ logger.info(`Total Successful College Records Created: ${createdCounter}/${createdCounter}`);
684
+ logger.info(`Total Existing College Records: ${errorCounter}/${errorCounter}`);
685
+ logger.info(`Total Records: ${itemLength}`)
607
686
  console.log("")
608
687
  console.log("########################################################")
609
688
  console.log("")
610
689
 
611
690
  let totalSummary = {
612
- itemLength: createdCounter + errorCounter,
691
+ itemLength: itemLength,
613
692
  error: errorCounter,
614
693
  success: createdCounter
615
694
  }
616
695
  return totalSummary
617
696
 
618
697
  } catch (error) {
619
- logger.error(`Error occurred: ${error} ${error.stack}`);
620
- logger.error(`Error occurredsss: ${error.stack}`);
698
+ ;
699
+ logger.error(`Error occurred: ${error.stack} ${error}`);
700
+
621
701
  }
622
702
  },
623
703
 
624
- async Instructor(){
625
- let userIds = []
626
- await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
627
-
704
+ async AcademicDepartment(){
628
705
  try {
706
+ await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
707
+
629
708
  console.log("");
630
709
  console.log("########################################################")
631
- console.log(" Instructors Migrations ")
710
+ console.log(" Academic Departments Migration ")
632
711
  console.log("########################################################")
633
712
  console.log("");
634
713
 
635
714
  const db_schema = schema
636
- let maxIds = await Users.max('_id'); //Fetch maximum _id directly from the Users model
637
- let maxIdsIns = await Instructors.max('_id'); //Fetch maximum _id directly from the Users model
638
-
639
- // console.log('maxIdsIns :>> ', maxIdsIns);
640
-
715
+ let maxIds = await AcademicDepartments.max('_id'); // Fetch maximum _id directly from the AcademicDepartments model
641
716
  let maxId = maxIds|| 0;
642
- let maxIdIns = maxIdsIns|| 0;
643
-
644
- // console.log('maxIdIns :>> ', maxIdIns);
645
-
646
- await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Users__id_seq"`);
647
- await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Users__id_seq" RESTART WITH ${maxId + 1}`);
648
-
649
- await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Instructors__id_seq"`);
650
- await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Instructors__id_seq" RESTART WITH ${maxIdIns + 1}`);
717
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."AcademicDepartments__id_seq"`);
718
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicDepartments__id_seq" RESTART WITH ${maxId + 1}`);
651
719
  await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
652
720
 
653
- const instructorApi = await api.Instructor()
654
721
  const departmentApi = await api.Department()
722
+ const campusApi = await api.Campus()
723
+ const collegeApi = await api.College()
724
+ const instructorApi = await api.Instructor()
655
725
 
656
- const departmentSeq = await AcademicDepartments.findAll()
657
726
  const campusSeq = await Campuses.findAll()
658
- const employeeSeq = await Employees.findAll()
659
- const userSeq = await Users.findAll()
660
-
661
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
662
- if (!userMail){}
663
-
664
- const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
665
- const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
666
-
727
+ const collegeSeq = await Colleges.findAll()
728
+ const departmentSeq = await AcademicDepartments.findAll()
729
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
730
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
731
+ const collegeDefault = await Colleges.findOne({ where: { name: 'Colleges Default' } });
732
+
667
733
  let defaultPayload = {
668
- firstName: 'Instructor',
669
- lastName: 'Default',
670
- middleName: 'Migration',
671
- employeeNumber: '_Instructor',
672
- departmentId: departmentDefault?._id,
673
- campusId: campusDefault?._id,
734
+ name: 'AcademicDepartments Default',
735
+ code: 'AcadDeptDef',
736
+ campusId: campusDefault._id,
737
+ collegeId: collegeDefault._id,
738
+ chairPersonId: 99999,
674
739
  modifiedById: userMail?._id,
675
740
  createdById: userMail?._id
676
741
  };
677
742
 
678
- let [defaults, createddef] = await Instructors.findOrCreate({
679
- where: { employeeNumber: defaultPayload.employeeNumber, lastName: defaultPayload.lastName},
743
+ let [defaults, createddef] = await AcademicDepartments.findOrCreate({
744
+ where: { name: defaultPayload.name, code: defaultPayload.code},
680
745
  defaults: defaultPayload
681
746
  });
682
747
 
@@ -684,8 +749,239 @@ const server = {
684
749
  let errorCounter = 0
685
750
  let uniqueErrors = new Set()
686
751
 
687
- let uEmail = new Set()
688
- let uPass = new Set()
752
+ let uCode = new Set()
753
+ let uName = new Set()
754
+ let newAcadDept = []
755
+ const exAcadDept = await AcademicDepartments.findAll()
756
+ const exAcadDeptMap = new Map(exAcadDept.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
757
+
758
+ let uCodeTwo = new Set()
759
+ let uNameTwo = new Set()
760
+ let newAcadDeptTwo = []
761
+ const exAcadDeptTwo = await AcademicDepartments.findAll()
762
+ const exAcadDeptMapTwo = new Map(exAcadDeptTwo.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
763
+
764
+
765
+ for (let i = 0; i < departmentApi.length; i++){
766
+ try {
767
+ let _acadDept = departmentApi[i]
768
+ let _college = collegeSeq.find( col => col.code === _acadDept?.code)
769
+ let college = collegeApi.find( cols => cols.code === _acadDept?.code)
770
+ let _campus = campusApi.find(cam => cam.id === college?.campus_id)
771
+ let campus = campusSeq.find(camp => camp.code === _campus?.code)
772
+ let chairPersonDefault = 0
773
+ let modifiedById = userMail?._id
774
+ let createdById = userMail?._id
775
+ let name = _acadDept?.name
776
+ let code = _acadDept?.code
777
+
778
+ let migratedAt = new Date() //present date of the migration
779
+ let migratedTable = 'Departments' // sql counterpart main table
780
+ let referenceId = _acadDept.id // id of the data
781
+ let isMigrated = true
782
+
783
+ if(uCode.has(code) && uName.has(name)){
784
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
785
+ if(!uniqueErrors.has(errorMsg)){
786
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
787
+ uniqueErrors.add(errorMsg)
788
+ errorCounter++
789
+ }
790
+ }
791
+ else if ( exAcadDeptMap.has(`[${code}] - ${name}`)){
792
+ const exAcadDept = exAcadDeptMap.get(`[${code}] - ${name}`)
793
+ const errorMsg = `Existing Data Found:[${exAcadDept.code}] - ${exAcadDept.name}`
794
+ if(!uniqueErrors.has(errorMsg)){
795
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
796
+ uniqueErrors.add(errorMsg)
797
+ errorCounter++
798
+ }
799
+ }
800
+ else{
801
+ uCode.add(code)
802
+ uName.add(name)
803
+ newAcadDept.push({
804
+ name: _acadDept?.name,
805
+ code: _acadDept?.code,
806
+ collegeId: _college?._id??collegeDefault?._id,
807
+ campusId: campus?._id??campusDefault?._id,
808
+ modifiedById,
809
+ createdById,
810
+ migratedAt,
811
+ migratedTable,
812
+ referenceId,
813
+ isMigrated
814
+ })
815
+ }
816
+ } catch (error) {
817
+ logger.error(`Error occurred: ${error.stack} ${error}`);
818
+ }
819
+ }
820
+ if (newAcadDept.length > 0) {
821
+ await AcademicDepartments.bulkCreate(newAcadDept)
822
+ createdCounter += newAcadDept.length
823
+
824
+ newAcadDept.forEach((dept, index) => {
825
+ logger.info(`${index + 1}/${index + 1}: New Academic Department Record Created: [${dept.code}], ${dept.name}`)
826
+ });
827
+ }
828
+
829
+
830
+ //additional departments from instructors api
831
+ for (let j = 0; j < instructorApi.length; j++) {
832
+ try {
833
+ let instructor = instructorApi[j];
834
+ let modifiedById = userMail?._id
835
+ let createdById = userMail?._id
836
+
837
+ let acadDepartmentMap = departmentApi.find(a => a.name === instructor?.department_name)
838
+
839
+ let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
840
+
841
+ let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
842
+
843
+ let campusDefault = "MSC - Boac Campus"
844
+ let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
845
+
846
+ let code = instructor?.department_name ?? 'CODE'
847
+ code = code.split(/\s+/).map((word) => word.charAt(0).toUpperCase()).join('')
848
+
849
+ let name = instructor?.department_name
850
+
851
+ if(uCodeTwo.has(code) && uNameTwo.has(name)){
852
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
853
+ if(!uniqueErrors.has(errorMsg)){
854
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
855
+ uniqueErrors.add(errorMsg)
856
+ errorCounter++
857
+ }
858
+ }
859
+ else if ( exAcadDeptMapTwo.has(`[${code}] - ${name}`)){
860
+ const exAcadDeptTwo = exAcadDeptMapTwo.get(`[${code}] - ${name}`)
861
+ const errorMsg = `Existing Data Found:[${exAcadDeptTwo.code}] - ${exAcadDeptTwo.name}`
862
+ if(!uniqueErrors.has(errorMsg)){
863
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
864
+ uniqueErrors.add(errorMsg)
865
+ errorCounter++
866
+ }
867
+ }
868
+ else{
869
+ uCodeTwo.add(code)
870
+ uNameTwo.add(name)
871
+ newAcadDeptTwo.push({
872
+ name: instructor?.department_name,
873
+ code: code,
874
+ modifiedById,
875
+ createdById,
876
+ campusId: campusMap?._id??_campusDefault?._id,
877
+ collegeId: collegeDefault?._id,
878
+
879
+ })
880
+ }
881
+
882
+
883
+ } catch (error) {
884
+ logger.error(`Error occurred: ${error} ${error.stack}`);
885
+ }
886
+ }
887
+ if (newAcadDeptTwo.length > 0) {
888
+ await AcademicDepartments.bulkCreate(newAcadDeptTwo)
889
+ createdCounter += newAcadDeptTwo.length
890
+
891
+ newAcadDeptTwo.forEach((deptTwo, index) => {
892
+ logger.info(`${index + 1}/${index + 1}: New Academic Department Record Created: [${deptTwo.code}], ${deptTwo.name}`)
893
+ });
894
+ }
895
+
896
+ console.log("");
897
+ console.log("########################################################")
898
+ console.log("")
899
+ logger.info('Academic Department Data Migration Completed');
900
+ logger.info(`Total Successful Academic Department Records Created: ${createdCounter}/${createdCounter}`);
901
+ logger.info(`Total Existing Academic Department Records: ${errorCounter}/${errorCounter}`);
902
+ logger.info(`Total Records: ${createdCounter + errorCounter}`);
903
+ console.log("")
904
+ console.log("########################################################")
905
+ console.log("")
906
+
907
+ let totalSummary = {
908
+ itemLength: createdCounter + errorCounter,
909
+ error: errorCounter,
910
+ success: createdCounter
911
+ }
912
+ return totalSummary
913
+
914
+ } catch (error) {
915
+ logger.error(`Error occurred: ${error} ${error.stack}`);
916
+ logger.error(`Error occurredsss: ${error.stack}`);
917
+ }
918
+ },
919
+
920
+ async Instructor(){
921
+ let userIds = []
922
+ await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
923
+
924
+ try {
925
+ console.log("");
926
+ console.log("########################################################")
927
+ console.log(" Instructors Migrations ")
928
+ console.log("########################################################")
929
+ console.log("");
930
+
931
+ const db_schema = schema
932
+ let maxIds = await Users.max('_id'); //Fetch maximum _id directly from the Users model
933
+ let maxIdsIns = await Instructors.max('_id'); //Fetch maximum _id directly from the Users model
934
+
935
+ // console.log('maxIdsIns :>> ', maxIdsIns);
936
+
937
+ let maxId = maxIds|| 0;
938
+ let maxIdIns = maxIdsIns|| 0;
939
+
940
+ // console.log('maxIdIns :>> ', maxIdIns);
941
+
942
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Users__id_seq"`);
943
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Users__id_seq" RESTART WITH ${maxId + 1}`);
944
+
945
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Instructors__id_seq"`);
946
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Instructors__id_seq" RESTART WITH ${maxIdIns + 1}`);
947
+ await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
948
+
949
+ const instructorApi = await api.Instructor()
950
+ const departmentApi = await api.Department()
951
+
952
+ const departmentSeq = await AcademicDepartments.findAll()
953
+ const campusSeq = await Campuses.findAll()
954
+ const employeeSeq = await Employees.findAll()
955
+ const userSeq = await Users.findAll()
956
+
957
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
958
+ if (!userMail){}
959
+
960
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
961
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
962
+
963
+ let defaultPayload = {
964
+ firstName: 'Instructor',
965
+ lastName: 'Default',
966
+ middleName: 'Migration',
967
+ employeeNumber: '_Instructor',
968
+ departmentId: departmentDefault?._id,
969
+ campusId: campusDefault?._id,
970
+ modifiedById: userMail?._id,
971
+ createdById: userMail?._id
972
+ };
973
+
974
+ let [defaults, createddef] = await Instructors.findOrCreate({
975
+ where: { employeeNumber: defaultPayload.employeeNumber, lastName: defaultPayload.lastName},
976
+ defaults: defaultPayload
977
+ });
978
+
979
+ let createdCounter = 0
980
+ let errorCounter = 0
981
+ let uniqueErrors = new Set()
982
+
983
+ let uEmail = new Set()
984
+ let uPass = new Set()
689
985
  let uTPass = new Set()
690
986
  let uULname = new Set()
691
987
  let uUFname = new Set()
@@ -695,7 +991,8 @@ const server = {
695
991
  let newUser = []
696
992
 
697
993
  const exUser = await Users.findAll()
698
- const exUserMap = new Map(exUser.map(usr => [`[${usr.email} - ${usr.password} ${usr.temporaryPassword}] - ${usr.lastName}, ${usr.firstName} ${usr.middleName} ${usr.adminScopes}`, usr]))
994
+ const exUserMap = new Map(exUser.map(usr => [`${usr.lastName}, ${usr.firstName} ${usr.middleName}`, usr]))
995
+ // const exUserMap = new Map(exUser.map(usr => [`[${usr.email} - ${usr.password} ${usr.temporaryPassword}] - ${usr.lastName}, ${usr.firstName} ${usr.middleName} ${usr.adminScopes}`, usr]))
699
996
 
700
997
  let uDept = new Set()
701
998
  let uCamp = new Set()
@@ -709,6 +1006,15 @@ const server = {
709
1006
  const exInst = await Instructors.findAll()
710
1007
  const exInstMap = new Map(exInst.map(inst => [`[${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [${inst.departmentId}, ${inst.campusId}]` , inst]))
711
1008
 
1009
+ let uApplication = new Set()
1010
+ let uRole = new Set ()
1011
+ let uUser = new Set ()
1012
+
1013
+ let newUserRole = []
1014
+
1015
+ const exURole = await UserRoles.findAll()
1016
+ const exURoleMap = new Map (exURole.map( role => [`${role.applicationId} ${role.roleId} ${role.userId}`, role]))
1017
+
712
1018
  for (let i = 0; i < instructorApi.length; i++){
713
1019
  try {
714
1020
  let _instructor = instructorApi[i]
@@ -732,17 +1038,6 @@ const server = {
732
1038
  let campusDefault = "MSC - Boac Campus"
733
1039
  let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
734
1040
 
735
- let role = _instructor?.role
736
- let isChairPerson = false
737
- let isDean = false
738
-
739
- if(role === "Program Chair"){
740
- isChairPerson = true
741
- }
742
- if(role === "Dean"){
743
- isDean = true
744
- }
745
-
746
1041
  let migratedAt = new Date() //present date of the migration
747
1042
  let migratedTable = 'Instructors' // sql counterpart main table
748
1043
  let referenceId = _instructor?.id // id of the data
@@ -763,27 +1058,62 @@ const server = {
763
1058
  let getfNameU = _instructor?.first_name.split("")[0].toUpperCase()||""
764
1059
  let getfNameL = _instructor?.first_name.split("")[0].toLowerCase()||""
765
1060
  let getlName = _instructor?.last_name.toLowerCase().replace(/\s/g, '')?? ""
1061
+ let lastNameWithoutTitles = _instructor?.last_name.split(',')[0].toLowerCase().replace(/\s/g, '')?? ""
1062
+ let _lastName = _instructor?.last_name.split(',')[0].replace(/\s/g, '')?? ""
766
1063
 
767
- let email = `${employeeNumber}.${getfNameL}${getlName}@mscmarinduque.edu.ph`
768
- let password = `${employeeNumber}${getfNameU}${getlName}`
1064
+
1065
+ let email = `${employeeNumber}.${getfNameL}${lastNameWithoutTitles}@mscmarinduque.edu.ph`
1066
+ let password = `${employeeNumber}${getfNameU}${lastNameWithoutTitles}`
769
1067
  const hashedPassword = await bcrypt.hash(password, saltRounds);
770
1068
 
771
- let temporaryPassword = getUserName
1069
+ let temporaryPassword = `${employeeNumber}${getfNameU}${lastNameWithoutTitles}`
772
1070
  let adminScopes = []
773
1071
 
774
- // console.log('userId :>> ', userId);
1072
+ const userApp = await Applications.findOne({ where: { name: "Learning Management System - Instructor" }})
775
1073
 
776
- if(uEmail.has(email) && uPass.has(password) && uTPass.has(temporaryPassword) && uULname.has(lastName) && uUFname.has(firstName) && uUMname.has(middleName) && uScopes.has(adminScopes)){
777
- const errorMsg = `Duplicate Payload Found: [${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`
778
- if(!uniqueErrors.has(errorMsg)){
779
- // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
780
- uniqueErrors.add(errorMsg)
781
- // errorCounter++
1074
+ let role = _instructor?.role
1075
+ let isChairPerson = false
1076
+ let isDean = false
1077
+
1078
+ if(role === "Program Chair"){
1079
+ isChairPerson = true
1080
+ }
1081
+ if(role === "Dean"){
1082
+ isDean = true
1083
+ }
1084
+
1085
+ let roleCategory
1086
+
1087
+ if (isDean === true){
1088
+ roleCategory = await Roles.findOne({where: {name: 'Dean'}})
1089
+
1090
+ }
1091
+ else if (isDean === true && departmentId){
1092
+ roleCategory = await Roles.findOne({where: {description: 'Access all sections under the department'}})
1093
+ }
1094
+ else{
1095
+ roleCategory = await Roles.findOne({where: {name: 'Instructor'}})
1096
+ }
1097
+
1098
+ let roleId = roleCategory?._id
1099
+ let applicationId = userApp?._id
1100
+
1101
+
1102
+
1103
+
1104
+ // console.log('userId :>> ', userId);
1105
+
1106
+ if(uULname.has(lastName) && uUFname.has(firstName)){
1107
+ const errorMsg = `Duplicate Payload Found: ${lastName}, ${firstName}`
1108
+ if(!uniqueErrors.has(errorMsg)){
1109
+ // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1110
+ uniqueErrors.add(errorMsg)
1111
+ // errorCounter++
782
1112
  }
783
1113
  }
784
- else if (exUserMap.has(`[${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`)){
785
- const exUser = exUserMap.get(`[${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`)
786
- const errorMsg = `Existing Data Found: [${exUser.email} - ${exUser.password} ${exUser.temporaryPassword}] - ${exUser.lastName}, ${exUser.firstName} ${exUser.middleName} ${exUser.adminScopes}`
1114
+ else if (exUserMap.has(`${lastName}, ${firstName} ${middleName}`)){
1115
+ const exUser = exUserMap.get(`${lastName}, ${firstName} ${middleName}`)
1116
+ const errorMsg = `Existing Data Found: ${exUser.lastName}, ${exUser.firstName}`
787
1117
  if(!uniqueErrors.has(errorMsg)){
788
1118
  // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
789
1119
  uniqueErrors.add(errorMsg)
@@ -800,7 +1130,7 @@ const server = {
800
1130
  uScopes.add(adminScopes)
801
1131
  newUser.push({
802
1132
  firstName: _instructor?.first_name,
803
- lastName: _instructor?.last_name,
1133
+ lastName: _lastName,
804
1134
  middleName: _instructor?.middle_name,
805
1135
  password: hashedPassword,
806
1136
  temporaryPassword: password,
@@ -814,7 +1144,24 @@ const server = {
814
1144
  isMigrated,
815
1145
  })
816
1146
  }
817
-
1147
+
1148
+ //user roles creation
1149
+ if(
1150
+ uApplication.add(applicationId),
1151
+ uRole.add(roleId),
1152
+ uUser.add(userId)){
1153
+ newUserRole.push({
1154
+ applicationId,
1155
+ roleId,
1156
+ userId,
1157
+ migratedAt,
1158
+ migratedTable,
1159
+ isMigrated,
1160
+ })
1161
+ }
1162
+
1163
+
1164
+ //instructors creation
818
1165
  if(uNum.has(employeeNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uDept.has(departmentId) && uCamp.has(campusId)){
819
1166
  const errorMsg = `Duplicate Payload Found: [${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [departmentId: ${departmentId}, campusId:${campusId}]`
820
1167
  if(!uniqueErrors.has(errorMsg)){
@@ -841,7 +1188,7 @@ const server = {
841
1188
  uCamp.add(campusId)
842
1189
  newInstructor.push({
843
1190
  firstName: _instructor?.first_name,
844
- lastName: _instructor?.last_name,
1191
+ lastName: _lastName,
845
1192
  middleName: _instructor?.middle_name,
846
1193
  employeeNumber: _instructor?.faculty_id,
847
1194
  departmentId: _acadDepartment?._id??departmentDefault?._id,
@@ -873,6 +1220,22 @@ const server = {
873
1220
  // logger.info(`${index + 1}/${index + 1}: New Instructor User Record Created: [${user.email} - ${user.password} ${user.temporaryPassword}] - ${user.lastName}, ${user.firstName} ${user.middleName} ${user.adminScopes}`)
874
1221
  });
875
1222
  }
1223
+
1224
+ if (newUserRole.length > 0) {
1225
+ // Associate userIds with new instructors
1226
+ if(!newUserRole.userId){
1227
+ newUserRole = newUserRole.map((inst, index) => ({
1228
+ ...inst,
1229
+ userId: userIds[index]
1230
+ }));
1231
+ }
1232
+ await UserRoles.bulkCreate(newUserRole);
1233
+ createdCounter += newUserRole.length;
1234
+
1235
+ newUserRole.forEach((inst, index) => {
1236
+ logger.info(`${index + 1}/${index + 1}: User Role Created: ${inst.applicationId} ${inst.roleId} ${inst.userId}`);
1237
+ });
1238
+ }
876
1239
 
877
1240
 
878
1241
  if (newInstructor.length > 0) {
@@ -890,565 +1253,261 @@ const server = {
890
1253
  logger.info(`${index + 1}/${index + 1}: New Instructor Record Created: [${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [ departmentId: ${inst.departmentId}, campusId: ${inst.campusId}]`);
891
1254
  });
892
1255
  }
893
-
894
-
895
-
896
- console.log("");
897
- console.log("########################################################")
898
- console.log("")
899
- logger.info('Instructors Data Migration Completed');
900
- logger.info(`Total Successful Instructors Records Created: ${createdCounter}/${createdCounter}`);
901
- logger.info(`Total Existing Instructors Records: ${errorCounter}/${errorCounter}`);
902
- logger.info(`Total Records: ${createdCounter + errorCounter}`);
903
- console.log("")
904
- console.log("########################################################")
905
- console.log("")
906
-
907
- let totalSummary = {
908
- itemLength: createdCounter + errorCounter,
909
- error: errorCounter,
910
- success: createdCounter
911
- }
912
- return totalSummary
913
-
914
- } catch (error) {
915
- ;
916
- logger.error(`Error occurred: ${error} ${error.stack} `);
917
-
918
- }
919
- },
920
-
921
- async AcadDeptInstructor(){
922
- try {
923
- await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
924
-
925
- console.log("");
926
- console.log("########################################################")
927
- console.log(" Academic Department Instructors Migrations ")
928
- console.log("########################################################")
929
- console.log("");
930
-
931
- const db_schema = schema
932
- let maxIds = await AcademicDepartmentInstructors.max('_id'); //Fetch maximum _id directly from the Users model
933
- let maxId = maxIds|| 0;
934
- await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."AcademicDepartmentInstructors__id_seq"`);
935
- await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicDepartmentInstructors__id_seq" RESTART WITH ${maxId + 1}`);
936
- await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
937
-
938
- const instructorApi = await api.Instructor()
939
-
940
- const instructorSeq = await Instructors.findAll()
941
- const departmentSeq = await AcademicDepartments.findAll()
942
-
943
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
944
- if (!userMail){}
945
-
946
- let createdCounter = 0
947
- let errorCounter = 0
948
- let uniqueErrors = new Set()
949
-
950
- for(let i = 0; i < instructorApi.length; i++){
951
- try {
952
- let instructor = instructorApi[i]
953
-
954
- let _instructor = instructorSeq.find(num => num.employeeNumber === instructor?.faculty_id)
955
- let _department = departmentSeq.find(dep => dep._id === _instructor?.departmentId)
956
-
957
- let migratedAt = new Date() //present date of the migration
958
- let migratedTable = 'Instructors' // sql counterpart main table
959
- let referenceId = _instructor?.id // id of the data
960
- let isMigrated = true
961
-
962
- let modifiedById = userMail._id
963
- let createdById = userMail._id
964
-
965
- let [record, created] = await AcademicDepartmentInstructors.findOrCreate({
966
- where:{
967
- instructorId: _instructor?._id,
968
- academicDepartmentId: _department?._id,
969
- },
970
- defaults:{
971
- instructorId: _instructor?._id,
972
- academicDepartmentId: _department?._id,
973
- modifiedById,
974
- createdById,
975
- migratedAt,
976
- migratedTable,
977
- isMigrated,
978
- }
979
- })
980
- if (created){
981
- logger.info(`${createdCounter + 1}/${createdCounter + 1} New Academic Department Instructor Record Created: instructorId: ${record.instructorId}, academicDepartmentId: ${record.academicDepartmentId} `)
982
- createdCounter++;
983
- }
984
- else {
985
- const errorMsg = `Academic Department Instructor Record Already Exists: instructorId: ${record.instructorId}, academicDepartmentId: ${record.academicDepartmentId}`;
986
-
987
- if (!uniqueErrors.has(errorMsg)) {
988
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
989
- uniqueErrors.add(errorMsg);
990
- errorCounter++;
991
- }
992
-
993
- }
994
- } catch (error) {
995
- logger.error(`Error occurred: ${error} ${error.stack}`);
996
- }
997
- }
998
- let items = createdCounter + errorCounter
999
- console.log("");
1000
- console.log("########################################################")
1001
- console.log("")
1002
- logger.info('Academic Department Instructors Data Migration Completed');
1003
- logger.info(`Total Successful Records Created: ${createdCounter}/${createdCounter}`);
1004
- logger.info(`Total Existing Records: ${errorCounter}/${errorCounter}`);
1005
- logger.info(`Total Record Fetched: ${items} `)
1006
- console.log("")
1007
- console.log("########################################################")
1008
- console.log("")
1009
-
1010
- let totalSummary = {
1011
- itemLength: items,
1012
- error: errorCounter,
1013
- success: createdCounter
1014
- }
1015
- return totalSummary
1016
-
1017
- } catch (error) {
1018
- logger.error(`Error occurred: ${error} ${error.stack}`);
1019
- }
1020
- },
1021
-
1022
- async Course(){
1023
- try {
1024
- await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
1025
-
1026
- console.log("");
1027
- console.log("########################################################")
1028
- console.log(" Courses Migration ")
1029
- console.log("########################################################")
1030
- console.log("");
1031
-
1032
- const db_schema = schema
1033
- let maxIds = await Courses.max('_id'); //Fetch maximum _id directly from the Courses model
1034
- let maxId = maxIds|| 0;
1035
- await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Courses__id_seq"`);
1036
- await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Courses__id_seq" RESTART WITH ${maxId + 1}`);
1037
- await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
1038
-
1039
- const studentApi = (await api.Student()).data
1040
-
1041
- const courseApi = await api.Course()
1042
- const collegeApi = await api.College()
1043
- const departmentApi = await api.Department()
1044
-
1045
- const acadDeptSeq = await AcademicDepartments.findAll()
1046
-
1047
- const campusSeq = await Campuses.findAll()
1048
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1049
- const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
1050
- const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
1051
-
1052
- let defaultPayload = {
1053
- name: 'Course Default',
1054
- code: 'CORDEF',
1055
- major: 'Major Course',
1056
- campusId: campusDefault._id,
1057
- departmentId: departmentDefault._id,
1058
- modifiedById: userMail?._id,
1059
- createdById: userMail?._id
1060
- };
1061
-
1062
- let [defaults, createddef] = await Courses.findOrCreate({
1063
- where: { name: defaultPayload.name, code: defaultPayload.code},
1064
- defaults: defaultPayload
1065
- });
1066
-
1067
-
1068
- let createdCounter = 0
1069
- let errorCounter = 0
1070
- let uniqueErrors = new Set()
1071
-
1072
- let uCode = new Set()
1073
- let uName = new Set()
1074
- let uMajor = new Set()
1075
- let uCampus = new Set()
1076
- let uDept = new Set()
1077
-
1078
- let newCourse = []
1079
-
1080
- const exCourse = await Courses.findAll()
1081
- const exCourseMap = new Map(exCourse.map(course => [`[${course.code}] - ${course.name}, ${course.major} [${course.campusId}, ${course.departmentId}]`, course]))
1082
-
1083
-
1084
- for (let i = 0; i < studentApi.length; i++){
1085
- try {
1086
-
1087
- let course = studentApi[i]
1088
- let courseCode = courseApi.find(crs => crs.name === course?.course)
1089
- let campus = campusSeq.find(camp => camp.name === course?.campus)
1090
-
1091
- let college = collegeApi.find(col => col.name === course?.college)
1092
- let department = departmentApi.find(dep => dep.name === college?.name)
1093
- let _department = acadDeptSeq.find(ad => ad.name === department?.name)
1094
-
1095
- let modifiedById = userMail?._id
1096
- let createdById = userMail?._id
1097
-
1098
- let name = course?.course
1099
- let code = courseCode?.code
1100
- let major = course?.major
1101
- let campusId = campus?._id??null
1102
- let departmentId = _department?._id??null
1103
-
1104
- let migratedAt = new Date() //present date of the migration
1105
- let migratedTable = 'Courses' // sql counterpart main table
1106
- let referenceId = courseCode?.id // id of the data
1107
- let isMigrated = true
1108
-
1109
-
1110
- if(uCode.has(code) && uName.has(name) && uMajor.has(major) && uCampus.has(campusId) && uDept.has(departmentId)){
1111
- const errorMsg = `Duplicate Payload Found: [${code}] - ${name}, ${major} [campusId: ${campusId}, academicDepartmentId: ${departmentId}]`
1112
- if(!uniqueErrors.has(errorMsg)){
1113
- logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1114
- uniqueErrors.add(errorMsg)
1115
- errorCounter++
1116
- }
1117
- }
1118
- else if ( exCourseMap.has(`[${code}] - ${name}, ${major} [${campusId}, ${departmentId}]`)){
1119
- const exCourse = exCourseMap.get(`[${code}] - ${name}, ${major} [${campusId}, ${departmentId}]`)
1120
- const errorMsg = `Existing Data Found: [${exCourse.code}] - ${exCourse.name}, ${exCourse.major} [campusId: ${exCourse.campusId}, academicDepartmentId: ${exCourse.departmentId}]`
1121
- if(!uniqueErrors.has(errorMsg)){
1122
- logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1123
- uniqueErrors.add(errorMsg)
1124
- errorCounter++
1125
- }
1126
- }
1127
- else{
1128
- uCode.add(code)
1129
- uName.add(name)
1130
- uMajor.add(major)
1131
- uCampus.add(campusId)
1132
- uDept.add(departmentId)
1133
- newCourse.push({
1134
- name: course?.course,
1135
- code: courseCode?.code,
1136
- major: course?.major,
1137
- campusId: campus?._id??campusDefault?._id,
1138
- departmentId: _department?._id??departmentDefault?._id,
1139
- modifiedById,
1140
- createdById,
1141
- migratedAt,
1142
- migratedTable,
1143
- referenceId,
1144
- isMigrated
1145
- })
1146
- }
1147
-
1148
- } catch (error) {
1149
- ;
1150
- logger.error(`Error occurred: ${error.stack} ${error}`);
1151
- }
1152
- }
1153
-
1154
- if (newCourse.length > 0) {
1155
- await Courses.bulkCreate(newCourse)
1156
- createdCounter += newCourse.length
1157
-
1158
- newCourse.forEach((course, index) => {
1159
- logger.info(`${index + 1}/${index + 1}: New Courses Record Created: [${course.code}] - ${course.name}, ${course.major} [courseId: ${course.campusId}, academicDepartmentId: ${course.departmentId}]`)
1160
- });
1161
- }
1256
+
1257
+
1162
1258
 
1163
1259
 
1164
1260
  console.log("");
1165
1261
  console.log("########################################################")
1166
1262
  console.log("")
1167
- logger.info('Course Data Migration Completed');
1168
- logger.info(`Total Successful Course Records Created: ${createdCounter}/${createdCounter}`);
1169
- logger.info(`Total Existing Course Records: ${errorCounter}/${errorCounter}`);
1263
+ logger.info('Instructors Data Migration Completed');
1264
+ logger.info(`Total Successful Instructors Records Created: ${createdCounter}/${createdCounter}`);
1265
+ logger.info(`Total Existing Instructors Records: ${errorCounter}/${errorCounter}`);
1266
+ logger.info(`Total Records: ${createdCounter + errorCounter}`);
1170
1267
  console.log("")
1171
1268
  console.log("########################################################")
1172
1269
  console.log("")
1173
1270
 
1174
1271
  let totalSummary = {
1175
- itemLength: courseApi.length,
1272
+ itemLength: createdCounter + errorCounter,
1176
1273
  error: errorCounter,
1177
1274
  success: createdCounter
1178
1275
  }
1179
-
1180
- uniqueErrors.clear();
1181
-
1182
1276
  return totalSummary
1183
-
1277
+
1184
1278
  } catch (error) {
1185
1279
  ;
1186
- logger.error(`Error occurred: ${error.stack} ${error}`);
1280
+ logger.error(`Error occurred: ${error} ${error.stack} `);
1281
+
1187
1282
  }
1188
1283
  },
1189
1284
 
1190
- async Room(){
1285
+ async AcadDeptInstructor(){
1191
1286
  try {
1192
1287
  await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
1193
1288
 
1194
1289
  console.log("");
1195
1290
  console.log("########################################################")
1196
- console.log(" Rooms Migration ")
1291
+ console.log(" Academic Department Instructors Migrations ")
1197
1292
  console.log("########################################################")
1198
1293
  console.log("");
1199
-
1294
+
1200
1295
  const db_schema = schema
1201
- let maxIds = await Rooms.max('_id'); // Fetch maximum _id directly from the Rooms model
1296
+ let maxIds = await AcademicDepartmentInstructors.max('_id'); //Fetch maximum _id directly from the Users model
1202
1297
  let maxId = maxIds|| 0;
1203
- await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Rooms__id_seq"`);
1204
- await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Rooms__id_seq" RESTART WITH ${maxId + 1}`);
1298
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."AcademicDepartmentInstructors__id_seq"`);
1299
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicDepartmentInstructors__id_seq" RESTART WITH ${maxId + 1}`);
1205
1300
  await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
1206
1301
 
1207
- const subjectRoom = await api.Subject()
1208
- const roomApi = await api.Room()
1302
+ const instructorApi = await api.Instructor()
1209
1303
 
1210
- const subjectSeq = await Subjects.findAll()
1211
- const campusSeq = await Campuses.findAll()
1304
+ const instructorSeq = await Instructors.findAll()
1212
1305
  const departmentSeq = await AcademicDepartments.findAll()
1213
1306
 
1214
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1215
- const campusesDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
1216
-
1217
- let defaultPayload = {
1218
- name: 'Rooms Default',
1219
- campusId: campusesDefault._id,
1220
- capacity: 40,
1221
- modifiedById: userMail?._id,
1222
- createdById: userMail?._id
1223
- };
1224
-
1225
- let [defaults, createddef] = await Rooms.findOrCreate({
1226
- where: { name: defaultPayload.name},
1227
- defaults: defaultPayload
1228
- });
1307
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1308
+ if (!userMail){}
1229
1309
 
1230
1310
  let createdCounter = 0
1231
1311
  let errorCounter = 0
1232
1312
  let uniqueErrors = new Set()
1233
1313
 
1234
- let uName = new Set()
1235
- let uCampus = new Set()
1236
-
1237
- let newRoom = []
1238
-
1239
- const exRoom = await Rooms.findAll()
1240
- const exRoomMap = new Map(exRoom.map(room => [`[${room.name}] - ${room.campusId}`, room]))
1241
-
1242
-
1243
- for (let i = 0; i < roomApi.length; i++){
1314
+ for(let i = 0; i < instructorApi.length; i++){
1244
1315
  try {
1245
- let _room = roomApi[i]
1246
-
1247
- let _subject = subjectRoom.find(r => r.room_id === _room?.id)
1248
- let _subjects = subjectSeq.find(s => s.name === _subject?.name)
1249
- let _department = departmentSeq.find(dep => dep._id === _subjects?.departmentId)
1250
- let _campus = campusSeq.find (cam => cam._id === _department?.campusId)
1251
-
1252
- let capacity = 50
1253
- let campusDefault = "MSC - Boac Campus"
1254
- let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
1255
-
1256
- // return console.log('campusDefault :>> ', campusDefault);
1316
+ let instructor = instructorApi[i]
1257
1317
 
1258
- let modifiedById = userMail?._id
1259
- let createdById = userMail?._id
1318
+ let _instructor = instructorSeq.find(num => num.employeeNumber === instructor?.faculty_id)
1319
+ let _department = departmentSeq.find(dep => dep._id === _instructor?.departmentId)
1260
1320
 
1261
1321
  let migratedAt = new Date() //present date of the migration
1262
- let migratedTable = 'Rooms' // sql counterpart main table
1263
- let referenceId = _room?.id // id of the data
1322
+ let migratedTable = 'Instructors' // sql counterpart main table
1323
+ let referenceId = _instructor?.id // id of the data
1264
1324
  let isMigrated = true
1265
1325
 
1266
- let name = _room?.name
1267
- let campusId = _campus?._id??_campusDefault?._id??null
1326
+ let modifiedById = userMail._id
1327
+ let createdById = userMail._id
1268
1328
 
1269
- if(uName.has(name) && uCampus.has(campusId)){
1270
- const errorMsg = `Duplicate Payload Found: [${name}] - campusId: ${campusId}`
1271
- if(!uniqueErrors.has(errorMsg)){
1272
- logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1273
- uniqueErrors.add(errorMsg)
1274
- errorCounter++
1275
- }
1276
- }
1277
- else if ( exRoomMap.has(`[${name}] - ${campusId}`)){
1278
- const exRoom = exRoomMap.get(`[${name}] - ${campusId}`)
1279
- const errorMsg = `Existing Data Found:[${exRoom.name}] - campusId: ${exRoom.campusId}`
1280
- if(!uniqueErrors.has(errorMsg)){
1281
- logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1282
- uniqueErrors.add(errorMsg)
1283
- errorCounter++
1284
- }
1285
- }
1286
- else{
1287
- uName.add(name)
1288
- uCampus.add(campusId)
1289
- newRoom.push({
1290
- name: _room?.name,
1291
- campusId: _campus?._id??_campusDefault?._id??campusesDefault._id,
1292
- capacity,
1329
+ let [record, created] = await AcademicDepartmentInstructors.findOrCreate({
1330
+ where:{
1331
+ instructorId: _instructor?._id,
1332
+ academicDepartmentId: _department?._id,
1333
+ },
1334
+ defaults:{
1335
+ instructorId: _instructor?._id,
1336
+ academicDepartmentId: _department?._id,
1293
1337
  modifiedById,
1294
1338
  createdById,
1295
1339
  migratedAt,
1296
1340
  migratedTable,
1297
- referenceId,
1298
- isMigrated
1299
- })
1341
+ isMigrated,
1342
+ }
1343
+ })
1344
+ if (created){
1345
+ logger.info(`${createdCounter + 1}/${createdCounter + 1} New Academic Department Instructor Record Created: instructorId: ${record.instructorId}, academicDepartmentId: ${record.academicDepartmentId} `)
1346
+ createdCounter++;
1300
1347
  }
1301
-
1302
- } catch (error) {
1303
- ;
1304
- logger.error(`Error occurred: ${error.stack} ${error}`);
1305
- }
1306
- }
1348
+ else {
1349
+ const errorMsg = `Academic Department Instructor Record Already Exists: instructorId: ${record.instructorId}, academicDepartmentId: ${record.academicDepartmentId}`;
1307
1350
 
1308
- if (newRoom.length > 0) {
1309
- await Rooms.bulkCreate(newRoom)
1310
- createdCounter += newRoom.length
1311
-
1312
- newRoom.forEach((room, index) => {
1313
- logger.info(`${index + 1}/${index + 1}: New Rooms Record Created: [${room.name}], campusId: ${room.campusId}`)
1314
- });
1315
- }
1351
+ if (!uniqueErrors.has(errorMsg)) {
1352
+ logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
1353
+ uniqueErrors.add(errorMsg);
1354
+ errorCounter++;
1355
+ }
1316
1356
 
1357
+ }
1358
+ } catch (error) {
1359
+ logger.error(`Error occurred: ${error} ${error.stack}`);
1360
+ }
1361
+ }
1362
+ let items = createdCounter + errorCounter
1317
1363
  console.log("");
1318
1364
  console.log("########################################################")
1319
1365
  console.log("")
1320
- logger.info('Room Data Migration Completed');
1321
- logger.info(`Total Successful Room Records Created: ${createdCounter}/${createdCounter}`);
1322
- logger.info(`Total Existing Room Records: ${errorCounter}/${errorCounter}`);
1323
- logger.info(`Total Records: ${createdCounter + errorCounter}`);
1366
+ logger.info('Academic Department Instructors Data Migration Completed');
1367
+ logger.info(`Total Successful Records Created: ${createdCounter}/${createdCounter}`);
1368
+ logger.info(`Total Existing Records: ${errorCounter}/${errorCounter}`);
1369
+ logger.info(`Total Record Fetched: ${items} `)
1324
1370
  console.log("")
1325
1371
  console.log("########################################################")
1326
1372
  console.log("")
1327
1373
 
1328
1374
  let totalSummary = {
1329
- itemLength: createdCounter + errorCounter,
1375
+ itemLength: items,
1330
1376
  error: errorCounter,
1331
1377
  success: createdCounter
1332
1378
  }
1333
1379
  return totalSummary
1334
1380
 
1335
1381
  } catch (error) {
1336
- logger.error(`Error occurred: ${error.stack} ${error}`);
1337
-
1382
+ logger.error(`Error occurred: ${error} ${error.stack}`);
1338
1383
  }
1339
1384
  },
1340
1385
 
1341
- async AcademicYear(){
1386
+ async Course(){
1342
1387
  try {
1343
1388
  await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
1344
1389
 
1345
1390
  console.log("");
1346
1391
  console.log("########################################################")
1347
- console.log(" Academic Years Migration ")
1392
+ console.log(" Courses Migration ")
1348
1393
  console.log("########################################################")
1349
1394
  console.log("");
1350
1395
 
1351
1396
  const db_schema = schema
1352
- let maxIds = await AcademicYears.max('_id'); // Fetch maximum _id directly from the AcademicYears model
1397
+ let maxIds = await Courses.max('_id'); //Fetch maximum _id directly from the Courses model
1353
1398
  let maxId = maxIds|| 0;
1354
- await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."AcademicYears__id_seq"`);
1355
- await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicYears__id_seq" RESTART WITH ${maxId + 1}`);
1399
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Courses__id_seq"`);
1400
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Courses__id_seq" RESTART WITH ${maxId + 1}`);
1356
1401
  await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
1357
1402
 
1403
+ const studentApi = (await api.Student()).data
1404
+
1405
+ const courseApi = await api.Course()
1406
+ const collegeApi = await api.College()
1407
+ const departmentApi = await api.Department()
1408
+
1409
+ const acadDeptSeq = await AcademicDepartments.findAll()
1358
1410
 
1359
- let userDefPayload = {
1360
- email: 'ccci_integrator@gmail.com',
1361
- password: '$2a$12$Q.h3Q9IN6vsIxGBa/EgfOOABeXTcwxt4t9cu4nqAK.nczGRRtZJUS',
1362
- temporaryPassword: 'P@ssw0rd123',
1363
- firstName: 'Androi',
1364
- lastName: 'Pamisaran',
1365
- adminScopes: [],
1366
- createdAt: new Date(),
1367
- updatedAt: new Date()
1411
+ const campusSeq = await Campuses.findAll()
1412
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1413
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
1414
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
1415
+
1416
+ let defaultPayload = {
1417
+ name: 'Course Default',
1418
+ code: 'CORDEF',
1419
+ major: 'Major Course',
1420
+ campusId: campusDefault._id,
1421
+ departmentId: departmentDefault._id,
1422
+ modifiedById: userMail?._id,
1423
+ createdById: userMail?._id
1368
1424
  };
1369
1425
 
1370
- let [userDefault, createdUser] = await Users.findOrCreate({
1371
- where: { email: userDefPayload.email },
1372
- defaults: userDefPayload
1373
- });
1426
+ let [defaults, createddef] = await Courses.findOrCreate({
1427
+ where: { name: defaultPayload.name, code: defaultPayload.code},
1428
+ defaults: defaultPayload
1429
+ });
1374
1430
 
1375
- const acadYearApi = await api.AcademicYear()
1376
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1377
1431
 
1378
1432
  let createdCounter = 0
1379
1433
  let errorCounter = 0
1380
1434
  let uniqueErrors = new Set()
1381
1435
 
1382
- const { acadYearResult, currentSchoolYear } = acadYearApi;
1383
-
1384
-
1385
- let uFrom = new Set()
1386
- let uTo = new Set()
1436
+ let uCode = new Set()
1437
+ let uName = new Set()
1438
+ let uMajor = new Set()
1439
+ let uCampus = new Set()
1440
+ let uDept = new Set()
1387
1441
 
1388
- let newYears = []
1442
+ let newCourse = []
1389
1443
 
1390
- const exYear = await AcademicYears.findAll()
1391
- const exYearMap = new Map(exYear.map(year => [`[${year.from} - ${year.to}]`, year]))
1444
+ const exCourse = await Courses.findAll()
1445
+ const exCourseMap = new Map(exCourse.map(course => [`[${course.code}] - ${course.name}, ${course.major} [${course.campusId}, ${course.departmentId}]`, course]))
1392
1446
 
1393
1447
 
1394
- for (let i = 0; i < acadYearResult.length; i++){
1448
+ for (let i = 0; i < studentApi.length; i++){
1395
1449
  try {
1396
- let _acadyear = acadYearResult[i]
1397
- // console.log('_acadyear :>> ', _acadyear);
1398
1450
 
1399
- let [from, to] = _acadyear.year.split('-')
1400
-
1401
- to = /^\d+$/.test(to) ? parseInt(to, 10) : null;
1402
- from = /^\d+$/.test(from) ? parseInt(from, 10) : null;
1403
-
1404
- let defaultDate = new Date()
1405
- let currentYear = defaultDate.getFullYear()
1406
- let previousYear = currentYear - 1
1451
+ let course = studentApi[i]
1452
+ let courseCode = courseApi.find(crs => crs.name === course?.course)
1453
+ let campus = campusSeq.find(camp => camp.name === course?.campus)
1407
1454
 
1408
- let isDefault = false
1409
- if(from == previousYear && to == currentYear) isDefault = true
1455
+ let college = collegeApi.find(col => col.name === course?.college)
1456
+ let department = departmentApi.find(dep => dep.name === college?.name)
1457
+ let _department = acadDeptSeq.find(ad => ad.name === department?.name)
1410
1458
 
1411
1459
  let modifiedById = userMail?._id
1412
1460
  let createdById = userMail?._id
1413
1461
 
1414
- let migratedAt = new Date() //present date of the migration
1415
- let migratedTable = 'AcademicYears' // sql counterpart main table
1416
- let referenceId = _acadyear?.id // id of the data
1417
- let isMigrated = true
1462
+ let name = course?.course
1463
+ let code = courseCode?.code
1464
+ let major = course?.major
1465
+ let campusId = campus?._id??null
1466
+ let departmentId = _department?._id??null
1418
1467
 
1468
+ let migratedAt = new Date() //present date of the migration
1469
+ let migratedTable = 'Courses' // sql counterpart main table
1470
+ let referenceId = courseCode?.id // id of the data
1471
+ let isMigrated = true
1419
1472
 
1420
- if(uFrom.has(from) && uTo.has(to)){
1421
- const errorMsg = `Duplicate Payload Found: [${from} - ${to}]`
1422
- if(!uniqueErrors.has(errorMsg)){
1423
- logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1424
- uniqueErrors.add(errorMsg)
1425
- errorCounter++
1426
- }
1427
- }
1428
- else if ( exYearMap.has(`[${from} - ${to}]`)){
1429
- const exYear = exYearMap.get(`[${from} - ${to}]`)
1430
- const errorMsg = `Existing Data Found:[${exYear.from} - ${exYear.to}]`
1431
- if(!uniqueErrors.has(errorMsg)){
1432
- logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1433
- uniqueErrors.add(errorMsg)
1434
- errorCounter++
1473
+
1474
+ if(uCode.has(code) && uName.has(name) && uMajor.has(major) && uCampus.has(campusId) && uDept.has(departmentId)){
1475
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}, ${major} [campusId: ${campusId}, academicDepartmentId: ${departmentId}]`
1476
+ if(!uniqueErrors.has(errorMsg)){
1477
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1478
+ uniqueErrors.add(errorMsg)
1479
+ errorCounter++
1480
+ }
1481
+ }
1482
+ else if ( exCourseMap.has(`[${code}] - ${name}, ${major} [${campusId}, ${departmentId}]`)){
1483
+ const exCourse = exCourseMap.get(`[${code}] - ${name}, ${major} [${campusId}, ${departmentId}]`)
1484
+ const errorMsg = `Existing Data Found: [${exCourse.code}] - ${exCourse.name}, ${exCourse.major} [campusId: ${exCourse.campusId}, academicDepartmentId: ${exCourse.departmentId}]`
1485
+ if(!uniqueErrors.has(errorMsg)){
1486
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1487
+ uniqueErrors.add(errorMsg)
1488
+ errorCounter++
1489
+ }
1490
+ }
1491
+ else{
1492
+ uCode.add(code)
1493
+ uName.add(name)
1494
+ uMajor.add(major)
1495
+ uCampus.add(campusId)
1496
+ uDept.add(departmentId)
1497
+ newCourse.push({
1498
+ name: course?.course,
1499
+ code: courseCode?.code,
1500
+ major: course?.major,
1501
+ campusId: campus?._id??campusDefault?._id,
1502
+ departmentId: _department?._id??departmentDefault?._id,
1503
+ modifiedById,
1504
+ createdById,
1505
+ migratedAt,
1506
+ migratedTable,
1507
+ referenceId,
1508
+ isMigrated
1509
+ })
1435
1510
  }
1436
- }
1437
- else{
1438
- uFrom.add(from)
1439
- uTo.add(to)
1440
- newYears.push({
1441
- from,
1442
- to,
1443
- modifiedById,
1444
- createdById,
1445
- default: isDefault,
1446
- migratedAt,
1447
- migratedTable,
1448
- referenceId,
1449
- isMigrated
1450
- })
1451
- }
1452
1511
 
1453
1512
  } catch (error) {
1454
1513
  ;
@@ -1456,120 +1515,132 @@ const server = {
1456
1515
  }
1457
1516
  }
1458
1517
 
1459
- if (newYears.length > 0) {
1460
- await AcademicYears.bulkCreate(newYears)
1461
- createdCounter += newYears.length
1518
+ if (newCourse.length > 0) {
1519
+ await Courses.bulkCreate(newCourse)
1520
+ createdCounter += newCourse.length
1462
1521
 
1463
- newYears.forEach((year, index) => {
1464
- logger.info(`${index + 1}/${index + 1}: New Academic Years Record Created: [${year.from} - ${year.to}]`)
1522
+ newCourse.forEach((course, index) => {
1523
+ logger.info(`${index + 1}/${index + 1}: New Courses Record Created: [${course.code}] - ${course.name}, ${course.major} [courseId: ${course.campusId}, academicDepartmentId: ${course.departmentId}]`)
1465
1524
  });
1466
1525
  }
1467
1526
 
1527
+
1468
1528
  console.log("");
1469
1529
  console.log("########################################################")
1470
1530
  console.log("")
1471
- logger.info('Academic Years Data Migration Completed');
1472
- logger.info(`Total Successful Academic Years Records Created: ${createdCounter}/${createdCounter}`);
1473
- logger.info(`Total Existing Academic Years Records: ${errorCounter}/${errorCounter}`);
1474
- logger.info(`Total Records: ${createdCounter + errorCounter}`);
1531
+ logger.info('Course Data Migration Completed');
1532
+ logger.info(`Total Successful Course Records Created: ${createdCounter}/${createdCounter}`);
1533
+ logger.info(`Total Existing Course Records: ${errorCounter}/${errorCounter}`);
1475
1534
  console.log("")
1476
1535
  console.log("########################################################")
1477
1536
  console.log("")
1478
1537
 
1479
1538
  let totalSummary = {
1480
- itemLength: createdCounter + errorCounter,
1539
+ itemLength: courseApi.length,
1481
1540
  error: errorCounter,
1482
1541
  success: createdCounter
1483
1542
  }
1484
- return totalSummary
1485
1543
 
1544
+ uniqueErrors.clear();
1545
+
1546
+ return totalSummary
1547
+
1486
1548
  } catch (error) {
1487
1549
  ;
1488
1550
  logger.error(`Error occurred: ${error.stack} ${error}`);
1489
-
1490
1551
  }
1491
1552
  },
1492
1553
 
1493
- async Semester(){
1554
+ async Room(){
1494
1555
  try {
1495
1556
  await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
1496
1557
 
1497
1558
  console.log("");
1498
1559
  console.log("########################################################")
1499
- console.log(" Semesters Migration ")
1560
+ console.log(" Rooms Migration ")
1500
1561
  console.log("########################################################")
1501
1562
  console.log("");
1502
1563
 
1503
1564
  const db_schema = schema
1504
- let maxIds = await AcademicYears.max('_id'); // Fetch maximum _id directly from the AcademicYears model
1565
+ let maxIds = await Rooms.max('_id'); // Fetch maximum _id directly from the Rooms model
1505
1566
  let maxId = maxIds|| 0;
1506
- await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Semesters__id_seq"`);
1507
- await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Semesters__id_seq" RESTART WITH ${maxId + 1}`);
1567
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Rooms__id_seq"`);
1568
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Rooms__id_seq" RESTART WITH ${maxId + 1}`);
1508
1569
  await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
1509
1570
 
1571
+ const subjectRoom = await api.Subject()
1572
+ const roomApi = await api.Room()
1510
1573
 
1511
- let userDefPayload = {
1512
- email: 'ccci_integrator@gmail.com',
1513
- password: '$2a$12$Q.h3Q9IN6vsIxGBa/EgfOOABeXTcwxt4t9cu4nqAK.nczGRRtZJUS',
1514
- temporaryPassword: 'P@ssw0rd123',
1515
- firstName: 'Androi',
1516
- lastName: 'Pamisaran',
1517
- adminScopes: [],
1518
- createdAt: new Date(),
1519
- updatedAt: new Date()
1574
+ const subjectSeq = await Subjects.findAll()
1575
+ const campusSeq = await Campuses.findAll()
1576
+ const departmentSeq = await AcademicDepartments.findAll()
1577
+
1578
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1579
+ const campusesDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
1580
+
1581
+ let defaultPayload = {
1582
+ name: 'Rooms Default',
1583
+ campusId: campusesDefault._id,
1584
+ capacity: 40,
1585
+ modifiedById: userMail?._id,
1586
+ createdById: userMail?._id
1520
1587
  };
1521
1588
 
1522
- let [userDefault, createdUser] = await Users.findOrCreate({
1523
- where: { email: userDefPayload.email },
1524
- defaults: userDefPayload
1525
- });
1526
-
1527
- const acadYearApi = await api.AcademicYear()
1528
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1589
+ let [defaults, createddef] = await Rooms.findOrCreate({
1590
+ where: { name: defaultPayload.name},
1591
+ defaults: defaultPayload
1592
+ });
1529
1593
 
1530
1594
  let createdCounter = 0
1531
1595
  let errorCounter = 0
1532
1596
  let uniqueErrors = new Set()
1533
1597
 
1534
- const { acadYearResult, currentSchoolYear } = acadYearApi;
1535
-
1536
-
1537
- let uCode = new Set()
1538
- let uDesc = new Set()
1598
+ let uName = new Set()
1599
+ let uCampus = new Set()
1539
1600
 
1540
- let newYears = []
1601
+ let newRoom = []
1541
1602
 
1542
- const exYear = await Semesters.findAll()
1543
- const exYearMap = new Map(exYear.map(sem => [`[${sem.code}] ${sem.description}`, sem]))
1603
+ const exRoom = await Rooms.findAll()
1604
+ const exRoomMap = new Map(exRoom.map(room => [`[${room.name}] - ${room.campusId}`, room]))
1544
1605
 
1545
1606
 
1546
- for (let i = 0; i < acadYearResult.length; i++){
1607
+ for (let i = 0; i < roomApi.length; i++){
1547
1608
  try {
1548
- let _acadyear = acadYearResult[i]
1609
+ let _room = roomApi[i]
1610
+
1611
+ let _subject = subjectRoom.find(r => r.room_id === _room?.id)
1612
+ let _subjects = subjectSeq.find(s => s.name === _subject?.name)
1613
+ let _department = departmentSeq.find(dep => dep._id === _subjects?.departmentId)
1614
+ let _campus = campusSeq.find (cam => cam._id === _department?.campusId)
1615
+
1616
+ let capacity = 50
1617
+ let campusDefault = "MSC - Boac Campus"
1618
+ let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
1619
+
1620
+ // return console.log('campusDefault :>> ', campusDefault);
1549
1621
 
1550
1622
  let modifiedById = userMail?._id
1551
1623
  let createdById = userMail?._id
1552
1624
 
1553
1625
  let migratedAt = new Date() //present date of the migration
1554
- let migratedTable = 'AcademicYears' // sql counterpart main table
1555
- let referenceId = _acadyear?.id // id of the data
1626
+ let migratedTable = 'Rooms' // sql counterpart main table
1627
+ let referenceId = _room?.id // id of the data
1556
1628
  let isMigrated = true
1557
1629
 
1558
- let code = _acadyear?.term
1559
- let description = _acadyear?.term
1560
-
1630
+ let name = _room?.name
1631
+ let campusId = _campus?._id??_campusDefault?._id??null
1561
1632
 
1562
- if(uCode.has(code) && uDesc.has(description)){
1563
- const errorMsg = `Duplicate Payload Found: [${code}] ${description}]`
1633
+ if(uName.has(name) && uCampus.has(campusId)){
1634
+ const errorMsg = `Duplicate Payload Found: [${name}] - campusId: ${campusId}`
1564
1635
  if(!uniqueErrors.has(errorMsg)){
1565
1636
  logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1566
1637
  uniqueErrors.add(errorMsg)
1567
1638
  errorCounter++
1568
1639
  }
1569
1640
  }
1570
- else if ( exYearMap.has(`[${code}] ${description}`)){
1571
- const exYear = exYearMap.get(`[${code}] ${description}`)
1572
- const errorMsg = `Existing Data Found:[${exYear.code}] ${exYear.description}]`
1641
+ else if ( exRoomMap.has(`[${name}] - ${campusId}`)){
1642
+ const exRoom = exRoomMap.get(`[${name}] - ${campusId}`)
1643
+ const errorMsg = `Existing Data Found:[${exRoom.name}] - campusId: ${exRoom.campusId}`
1573
1644
  if(!uniqueErrors.has(errorMsg)){
1574
1645
  logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1575
1646
  uniqueErrors.add(errorMsg)
@@ -1577,11 +1648,12 @@ const server = {
1577
1648
  }
1578
1649
  }
1579
1650
  else{
1580
- uCode.add(code)
1581
- uDesc.add(description)
1582
- newYears.push({
1583
- code,
1584
- description,
1651
+ uName.add(name)
1652
+ uCampus.add(campusId)
1653
+ newRoom.push({
1654
+ name: _room?.name,
1655
+ campusId: _campus?._id??_campusDefault?._id??campusesDefault._id,
1656
+ capacity,
1585
1657
  modifiedById,
1586
1658
  createdById,
1587
1659
  migratedAt,
@@ -1597,21 +1669,21 @@ const server = {
1597
1669
  }
1598
1670
  }
1599
1671
 
1600
- if (newYears.length > 0) {
1601
- await Semesters.bulkCreate(newYears)
1602
- createdCounter += newYears.length
1672
+ if (newRoom.length > 0) {
1673
+ await Rooms.bulkCreate(newRoom)
1674
+ createdCounter += newRoom.length
1603
1675
 
1604
- newYears.forEach((year, index) => {
1605
- logger.info(`${index + 1}/${index + 1}: New Semesters Years Record Created: [${year.code} - ${year.description}]`)
1676
+ newRoom.forEach((room, index) => {
1677
+ logger.info(`${index + 1}/${index + 1}: New Rooms Record Created: [${room.name}], campusId: ${room.campusId}`)
1606
1678
  });
1607
1679
  }
1608
1680
 
1609
1681
  console.log("");
1610
1682
  console.log("########################################################")
1611
1683
  console.log("")
1612
- logger.info('Semesters Data Migration Completed');
1613
- logger.info(`Total Successful Semesters Records Created: ${createdCounter}/${createdCounter}`);
1614
- logger.info(`Total Existing Semesters Records: ${errorCounter}/${errorCounter}`);
1684
+ logger.info('Room Data Migration Completed');
1685
+ logger.info(`Total Successful Room Records Created: ${createdCounter}/${createdCounter}`);
1686
+ logger.info(`Total Existing Room Records: ${errorCounter}/${errorCounter}`);
1615
1687
  logger.info(`Total Records: ${createdCounter + errorCounter}`);
1616
1688
  console.log("")
1617
1689
  console.log("########################################################")
@@ -1625,7 +1697,6 @@ const server = {
1625
1697
  return totalSummary
1626
1698
 
1627
1699
  } catch (error) {
1628
- ;
1629
1700
  logger.error(`Error occurred: ${error.stack} ${error}`);
1630
1701
 
1631
1702
  }
@@ -1994,6 +2065,8 @@ const server = {
1994
2065
  const collegeSeq = await Colleges.findAll()
1995
2066
  const semesterSeq = await Semesters.findAll()
1996
2067
  const acadYearSeq = await AcademicYears.findAll()
2068
+ const userSeq = await Users.findAll()
2069
+
1997
2070
 
1998
2071
  const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1999
2072
 
@@ -2036,6 +2109,15 @@ const server = {
2036
2109
  const exUser = await Users.findAll()
2037
2110
  const exUserMap = new Map(exUser.map(usr => [`[${usr.email} - ${usr.password} ${usr.temporaryPassword}] - ${usr.lastName}, ${usr.firstName} ${usr.middleName} ${usr.adminScopes}`, usr]))
2038
2111
 
2112
+ let uApplication = new Set()
2113
+ let uRole = new Set ()
2114
+ let uUser = new Set ()
2115
+
2116
+ let newUserRole = []
2117
+
2118
+ const exURole = await UserRoles.findAll()
2119
+ const exURoleMap = new Map (exURole.map( role => [`${role.applicationId} ${role.roleId} ${role.userId}`, role]))
2120
+
2039
2121
  let uNum = new Set()
2040
2122
  let uLname = new Set()
2041
2123
  let uMname = new Set()
@@ -2100,9 +2182,15 @@ const server = {
2100
2182
  let password = `${studentNumber}${getfNameU}${getlName}`
2101
2183
 
2102
2184
  const hashedPassword = await bcrypt.hash(password, saltRounds);
2103
- let temporaryPassword = getUserName
2185
+ let temporaryPassword = `${studentNumber}${getfNameU}${getlName}`
2104
2186
  let adminScopes = []
2105
2187
 
2188
+ const roleSeq = await Roles.findOne({ where: { name: "Student" }})
2189
+ const userApp = await Applications.findOne({ where: { name: "Learning Management System - Student/Parent" }})
2190
+
2191
+ let roleId = roleSeq?._id
2192
+ let applicationId = userApp?._id
2193
+
2106
2194
  if(uEmail.has(email) && uPass.has(password) && uTPass.has(temporaryPassword) && uULname.has(lastName) && uUFname.has(firstName) && uUMname.has(middleName) && uScopes.has(adminScopes)){
2107
2195
  const errorMsg = `Duplicate Payload Found: [${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`
2108
2196
  if(!uniqueErrors.has(errorMsg)){
@@ -2133,7 +2221,7 @@ const server = {
2133
2221
  lastName: _student?.last_name,
2134
2222
  middleName: _student?.middle_name,
2135
2223
  password: hashedPassword,
2136
- temporaryPassword: getUserName,
2224
+ temporaryPassword: password,
2137
2225
  email,
2138
2226
  modifiedById,
2139
2227
  createdById,
@@ -2145,6 +2233,21 @@ const server = {
2145
2233
  })
2146
2234
  }
2147
2235
 
2236
+
2237
+ if(
2238
+ uApplication.add(applicationId),
2239
+ uRole.add(roleId)
2240
+ ){
2241
+ newUserRole.push({
2242
+ applicationId,
2243
+ roleId,
2244
+ migratedAt,
2245
+ migratedTable,
2246
+ isMigrated,
2247
+ })
2248
+ }
2249
+
2250
+
2148
2251
  if(uNum.has(studentNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uCourse.has(courseId) && uCampus.has(campusId)){
2149
2252
  const errorMsg = `Duplicate Payload Found: [${studentNumber}] - ${lastName}, ${firstName} ${middleName} [courseId: ${courseId}, campusId:${campusId}]`
2150
2253
  if(!uniqueErrors.has(errorMsg)){
@@ -2202,6 +2305,23 @@ const server = {
2202
2305
  // logger.info(`${index + 1}/${index + 1}: New Student User Record Created: [${user.email} - ${user.password} ${user.temporaryPassword}] - ${user.lastName}, ${user.firstName} ${user.middleName} ${user.adminScopes}`)
2203
2306
  });
2204
2307
  }
2308
+
2309
+ if (newUserRole.length > 0) {
2310
+ // Associate userIds with new students
2311
+ newUserRole = newUserRole.map((exStudent, index) => ({
2312
+ ...exStudent,
2313
+ userId: userIds[index]
2314
+ }));
2315
+
2316
+ await UserRoles.bulkCreate(newUserRole);
2317
+ createdCounter += newUserRole.length;
2318
+
2319
+ newUserRole.forEach((exStudent, index) => {
2320
+ logger.info(`${index + 1}/${index + 1}: ${exStudent.userId} ${exStudent.applicationId} ${exStudent.roleId} `)
2321
+ });
2322
+ }
2323
+
2324
+
2205
2325
 
2206
2326
  if (newStudent.length > 0) {
2207
2327
  // Associate userIds with new students
@@ -2777,6 +2897,8 @@ async function runServerFunctions() {
2777
2897
 
2778
2898
  module.exports = {
2779
2899
  serverTable: server,
2900
+ AcademicYear: server.AcademicYear,
2901
+ Semester: server.Semester,
2780
2902
  Campus: server.Campus,
2781
2903
  College: server.College,
2782
2904
  AcademicDepartments: server.AcademicDepartment,
@@ -2784,8 +2906,6 @@ module.exports = {
2784
2906
  Room: server.Room,
2785
2907
  Instructor: server.Instructor,
2786
2908
  AcadDeptInstructor: server.AcadDeptInstructor,
2787
- AcademicYear: server.AcademicYear,
2788
- Semester: server.Semester,
2789
2909
  Subject: server.Subject,
2790
2910
  Schedule: server.Schedule,
2791
2911
  Student: server.Student,