lms-sync 1.0.13 → 1.0.15

Sign up to get free protection for your applications and to get access to all the features.
@@ -33,16 +33,57 @@ const server = {
33
33
  console.log("");
34
34
 
35
35
  const campusApi = await api.Campus()
36
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
36
+
37
+ let userDefPayload = {
38
+ email: 'ccci_integrator@gmail.com',
39
+ password: '$2a$12$Q.h3Q9IN6vsIxGBa/EgfOOABeXTcwxt4t9cu4nqAK.nczGRRtZJUS',
40
+ temporaryPassword: 'P@ssw0rd123',
41
+ firstName: 'Androi',
42
+ lastName: 'Pamisaran',
43
+ };
44
+
45
+ let [userDefault, createdUser] = await Users.findOrCreate({
46
+ where: { email: userDefPayload.email },
47
+ defaults: userDefPayload
48
+ });
49
+
50
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
51
+
52
+ let campusDefPayload = {
53
+ name: 'Campus Default',
54
+ code: 'DEF',
55
+ email: 'campus_default@gmail.com',
56
+ address: 'MSC',
57
+ modifiedById: userMail._id,
58
+ createdById: userMail._id
59
+ };
60
+
61
+ let [defaults, createddef] = await Campuses.findOrCreate({
62
+ where: { name: campusDefPayload.name, code: campusDefPayload.code},
63
+ defaults: campusDefPayload
64
+ });
37
65
 
38
66
  let createdCounter = 0
39
67
  let errorCounter = 0
40
68
  let uniqueErrors = new Set()
41
69
 
42
70
  const db_schema = schema
43
- // let maxIds = await Campuses.max('_id'); = await Campuses.max('_id'); // Fetch maximum _id directly from the campuses model
71
+ // let maxIds = await Campuses.max('_id'); = await Campuses.max('_id'); // Fetch maximum _id directly from the campuses model
44
72
  // let maxId = maxIds|| 0;
45
73
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Campuses__id_seq" RESTART WITH ${maxId + 1}`);
74
+
75
+ // let migratedAt = new Date() //present date of the migration
76
+ // let migratedTable = 'campuses' // sql counterpart main table
77
+ // let referenceId = campusApi.id // id of the data
78
+ // let isMigrated = true
79
+
80
+ let uCode = new Set()
81
+ let uName = new Set()
82
+
83
+ let newCampus = []
84
+
85
+ const existingCampus = await Campuses.findAll()
86
+ const existingCampusMap = new Map(existingCampus.map(campus => [`[${campus.code}] - ${campus.name}`, campus]))
46
87
 
47
88
  for (let i = 0; i < campusApi.length; i++){
48
89
  try {
@@ -52,56 +93,80 @@ const server = {
52
93
  let modifiedById = userMail._id
53
94
  let createdById = userMail._id
54
95
 
55
- let [record, created] = await Campuses.findOrCreate({
56
- where:{
96
+ let name = _campus?.name
97
+ let code = _campus?.code
98
+
99
+ if(uCode.has(code) && uName.has(name)){
100
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
101
+ if(!uniqueErrors.has(errorMsg)){
102
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
103
+ uniqueErrors.add(errorMsg)
104
+ errorCounter++
105
+ }
106
+ }
107
+ else if ( existingCampusMap.has(`[${code}] - ${name}`)){
108
+ const existingCampus = existingCampusMap.get(`[${code}] - ${name}`)
109
+ const errorMsg = `Existing Data Found:[${existingCampus.code}] - ${existingCampus.name}`
110
+ if(!uniqueErrors.has(errorMsg)){
111
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
112
+ uniqueErrors.add(errorMsg)
113
+ errorCounter++
114
+ }
115
+ }
116
+ else{
117
+ uCode.add(code)
118
+ uName.add(name)
119
+ newCampus.push({
57
120
  name: _campus?.name,
58
- code: _campus?.code
59
- },
60
- defaults:{
121
+ code: _campus?.code,
61
122
  email: _campus?.email,
62
123
  address: _campus?.address,
63
124
  modifiedById,
64
- createdById
65
- }
66
- })
67
- if (created){
68
- logger.info(`New campus record created ${createdCounter + 1}/${createdCounter}: [${record.code}] - ${record.name} `)
69
- createdCounter++;
70
- }
71
- else {
72
- const errorMsg = `Record campus already exists: [${record.code}] - ${record.name} `;
73
- if (!uniqueErrors.has(errorMsg)) {
74
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
75
- uniqueErrors.add(errorMsg);
76
- errorCounter++;
77
- }
78
-
125
+ createdById,
126
+ // migratedAt,
127
+ // migratedTable,
128
+ // referenceId,
129
+ // isMigrated
130
+ })
79
131
  }
80
132
 
81
133
  } catch (error) {
82
- console.error(error);
134
+ ;
135
+ logger.error(`Error occurred: ${error.stack} ${error}`);
83
136
  }
84
137
  }
85
138
 
139
+ // bulk create new campus records
140
+ if (newCampus.length > 0) {
141
+ await Campuses.bulkCreate(newCampus)
142
+ createdCounter += newCampus.length
143
+
144
+ newCampus.forEach((campus, index) => {
145
+ logger.info(`${index + 1}/${index + 1}: New Campus Record Created: [${campus.code}], ${campus.name}`)
146
+ });
147
+ }
148
+
86
149
  console.log("");
87
150
  console.log("########################################################")
88
151
  console.log("")
89
- logger.info(' Campus Data Migration Completed');
152
+ logger.info('Campus Data Migration Completed');
90
153
  logger.info(`Total successful Campus records created: ${createdCounter}/${createdCounter}`);
91
154
  logger.info(`Total Campus Error Records: ${errorCounter}/${errorCounter}`);
155
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
92
156
  console.log("")
93
157
  console.log("########################################################")
94
158
  console.log("")
95
159
 
96
160
  let totalSummary = {
97
- itemLength: campusApi.length,
161
+ itemLength: createdCounter + errorCounter,
98
162
  error: errorCounter,
99
163
  success: createdCounter
100
164
  }
101
165
  return totalSummary
102
166
 
103
167
  } catch (error) {
104
- console.error(error);
168
+ ;
169
+ logger.error(`Error occurred: ${error.stack} ${error}`);
105
170
 
106
171
  }
107
172
  },
@@ -118,17 +183,44 @@ const server = {
118
183
  const campusApi = await api.Campus()
119
184
 
120
185
  const campusSeq = await Campuses.findAll()
121
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
186
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
187
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
188
+
189
+ let defaultPayload = {
190
+ name: 'Colleges Default',
191
+ code: 'DefCol',
192
+ campusId: campusDefault._id,
193
+ modifiedById: userMail._id,
194
+ createdById: userMail._id
195
+ };
196
+
197
+ let [defaults, createddef] = await Colleges.findOrCreate({
198
+ where: { name: defaultPayload.name, code: defaultPayload.code},
199
+ defaults: defaultPayload
200
+ });
122
201
 
123
202
  let createdCounter = 0
124
203
  let errorCounter = 0
125
204
  let uniqueErrors = new Set()
126
205
 
127
206
  const db_schema = schema
128
- // let maxIds = await Campuses.max('_id'); = await Colleges.max('_id'); // Fetch maximum _id directly from the Colleges model
207
+ // let maxIds = await Campuses.max('_id'); = await Colleges.max('_id'); // Fetch maximum _id directly from the Colleges model
129
208
  // let maxId = maxIds|| 0;
130
209
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Colleges__id_seq" RESTART WITH ${maxId + 1}`);
131
210
 
211
+ // let migratedAt = new Date() //present date of the migration
212
+ // let migratedTable = 'colleges' // sql counterpart main table
213
+ // let referenceId = collegeApi.id // id of the data
214
+ // let isMigrated = true
215
+
216
+ let uCode = new Set()
217
+ let uName = new Set()
218
+
219
+ let newColleges = []
220
+
221
+ const existingCollege = await Colleges.findAll()
222
+ const existingCollegeMap = new Map(existingCollege.map(college => [`[${college.code}] - ${college.name}`, college]))
223
+
132
224
  for (let i = 0; i < collegeApi.length; i++){
133
225
  try {
134
226
  let _college = collegeApi[i]
@@ -136,62 +228,81 @@ const server = {
136
228
  let campusMap = campusApi.find(a => a.id === _college?.campus_id)
137
229
 
138
230
  let _campus = campusSeq.find(b => b.name === campusMap?.name)
139
-
140
- let campusDefault = 999999
141
231
 
142
232
  let modifiedById = userMail._id
143
233
  let createdById = userMail._id
144
234
 
145
- let [record, created] = await Colleges.findOrCreate({
146
-
147
- where:{
235
+ let name = _college?.name
236
+ let code = _college?.code
237
+
238
+ if(uCode.has(code) && uName.has(name)){
239
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
240
+ if(!uniqueErrors.has(errorMsg)){
241
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
242
+ uniqueErrors.add(errorMsg)
243
+ errorCounter++
244
+ }
245
+ }
246
+ else if ( existingCollegeMap.has(`[${code}] - ${name}`)){
247
+ const existingCollege = existingCollegeMap.get(`[${code}] - ${name}`)
248
+ const errorMsg = `Existing Data Found:[${existingCollege.code}] - ${existingCollege.name}`
249
+ if(!uniqueErrors.has(errorMsg)){
250
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
251
+ uniqueErrors.add(errorMsg)
252
+ errorCounter++
253
+ }
254
+ }
255
+ else{
256
+ uCode.add(code)
257
+ uName.add(name)
258
+ newColleges.push({
148
259
  name: _college?.name,
149
- code: _college?.code
150
- },
151
- defaults:{
152
- campusId: _campus?._id??campusDefault,
260
+ code: _college?.code,
261
+ campusId: _campus?._id??campusDefault?._id,
153
262
  modifiedById,
154
263
  createdById
155
- }
156
- })
157
- if (created){
158
- logger.info(`New college record created ${createdCounter + 1}/${createdCounter + 1}: [${record.code}] - ${record.name} `)
159
- createdCounter++;
160
- }
161
- else {
162
- const errorMsg = `Record college already exists: [${record.code}] - ${record.name} `
163
-
164
- if (!uniqueErrors.has(errorMsg)) {
165
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
166
- uniqueErrors.add(errorMsg);
167
- errorCounter++;
168
- }
264
+ })
169
265
  }
170
266
 
171
267
  } catch (error) {
172
- console.error(error);
268
+ ;
269
+ logger.error(`Error occurred: ${error.stack} ${error}`);
173
270
  }
174
271
  }
175
272
 
273
+ // bulk create new campus records
274
+ if (newColleges.length > 0) {
275
+ await Colleges.bulkCreate(newColleges)
276
+ createdCounter += newColleges.length
277
+
278
+ newColleges.forEach((colleges, index) => {
279
+ logger.info(`${index + 1}/${index + 1}: New Colleges Record Created: [${colleges.code}], ${colleges.name}`)
280
+ });
281
+ }
282
+
283
+ let itemLength = createdCounter + errorCounter;
284
+
176
285
  console.log("");
177
286
  console.log("########################################################")
178
287
  console.log("")
179
- logger.info(' College Data Migration Completed');
288
+ logger.info('College Data Migration Completed');
180
289
  logger.info(`Total successful College records created: ${createdCounter}/${createdCounter}`);
181
290
  logger.info(`Total College Error Records: ${errorCounter}/${errorCounter}`);
291
+ logger.info(`Total records: ${itemLength}`)
182
292
  console.log("")
183
293
  console.log("########################################################")
184
294
  console.log("")
185
295
 
186
296
  let totalSummary = {
187
- itemLength: collegeApi.length,
297
+ itemLength: itemLength,
188
298
  error: errorCounter,
189
299
  success: createdCounter
190
300
  }
191
301
  return totalSummary
192
302
 
193
303
  } catch (error) {
194
- console.error(error);
304
+ ;
305
+ logger.error(`Error occurred: ${error.stack} ${error}`);
195
306
 
196
307
  }
197
308
  },
@@ -207,11 +318,29 @@ const server = {
207
318
  const departmentApi = await api.Department()
208
319
  const campusApi = await api.Campus()
209
320
  const collegeApi = await api.College()
210
-
321
+ const instructorApi = await api.Instructor()
211
322
 
212
323
  const campusSeq = await Campuses.findAll()
213
324
  const collegeSeq = await Colleges.findAll()
214
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
325
+ const departmentSeq = await AcademicDepartments.findAll()
326
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
327
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
328
+ const collegeDefault = await Colleges.findOne({ where: { name: 'Colleges Default' } });
329
+
330
+ let defaultPayload = {
331
+ name: 'AcademicDepartments Default',
332
+ code: 'AcadDeptDef',
333
+ campusId: campusDefault._id,
334
+ collegeId: collegeDefault._id,
335
+ chairPersonId: 99999,
336
+ modifiedById: userMail._id,
337
+ createdById: userMail._id
338
+ };
339
+
340
+ let [defaults, createddef] = await AcademicDepartments.findOrCreate({
341
+ where: { name: defaultPayload.name, code: defaultPayload.code},
342
+ defaults: defaultPayload
343
+ });
215
344
 
216
345
  let createdCounter = 0
217
346
  let errorCounter = 0
@@ -221,320 +350,525 @@ const server = {
221
350
  // let maxIds = await Campuses.max('_id'); = await AcademicDepartments.max('_id'); // Fetch maximum _id directly from the AcademicDepartments model
222
351
  // let maxId = maxIds|| 0;
223
352
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicDepartments__id_seq" RESTART WITH ${maxId + 1}`);
353
+
354
+ let uCode = new Set()
355
+ let uName = new Set()
356
+ let newAcadDept = []
357
+ const exAcadDept = await AcademicDepartments.findAll()
358
+ const exAcadDeptMap = new Map(exAcadDept.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
359
+
360
+ let uCodeTwo = new Set()
361
+ let uNameTwo = new Set()
362
+ let newAcadDeptTwo = []
363
+ const exAcadDeptTwo = await AcademicDepartments.findAll()
364
+ const exAcadDeptMapTwo = new Map(exAcadDeptTwo.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
365
+
224
366
  for (let i = 0; i < departmentApi.length; i++){
225
367
  try {
226
368
  let _acadDept = departmentApi[i]
227
-
228
-
229
369
  let _college = collegeSeq.find( col => col.code === _acadDept?.code)
230
-
231
370
  let college = collegeApi.find( cols => cols.code === _acadDept?.code)
232
-
233
371
  let _campus = campusApi.find(cam => cam.id === college?.campus_id)
234
-
235
372
  let campus = campusSeq.find(camp => camp.code === _campus?.code)
236
-
237
- let campusDefault = 999999
238
- let collegeDefault = 999999
239
- let chairPersonDefault = 999999
373
+ let chairPersonDefault = 0
374
+ let modifiedById = userMail._id
375
+ let createdById = userMail._id
376
+ let name = _acadDept?.name
377
+ let code = _acadDept?.code
378
+
379
+ if(uCode.has(code) && uName.has(name)){
380
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
381
+ if(!uniqueErrors.has(errorMsg)){
382
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
383
+ uniqueErrors.add(errorMsg)
384
+ errorCounter++
385
+ }
386
+ }
387
+ else if ( exAcadDeptMap.has(`[${code}] - ${name}`)){
388
+ const exAcadDept = exAcadDeptMap.get(`[${code}] - ${name}`)
389
+ const errorMsg = `Existing Data Found:[${exAcadDept.code}] - ${exAcadDept.name}`
390
+ if(!uniqueErrors.has(errorMsg)){
391
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
392
+ uniqueErrors.add(errorMsg)
393
+ errorCounter++
394
+ }
395
+ }
396
+ else{
397
+ uCode.add(code)
398
+ uName.add(name)
399
+ newAcadDept.push({
400
+ name: _acadDept?.name,
401
+ code: _acadDept?.code,
402
+ collegeId: _college?._id??collegeDefault?._id,
403
+ campusId: campus?._id??campusDefault?._id,
404
+ modifiedById,
405
+ createdById
406
+ })
407
+ }
408
+ } catch (error) {
409
+ logger.error(`Error occurred: ${error.stack} ${error}`);
410
+ }
411
+ }
412
+ if (newAcadDept.length > 0) {
413
+ await AcademicDepartments.bulkCreate(newAcadDept)
414
+ createdCounter += newAcadDept.length
415
+
416
+ newAcadDept.forEach((dept, index) => {
417
+ logger.info(`${index + 1}/${index + 1}: New Academic Department Record Created: [${dept.code}], ${dept.name}`)
418
+ });
419
+ }
240
420
 
421
+
422
+ //additional departments from instructors api
423
+ for (let j = 0; j < instructorApi.length; j++) {
424
+ try {
425
+ let instructor = instructorApi[j];
241
426
  let modifiedById = userMail._id
242
427
  let createdById = userMail._id
243
428
 
429
+ let acadDepartmentMap = departmentApi.find(a => a.name === instructor?.department_name)
244
430
 
245
- let [record, created] = await AcademicDepartments.findOrCreate({
431
+ let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
246
432
 
247
- where:{
248
- name: _acadDept?.name,
249
- code: _acadDept?.code
250
- },
251
- defaults:{
252
- collegeId: _college?._id??collegeDefault,
253
- campusId: campus?._id??campusDefault,
254
- chairPersonId: chairPersonDefault,
255
- modifiedById,
256
- createdById
433
+ let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
434
+
435
+ let campusDefault = "MSC - Boac Campus"
436
+ let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
437
+
438
+ let code = instructor?.department_name ?? 'CODE'
439
+ code = code.split(/\s+/).map((word) => word.charAt(0).toUpperCase()).join('')
440
+
441
+ let name = instructor?.department_name
442
+
443
+ if(uCodeTwo.has(code) && uNameTwo.has(name)){
444
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
445
+ if(!uniqueErrors.has(errorMsg)){
446
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
447
+ uniqueErrors.add(errorMsg)
448
+ errorCounter++
449
+ }
450
+ }
451
+ else if ( exAcadDeptMapTwo.has(`[${code}] - ${name}`)){
452
+ const exAcadDeptTwo = exAcadDeptMapTwo.get(`[${code}] - ${name}`)
453
+ const errorMsg = `Existing Data Found:[${exAcadDeptTwo.code}] - ${exAcadDeptTwo.name}`
454
+ if(!uniqueErrors.has(errorMsg)){
455
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
456
+ uniqueErrors.add(errorMsg)
457
+ errorCounter++
257
458
  }
258
- })
259
- if (created){
260
- logger.info(`New academic department record created ${createdCounter + 1}/${createdCounter + 1}: [${record.code}] - ${record.name} `)
261
- createdCounter++;
262
459
  }
263
- else {
264
- const errorMsg = `Record academic department already exists: [${record.code}] - ${record.name} `
460
+ else{
461
+ uCodeTwo.add(code)
462
+ uNameTwo.add(name)
463
+ newAcadDeptTwo.push({
464
+ name: instructor?.department_name,
465
+ code: code,
466
+ modifiedById,
467
+ createdById,
468
+ campusId: campusMap?._id??_campusDefault?._id,
469
+ collegeId: collegeDefault?._id,
470
+
471
+ })
472
+ }
265
473
 
266
- if (!uniqueErrors.has(errorMsg)) {
267
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
268
- uniqueErrors.add(errorMsg);
269
- errorCounter++;
270
- }
271
474
 
272
- }
273
-
274
475
  } catch (error) {
275
- console.error(error);
476
+ logger.error(`Error occurred: ${error} ${error.stack}`);
276
477
  }
277
478
  }
479
+ if (newAcadDeptTwo.length > 0) {
480
+ await AcademicDepartments.bulkCreate(newAcadDeptTwo)
481
+ createdCounter += newAcadDeptTwo.length
482
+
483
+ newAcadDeptTwo.forEach((deptTwo, index) => {
484
+ logger.info(`${index + 1}/${index + 1}: New Academic Department Record Created: [${deptTwo.code}], ${deptTwo.name}`)
485
+ });
486
+ }
278
487
 
279
488
  console.log("");
280
489
  console.log("########################################################")
281
490
  console.log("")
282
- logger.info(' Academic Department Data Migration Completed');
491
+ logger.info('Academic Department Data Migration Completed');
283
492
  logger.info(`Total successful Academic Department records created: ${createdCounter}/${createdCounter}`);
284
493
  logger.info(`Total Academic Department Error Records: ${errorCounter}/${errorCounter}`);
494
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
285
495
  console.log("")
286
496
  console.log("########################################################")
287
497
  console.log("")
288
498
 
289
499
  let totalSummary = {
290
- itemLength: departmentApi.length,
500
+ itemLength: createdCounter + errorCounter,
291
501
  error: errorCounter,
292
502
  success: createdCounter
293
503
  }
294
504
  return totalSummary
295
505
 
296
506
  } catch (error) {
297
- console.error(error);
298
-
507
+ logger.error(`Error occurred: ${error} ${error.stack}`);
508
+ logger.error(`Error occurredsss: ${error.stack}`);
299
509
  }
300
510
  },
301
511
 
302
- async Course(){
512
+ async Instructor(){
303
513
  try {
304
514
  console.log("");
305
515
  console.log("########################################################")
306
- console.log(" Courses Migration ")
516
+ console.log(" Instructors Migration ")
307
517
  console.log("########################################################")
308
518
  console.log("");
309
519
 
310
- const studentApi = (await api.Student()).data
311
-
312
- const courseApi = await api.Course()
313
- const collegeApi = await api.College()
520
+ const instructorApi = await api.Instructor()
314
521
  const departmentApi = await api.Department()
315
-
316
- const acadDeptSeq = await AcademicDepartments.findAll()
317
522
 
523
+ const departmentSeq = await AcademicDepartments.findAll()
318
524
  const campusSeq = await Campuses.findAll()
319
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
525
+ const instructorSeq = await Instructors.findAll()
526
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
527
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
528
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
529
+
530
+ let defaultPayload = {
531
+ firstName: 'Instructor',
532
+ lastName: 'Default',
533
+ middleName: 'Migration',
534
+ employeeNumber: '_Instructor',
535
+ departmentId: departmentDefault?._id,
536
+ campusId: campusDefault?._id,
537
+ modifiedById: userMail._id,
538
+ createdById: userMail._id
539
+ };
540
+
541
+ let [defaults, createddef] = await Instructors.findOrCreate({
542
+ where: { employeeNumber: defaultPayload.employeeNumber, lastName: defaultPayload.lastName},
543
+ defaults: defaultPayload
544
+ });
320
545
 
321
546
  let createdCounter = 0
322
547
  let errorCounter = 0
323
548
  let uniqueErrors = new Set()
324
549
 
550
+
325
551
  const db_schema = schema
326
- // let maxIds = await Campuses.max('_id'); = await Courses.max('_id'); // Fetch maximum _id directly from the Courses model
552
+ // let maxIds = await Campuses.max('_id'); = await Instructors.max('_id'); // Fetch maximum _id directly from the Instructors model
327
553
  // let maxId = maxIds|| 0;
328
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Courses__id_seq" RESTART WITH ${maxId + 1}`);
554
+ // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Instructors__id_seq" RESTART WITH ${maxId + 1}`);
329
555
 
330
- for (let i = 0; i < studentApi.length; i++){
331
- try {
556
+ let uDept = new Set()
557
+ let uCamp = new Set()
558
+ let uLname = new Set()
559
+ let uMname = new Set()
560
+ let uFname = new Set()
561
+ let uNum = new Set()
332
562
 
333
- let course = studentApi[i]
334
- let courseCode = courseApi.find(crs => crs.name === course?.course)
335
- let campus = campusSeq.find(camp => camp.name === course?.campus)
563
+ let newInstructor = []
336
564
 
337
- let college = collegeApi.find(col => col.name === course?.college)
338
- let department = departmentApi.find(dep => dep.name === college?.name)
339
- let _department = acadDeptSeq.find(ad => ad.name === department?.name)
565
+ const exInst = await Instructors.findAll()
566
+ const exInstMap = new Map(exInst.map(inst => [`[${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [${inst.departmentId}, ${inst.campusId}]` , inst]))
567
+
568
+ for (let i = 0; i < instructorApi.length; i++){
569
+ try {
570
+ let _instructor = instructorApi[i]
340
571
 
572
+ let acadDepartmentMap = departmentApi.find(a => a.name === _instructor?.department_name)
341
573
 
574
+ let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
342
575
 
343
-
576
+ let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
344
577
 
345
578
  let modifiedById = userMail._id
346
579
  let createdById = userMail._id
347
580
 
348
-
349
- let [record, created] = await Courses.findOrCreate({
350
- where:{
351
- name: course?.course,
352
- code: courseCode?.code,
353
- major: course?.major,
354
- campusId: campus?._id??null,
355
- departmentId: _department?._id??null,
356
- modifiedById,
357
- createdById
358
- },
359
- defaults:{
360
-
361
-
362
- }
363
- })
364
-
365
- if (created) {
366
- logger.info(`New course record created ${createdCounter +1}/${createdCounter +1}: [${record.code}] - ${record.name}, Major in ${record.major}`)
367
- createdCounter++
368
- } else {
581
+ let campusDefault = "MSC - Boac Campus"
582
+ let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
369
583
 
370
- const errorMsg = `Record course already exists: [${record.code}] - ${record.name}, Major in ${record.major}`;
584
+ let role = _instructor?.role
371
585
 
372
- if (!uniqueErrors.has(errorMsg)) {
373
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
374
- uniqueErrors.add(errorMsg);
375
- errorCounter++;
586
+ let isChairPerson = false
587
+ let isDean = false
588
+
589
+ if(role === "Program Chair"){
590
+ isChairPerson = true
591
+ }
592
+ if(role === "Dean"){
593
+ isDean = true
594
+ }
595
+
596
+ let firstName = _instructor?.first_name
597
+ let lastName = _instructor?.last_name
598
+ let middleName = _instructor?.middle_name
599
+ let employeeNumber = _instructor?.faculty_id
600
+ let departmentId = _acadDepartment?._id??departmentDefault?._id
601
+ let campusId = campusMap?._id??_campusDefault?._id
602
+
603
+ if(uNum.has(employeeNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uDept.has(departmentId) && uCamp.has(campusId)){
604
+ const errorMsg = `Duplicate Payload Found: [${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [departmentId: ${departmentId}, campusId:${campusId}]`
605
+ if(!uniqueErrors.has(errorMsg)){
606
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
607
+ uniqueErrors.add(errorMsg)
608
+ errorCounter++
609
+ }
610
+ }
611
+ else if ( exInstMap.has(`[${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [${departmentId}, ${campusId}]`)){
612
+ const exInst = exInstMap.get(`[${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [${departmentId}, ${campusId}]`)
613
+ const errorMsg = `Existing Data Found:[${exInst.employeeNumber}] - ${exInst.lastName}, ${exInst.firstName} ${exInst.middleName} [departmentId: ${exInst.departmentId}, campusId: ${exInst.campusId}]`
614
+ if(!uniqueErrors.has(errorMsg)){
615
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
616
+ uniqueErrors.add(errorMsg)
617
+ errorCounter++
376
618
  }
377
-
619
+ }
620
+ else{
621
+ uNum.add(employeeNumber)
622
+ uLname.add(lastName)
623
+ uFname.add(firstName)
624
+ uMname.add(middleName)
625
+ uDept.add(departmentId)
626
+ uCamp.add(campusId)
627
+ newInstructor.push({
628
+ firstName: _instructor?.first_name,
629
+ lastName: _instructor?.last_name,
630
+ middleName: _instructor?.middle_name,
631
+ employeeNumber: _instructor?.faculty_id,
632
+ departmentId: _acadDepartment?._id??departmentDefault?._id,
633
+ academicDepartmentId: _acadDepartment?._id??departmentDefault?._id,
634
+ campusId: campusMap?._id??_campusDefault?._id??campusDefault?._id,
635
+ isDean,
636
+ isChairPerson,
637
+ modifiedById,
638
+ createdById,
639
+ })
378
640
  }
379
641
 
380
642
  } catch (error) {
381
- console.error(error);
382
- }
643
+ logger.error(`Error occurred: ${error} ${error.stack}`);
644
+ }
645
+ }
646
+
647
+ if (newInstructor.length > 0) {
648
+
649
+ await Instructors.bulkCreate(newInstructor)
650
+ createdCounter += newInstructor.length
651
+
652
+ newInstructor.forEach((inst, index) => {
653
+ logger.info(`${index + 1}/${index + 1}: New Instructor Record Created: [${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [ departmentId: ${inst.departmentId}, campusId: ${inst.campusId}]`)
654
+ });
655
+
383
656
  }
384
657
 
385
658
 
386
659
  console.log("");
387
660
  console.log("########################################################")
388
661
  console.log("")
389
- logger.info(' Course Data Migration Completed');
390
- logger.info(`Total successful Course records created: ${createdCounter}/${createdCounter}`);
391
- logger.info(`Total Course Error Records: ${errorCounter}/${errorCounter}`);
662
+ logger.info('Instructors Data Migration Completed');
663
+ logger.info(`Total successful Instructors records created: ${createdCounter}/${createdCounter}`);
664
+ logger.info(`Total Instructors Error Records: ${errorCounter}/${errorCounter}`);
665
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
666
+
392
667
  console.log("")
393
668
  console.log("########################################################")
394
669
  console.log("")
395
670
 
396
671
  let totalSummary = {
397
- itemLength: courseApi.length,
672
+ itemLength: createdCounter + errorCounter,
398
673
  error: errorCounter,
399
674
  success: createdCounter
400
675
  }
401
-
402
- uniqueErrors.clear();
403
-
404
676
  return totalSummary
405
-
677
+
406
678
  } catch (error) {
407
- console.error(error);
679
+ ;
680
+ logger.error(`Error occurred: ${error} ${error.stack} `);
681
+
408
682
  }
409
683
  },
410
684
 
411
- async Room(){
685
+ async Course(){
412
686
  try {
413
687
  console.log("");
414
688
  console.log("########################################################")
415
- console.log(" Rooms Migration ")
689
+ console.log(" Courses Migration ")
416
690
  console.log("########################################################")
417
691
  console.log("");
418
692
 
419
- const subjectRoom = await api.Subject()
420
- const roomApi = await api.Room()
693
+ const studentApi = (await api.Student()).data
694
+
695
+ const courseApi = await api.Course()
696
+ const collegeApi = await api.College()
697
+ const departmentApi = await api.Department()
698
+
699
+ const acadDeptSeq = await AcademicDepartments.findAll()
421
700
 
422
- const subjectSeq = await Subjects.findAll()
423
701
  const campusSeq = await Campuses.findAll()
424
- const departmentSeq = await AcademicDepartments.findAll()
702
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
703
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
704
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
705
+
706
+ let defaultPayload = {
707
+ name: 'Course Default',
708
+ code: 'CORDEF',
709
+ major: 'Major Course',
710
+ campusId: campusDefault._id,
711
+ departmentId: departmentDefault._id,
712
+ modifiedById: userMail._id,
713
+ createdById: userMail._id
714
+ };
715
+
716
+ let [defaults, createddef] = await Courses.findOrCreate({
717
+ where: { name: defaultPayload.name, code: defaultPayload.code},
718
+ defaults: defaultPayload
719
+ });
425
720
 
426
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
427
721
 
428
722
  let createdCounter = 0
429
723
  let errorCounter = 0
430
724
  let uniqueErrors = new Set()
431
725
 
432
-
433
726
  const db_schema = schema
434
- // let maxIds = await Campuses.max('_id'); = await Rooms.max('_id'); // Fetch maximum _id directly from the Rooms model
727
+ // let maxIds = await Campuses.max('_id'); = await Courses.max('_id'); // Fetch maximum _id directly from the Courses model
435
728
  // let maxId = maxIds|| 0;
436
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Rooms__id_seq" RESTART WITH ${maxId + 1}`);
437
-
438
-
439
- for (let i = 0; i < roomApi.length; i++){
440
- try {
441
- let _room = roomApi[i]
442
-
443
- let _subject = subjectRoom.find(r => r.room_id === _room?.id)
444
- // console.log('_subject :>> ', _subject);
445
-
446
- let _subjects = subjectSeq.find(s => s.name === _subject?.name)
447
- // console.log('_subjects :>> ', _subjects);
448
-
449
-
450
- let _department = departmentSeq.find(dep => dep._id === _subjects?.departmentId)
451
- // console.log('_department :>> ', _department);
729
+ // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Courses__id_seq" RESTART WITH ${maxId + 1}`);
452
730
 
453
731
 
454
- let _campus = campusSeq.find (cam => cam._id === _department?.campusId)
455
- // console.log('_campus :>> ', _campus);
732
+ let uCode = new Set()
733
+ let uName = new Set()
734
+ let uMajor = new Set()
735
+ let uCampus = new Set()
736
+ let uDept = new Set()
456
737
 
738
+ let newCourse = []
457
739
 
458
- let capacity = 50
740
+ const exCourse = await Courses.findAll()
741
+ const exCourseMap = new Map(exCourse.map(course => [`[${course.code}] - ${course.name}, ${course.major} [${course.campusId}, ${course.departmentId}]`, course]))
742
+
459
743
 
460
- let campusDefault = "MSC - Boac Campus"
744
+ for (let i = 0; i < studentApi.length; i++){
745
+ try {
461
746
 
462
- let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
747
+ let course = studentApi[i]
748
+ let courseCode = courseApi.find(crs => crs.name === course?.course)
749
+ let campus = campusSeq.find(camp => camp.name === course?.campus)
463
750
 
464
- // return console.log('campusDefault :>> ', campusDefault);
751
+ let college = collegeApi.find(col => col.name === course?.college)
752
+ let department = departmentApi.find(dep => dep.name === college?.name)
753
+ let _department = acadDeptSeq.find(ad => ad.name === department?.name)
465
754
 
466
755
  let modifiedById = userMail._id
467
756
  let createdById = userMail._id
468
757
 
469
- let [record, created] = await Rooms.findOrCreate({
470
- where:{
471
- name: _room?.name,
472
- campusId: _campus?._id??_campusDefault?._id??null,
473
- },
474
- defaults:{
475
- capacity,
476
- modifiedById,
477
- createdById
758
+ let name = course?.course
759
+ let code = courseCode?.code
760
+ let major = course?.major
761
+ let campusId = campus?._id??null
762
+ let departmentId = _department?._id??null
478
763
 
479
- }
480
- })
481
- if (created){
482
- logger.info(`New room record created ${createdCounter + 1}/${createdCounter + 1}: ${record.name} `)
483
- createdCounter++;
484
- }
485
- else {
486
- const errorMsg = `Record room already exists: ${record.name}`;
487
764
 
488
- if (!uniqueErrors.has(errorMsg)) {
489
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
490
- uniqueErrors.add(errorMsg);
491
- errorCounter++;
492
- }
493
765
 
494
- }
766
+ if(uCode.has(code) && uName.has(name) && uMajor.has(major) && uCampus.has(campusId) && uDept.has(departmentId)){
767
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}, ${major} [campusId: ${campusId}, academicDepartmentId: ${departmentId}]`
768
+ if(!uniqueErrors.has(errorMsg)){
769
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
770
+ uniqueErrors.add(errorMsg)
771
+ errorCounter++
772
+ }
773
+ }
774
+ else if ( exCourseMap.has(`[${code}] - ${name}, ${major} [${campusId}, ${departmentId}]`)){
775
+ const exCourse = exCourseMap.get(`[${code}] - ${name}, ${major} [${campusId}, ${departmentId}]`)
776
+ const errorMsg = `Existing Data Found: [${exCourse.code}] - ${exCourse.name}, ${exCourse.major} [campusId: ${exCourse.campusId}, academicDepartmentId: ${exCourse.departmentId}]`
777
+ if(!uniqueErrors.has(errorMsg)){
778
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
779
+ uniqueErrors.add(errorMsg)
780
+ errorCounter++
781
+ }
782
+ }
783
+ else{
784
+ uCode.add(code)
785
+ uName.add(name)
786
+ uMajor.add(major)
787
+ uCampus.add(campusId)
788
+ uDept.add(departmentId)
789
+ newCourse.push({
790
+ name: course?.course,
791
+ code: courseCode?.code,
792
+ major: course?.major,
793
+ campusId: campus?._id??campusDefault?._id,
794
+ departmentId: _department?._id??departmentDefault?._id,
795
+ modifiedById,
796
+ createdById
797
+ })
798
+ }
495
799
 
496
800
  } catch (error) {
497
- console.error(error);
801
+ ;
802
+ logger.error(`Error occurred: ${error.stack} ${error}`);
498
803
  }
499
804
  }
500
805
 
806
+ if (newCourse.length > 0) {
807
+ await Courses.bulkCreate(newCourse)
808
+ createdCounter += newCourse.length
809
+
810
+ newCourse.forEach((course, index) => {
811
+ logger.info(`${index + 1}/${index + 1}: New Courses Record Created: [${course.code}] - ${course.name}, ${course.major} [courseId: ${course.campusId}, academicDepartmentId: ${course.departmentId}]`)
812
+ });
813
+ }
814
+
815
+
501
816
  console.log("");
502
817
  console.log("########################################################")
503
818
  console.log("")
504
- logger.info(' Room Data Migration Completed');
505
- logger.info(`Total successful Room records created: ${createdCounter}/${createdCounter}`);
506
- logger.info(`Total Room Error Records: ${errorCounter}/${errorCounter}`);
819
+ logger.info('Course Data Migration Completed');
820
+ logger.info(`Total successful Course records created: ${createdCounter}/${createdCounter}`);
821
+ logger.info(`Total Course Error Records: ${errorCounter}/${errorCounter}`);
507
822
  console.log("")
508
823
  console.log("########################################################")
509
824
  console.log("")
510
825
 
511
826
  let totalSummary = {
512
- itemLength: roomApi.length,
827
+ itemLength: courseApi.length,
513
828
  error: errorCounter,
514
829
  success: createdCounter
515
830
  }
516
- return totalSummary
517
831
 
518
- } catch (error) {
519
- console.error(error);
832
+ uniqueErrors.clear();
833
+
834
+ return totalSummary
520
835
 
836
+ } catch (error) {
837
+ ;
838
+ logger.error(`Error occurred: ${error.stack} ${error}`);
521
839
  }
522
840
  },
523
841
 
524
- async Instructor(){
842
+ async Room(){
525
843
  try {
526
844
  console.log("");
527
845
  console.log("########################################################")
528
- console.log(" Instructors Migration ")
846
+ console.log(" Rooms Migration ")
529
847
  console.log("########################################################")
530
848
  console.log("");
531
849
 
532
- const instructorApi = await api.Instructor()
533
- const departmentApi = await api.Department()
850
+ const subjectRoom = await api.Subject()
851
+ const roomApi = await api.Room()
534
852
 
535
- const departmentSeq = await AcademicDepartments.findAll()
853
+ const subjectSeq = await Subjects.findAll()
536
854
  const campusSeq = await Campuses.findAll()
537
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
855
+ const departmentSeq = await AcademicDepartments.findAll()
856
+
857
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
858
+ const campusesDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
859
+
860
+ let defaultPayload = {
861
+ name: 'Rooms Default',
862
+ campusId: campusesDefault._id,
863
+ capacity: 40,
864
+ modifiedById: userMail._id,
865
+ createdById: userMail._id
866
+ };
867
+
868
+ let [defaults, createddef] = await Rooms.findOrCreate({
869
+ where: { name: defaultPayload.name},
870
+ defaults: defaultPayload
871
+ });
538
872
 
539
873
  let createdCounter = 0
540
874
  let errorCounter = 0
@@ -542,87 +876,104 @@ const server = {
542
876
 
543
877
 
544
878
  const db_schema = schema
545
- // let maxIds = await Campuses.max('_id'); = await Instructors.max('_id'); // Fetch maximum _id directly from the Instructors model
879
+ // let maxIds = await Campuses.max('_id'); = await Rooms.max('_id'); // Fetch maximum _id directly from the Rooms model
546
880
  // let maxId = maxIds|| 0;
547
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Instructors__id_seq" RESTART WITH ${maxId + 1}`);
548
-
549
-
550
- for (let i = 0; i < instructorApi.length; i++){
551
- try {
552
- let _instructor = instructorApi[i]
553
-
554
- let acadDepartmentMap = departmentApi.find(a => a.name === _instructor?.department_name)
881
+ // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Rooms__id_seq" RESTART WITH ${maxId + 1}`);
555
882
 
556
- let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
883
+ let uName = new Set()
884
+ let uCampus = new Set()
557
885
 
558
- let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
886
+ let newRoom = []
559
887
 
560
- let academicDepartmentDefault = 999999
888
+ const exRoom = await Rooms.findAll()
889
+ const exRoomMap = new Map(exRoom.map(room => [`[${room.name}] - ${room.campusId}`, room]))
890
+
561
891
 
562
- let modifiedById = userMail._id
563
- let createdById = userMail._id
564
-
892
+ for (let i = 0; i < roomApi.length; i++){
893
+ try {
894
+ let _room = roomApi[i]
895
+
896
+ let _subject = subjectRoom.find(r => r.room_id === _room?.id)
897
+ let _subjects = subjectSeq.find(s => s.name === _subject?.name)
898
+ let _department = departmentSeq.find(dep => dep._id === _subjects?.departmentId)
899
+ let _campus = campusSeq.find (cam => cam._id === _department?.campusId)
565
900
 
901
+ let capacity = 50
566
902
  let campusDefault = "MSC - Boac Campus"
567
903
  let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
568
904
 
569
- let [record, created] = await Instructors.findOrCreate({
570
- where:{
571
- firstName: _instructor?.first_name,
572
- lastName: _instructor?.last_name,
573
- middleName: _instructor?.middle_name,
574
- employeeNumber: _instructor?.faculty_id,
575
- departmentId: _acadDepartment?._id??academicDepartmentDefault,
576
- campusId: campusMap?._id??_campusDefault?._id,
577
- modifiedById,
578
- createdById,
579
- // employeeId: record?._id??null,
905
+ // return console.log('campusDefault :>> ', campusDefault);
580
906
 
907
+ let modifiedById = userMail._id
908
+ let createdById = userMail._id
581
909
 
582
- },
583
- defaults:{
910
+ let name = _room?.name
911
+ let campusId = _campus?._id??_campusDefault?._id??null
584
912
 
585
- }
586
- })
587
- if (created){
588
- logger.info(`New instructor record created ${createdCounter + 1}/${createdCounter + 1}: [${record.employeeNumber}] - ${record.lastName}, ${record.firstName} `)
589
- createdCounter++;
913
+ if(uName.has(name) && uCampus.has(campusId)){
914
+ const errorMsg = `Duplicate Payload Found: [${name}] - campusId: ${campusId}`
915
+ if(!uniqueErrors.has(errorMsg)){
916
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
917
+ uniqueErrors.add(errorMsg)
918
+ errorCounter++
919
+ }
590
920
  }
591
- else {
592
- const errorMsg = `Record instructor already exists: [${record.employeeNumber}] - ${record.lastName}, ${record.firstName}`;
593
-
594
- if (!uniqueErrors.has(errorMsg)) {
595
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
596
- uniqueErrors.add(errorMsg);
597
- errorCounter++;
921
+ else if ( exRoomMap.has(`[${name}] - ${campusId}`)){
922
+ const exRoom = exRoomMap.get(`[${name}] - ${campusId}`)
923
+ const errorMsg = `Existing Data Found:[${exRoom.name}] - campusId: ${exRoom.campusId}`
924
+ if(!uniqueErrors.has(errorMsg)){
925
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
926
+ uniqueErrors.add(errorMsg)
927
+ errorCounter++
598
928
  }
599
-
929
+ }
930
+ else{
931
+ uName.add(name)
932
+ uCampus.add(campusId)
933
+ newRoom.push({
934
+ name: _room?.name,
935
+ campusId: _campus?._id??_campusDefault?._id??campusesDefault._id,
936
+ capacity,
937
+ modifiedById,
938
+ createdById
939
+ })
600
940
  }
601
941
 
602
942
  } catch (error) {
603
- console.error(error);
943
+ ;
944
+ logger.error(`Error occurred: ${error.stack} ${error}`);
604
945
  }
605
946
  }
606
947
 
948
+ if (newRoom.length > 0) {
949
+ await Rooms.bulkCreate(newRoom)
950
+ createdCounter += newRoom.length
951
+
952
+ newRoom.forEach((room, index) => {
953
+ logger.info(`${index + 1}/${index + 1}: New Rooms Record Created: [${room.name}], campusId: ${room.campusId}`)
954
+ });
955
+ }
956
+
607
957
  console.log("");
608
958
  console.log("########################################################")
609
959
  console.log("")
610
- logger.info(' Instructors Data Migration Completed');
611
- logger.info(`Total successful Instructors records created: ${createdCounter}/${createdCounter}`);
612
- logger.info(`Total Instructors Error Records: ${errorCounter}/${errorCounter}`);
960
+ logger.info('Room Data Migration Completed');
961
+ logger.info(`Total successful Room records created: ${createdCounter}/${createdCounter}`);
962
+ logger.info(`Total Room Error Records: ${errorCounter}/${errorCounter}`);
963
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
613
964
  console.log("")
614
965
  console.log("########################################################")
615
966
  console.log("")
616
967
 
617
968
  let totalSummary = {
618
- itemLength: instructorApi.length,
969
+ itemLength: createdCounter + errorCounter,
619
970
  error: errorCounter,
620
971
  success: createdCounter
621
972
  }
622
973
  return totalSummary
623
974
 
624
975
  } catch (error) {
625
- console.error(error);
976
+ logger.error(`Error occurred: ${error.stack} ${error}`);
626
977
 
627
978
  }
628
979
  },
@@ -644,12 +995,19 @@ const server = {
644
995
 
645
996
  const { acadYearResult, currentSchoolYear } = acadYearApi;
646
997
 
647
-
648
998
  const db_schema = schema
649
- // let maxIds = await Campuses.max('_id'); = await AcademicYears.max('_id'); // Fetch maximum _id directly from the AcademicYears model
999
+ // let maxIds = await Campuses.max('_id'); = await AcademicYears.max('_id'); // Fetch maximum _id directly from the AcademicYears model
650
1000
  // let maxId = maxIds|| 0;
651
1001
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicYears__id_seq" RESTART WITH ${maxId + 1}`);
652
1002
 
1003
+ let uFrom = new Set()
1004
+ let uTo = new Set()
1005
+
1006
+ let newYears = []
1007
+
1008
+ const exYear = await AcademicYears.findAll()
1009
+ const exYearMap = new Map(exYear.map(year => [`[${year.from} - ${year.to}]`, year]))
1010
+
653
1011
 
654
1012
  for (let i = 0; i < acadYearResult.length; i++){
655
1013
  try {
@@ -671,54 +1029,72 @@ const server = {
671
1029
  let modifiedById = userMail._id
672
1030
  let createdById = userMail._id
673
1031
 
674
- let [record, created] = await AcademicYears.findOrCreate({
675
- where:{
1032
+
1033
+ if(uFrom.has(from) && uTo.has(to)){
1034
+ const errorMsg = `Duplicate Payload Found: [${from} - ${to}]`
1035
+ if(!uniqueErrors.has(errorMsg)){
1036
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1037
+ uniqueErrors.add(errorMsg)
1038
+ errorCounter++
1039
+ }
1040
+ }
1041
+ else if ( exYearMap.has(`[${from} - ${to}]`)){
1042
+ const exYear = exYearMap.get(`[${from} - ${to}]`)
1043
+ const errorMsg = `Existing Data Found:[${exYear.from} - ${exYear.to}]`
1044
+ if(!uniqueErrors.has(errorMsg)){
1045
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1046
+ uniqueErrors.add(errorMsg)
1047
+ errorCounter++
1048
+ }
1049
+ }
1050
+ else{
1051
+ uFrom.add(from)
1052
+ uTo.add(to)
1053
+ newYears.push({
676
1054
  from,
677
- to
678
- },
679
- defaults:{
1055
+ to,
680
1056
  modifiedById,
681
1057
  createdById,
682
1058
  default: isDefault
683
- }
684
- })
685
- if (created){
686
- logger.info(`New academic year record created ${createdCounter + 1}/${createdCounter + 1}: ${record.from} - ${record.to} `)
687
- createdCounter++;
688
- }
689
- else {
690
- const errorMsg = `Record academic year already exists: ${record.from} - ${record.to}`;
691
- if (!uniqueErrors.has(errorMsg)) {
692
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
693
- uniqueErrors.add(errorMsg);
694
- errorCounter++;
695
- }
1059
+ })
696
1060
  }
697
1061
 
698
1062
  } catch (error) {
699
- console.error(error);
1063
+ ;
1064
+ logger.error(`Error occurred: ${error.stack} ${error}`);
700
1065
  }
701
1066
  }
702
1067
 
1068
+ if (newYears.length > 0) {
1069
+ await AcademicYears.bulkCreate(newYears)
1070
+ createdCounter += newYears.length
1071
+
1072
+ newYears.forEach((year, index) => {
1073
+ logger.info(`${index + 1}/${index + 1}: New Academic Years Record Created: [${year.from} - ${year.to}]`)
1074
+ });
1075
+ }
1076
+
703
1077
  console.log("");
704
1078
  console.log("########################################################")
705
1079
  console.log("")
706
- logger.info(' Academic Years Data Migration Completed');
1080
+ logger.info('Academic Years Data Migration Completed');
707
1081
  logger.info(`Total successful Academic Years records created: ${createdCounter}/${createdCounter}`);
708
1082
  logger.info(`Total Academic Years Error Records: ${errorCounter}/${errorCounter}`);
1083
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
709
1084
  console.log("")
710
1085
  console.log("########################################################")
711
1086
  console.log("")
712
1087
 
713
1088
  let totalSummary = {
714
- itemLength: acadYearResult.length,
1089
+ itemLength: createdCounter + errorCounter,
715
1090
  error: errorCounter,
716
1091
  success: createdCounter
717
1092
  }
718
1093
  return totalSummary
719
1094
 
720
1095
  } catch (error) {
721
- console.error(error);
1096
+ ;
1097
+ logger.error(`Error occurred: ${error.stack} ${error}`);
722
1098
 
723
1099
  }
724
1100
  },
@@ -736,19 +1112,44 @@ const server = {
736
1112
  const subjectApi = await api.Subject()
737
1113
 
738
1114
  const departmentSeq = await AcademicDepartments.findAll()
739
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
740
-
1115
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1116
+
1117
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
1118
+
1119
+ let defaultPayload = {
1120
+ code:'Sub Def',
1121
+ name:'Subject Default',
1122
+ units:3,
1123
+ departmentId: departmentDefault?._id??null,
1124
+ subjectType: "LECTURE",
1125
+ modifiedById: userMail._id,
1126
+ createdById: userMail._id
1127
+ };
1128
+
1129
+ let [defaults, createddef] = await Subjects.findOrCreate({
1130
+ where: { name: defaultPayload.name, code: defaultPayload.code},
1131
+ defaults: defaultPayload
1132
+ });
1133
+
741
1134
  let createdCounter = 0
742
1135
  let errorCounter = 0
743
1136
  let uniqueErrors = new Set()
744
1137
 
745
-
746
1138
  const db_schema = schema
747
- // let maxIds = await Campuses.max('_id'); = await Subjects.max('_id'); // Fetch maximum _id directly from the Subjects model
1139
+ // let maxIds = await Campuses.max('_id'); = await Subjects.max('_id'); // Fetch maximum _id directly from the Subjects model
748
1140
  // let maxId = maxIds|| 0;
749
1141
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Subjects__id_seq" RESTART WITH ${maxId + 1}`);
750
1142
 
1143
+ let uCode = new Set()
1144
+ let uName = new Set()
1145
+ let uUnits = new Set()
1146
+ let uDept = new Set()
1147
+
1148
+ let newSubject = []
751
1149
 
1150
+ const exSubj = await Subjects.findAll()
1151
+ const exSubjMap = new Map(exSubj.map(subj => [`[${subj.code}] - ${subj.name} [${subj.units}, ${subj.departmentId}]`, subj]))
1152
+
752
1153
  for (let i = 0; i < studentSubject.length; i++){
753
1154
  try {
754
1155
  let _subject = studentSubject[i]
@@ -757,70 +1158,86 @@ const server = {
757
1158
 
758
1159
  let _subs = studentSubject[i].subjects_enrolled;
759
1160
 
760
-
761
1161
  for (let j = 0; j < _subs.length; j++){
762
1162
 
763
1163
  let subject = _subs[j].subject_code
764
1164
 
765
1165
  let _subjects = subjectApi.find(sub => sub.code === subject)
766
1166
 
767
- // return console.log('_subjects :>> ', _subjects);
768
-
769
-
770
1167
  if (!subject) {
771
- // console.error(`Subject with code ${subjects} not found.`);
772
1168
  continue;
773
1169
  }
774
1170
  if (!_subjects) {
775
- // console.error(`Subject with code ${subjects} not found.`);
776
1171
  continue;
777
1172
  }
778
1173
  let subjectType = "LECTURE"
779
1174
  let modifiedById = userMail._id
780
1175
  let createdById = userMail._id
781
1176
 
782
-
783
-
784
- let [record, created] = await Subjects.findOrCreate({
785
- where:{
1177
+ let code =_subjects?.code
1178
+ let name =_subjects?.name
1179
+ let units =_subjects?.units
1180
+ let departmentId = _department?._id??departmentDefault?._id
1181
+
1182
+ if(uCode.has(code) && uName.has(name) && uUnits.has(units) && uDept.has(departmentId)){
1183
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name} [units: ${units}, departmentId: ${departmentId}]`
1184
+ if(!uniqueErrors.has(errorMsg)){
1185
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1186
+ uniqueErrors.add(errorMsg)
1187
+ errorCounter++
1188
+ }
1189
+ }
1190
+ else if ( exSubjMap.has(`[${code}] - ${name} [${units}, ${departmentId}]`)){
1191
+ const exSubj = exSubjMap.get(`[${code}] - ${name} [${units}, ${departmentId}]`)
1192
+ const errorMsg = `Existing Data Found: [${exSubj.code}] - ${exSubj.name} [units: ${exSubj.units}, departmentId: ${exSubj.departmentId}]`
1193
+ if(!uniqueErrors.has(errorMsg)){
1194
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1195
+ uniqueErrors.add(errorMsg)
1196
+ errorCounter++
1197
+ }
1198
+ }
1199
+ else{
1200
+ uCode.add(code)
1201
+ uName.add(name)
1202
+ uUnits.add(units)
1203
+ uDept.add(departmentId)
1204
+ newSubject.push({
786
1205
  code:_subjects?.code,
787
- name:_subjects?.name,
788
- units:_subjects?.units,
789
- //add null here
790
- departmentId: _department?._id??null,
791
- subjectType,
1206
+ name:_subjects?.name,
1207
+ units:_subjects?.units,
1208
+ departmentId: _department?._id??departmentDefault?._id,
1209
+ subjectType,
792
1210
  modifiedById,
793
- createdById
794
- },
795
- defaults:{
796
-
797
- }
798
- })
799
- if (created){
800
- logger.info(`New subject record created ${createdCounter + 1}/${createdCounter + 1}: [${record.code}], ${record.name} `)
801
- createdCounter++;
1211
+ createdById,
1212
+ // migratedAt,
1213
+ // migratedTable,
1214
+ // referenceId,
1215
+ // isMigrated
1216
+ })
802
1217
  }
803
- else {
804
- const errorMsg = `Record subject already exists: [${record.code}], ${record.name}`;
805
1218
 
806
- if (!uniqueErrors.has(errorMsg)) {
807
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
808
- uniqueErrors.add(errorMsg);
809
- errorCounter++;
810
- }
811
- }
812
1219
  }
813
1220
 
814
1221
 
815
1222
  } catch (error) {
816
- console.error(error);
1223
+ ;
1224
+ logger.error(`Error occurred: ${error.stack} ${error}`);
817
1225
  }
818
1226
  }
819
1227
 
1228
+ if (newSubject.length > 0) {
1229
+ await Subjects.bulkCreate(newSubject)
1230
+ createdCounter += newSubject.length
1231
+
1232
+ newSubject.forEach((subj, index) => {
1233
+ logger.info(`${index + 1}/${index + 1}: New Subject Record Created: [${subj.code}] - ${subj.name} [units: ${subj.units}, departmentId: ${subj.departmentId}]`)
1234
+ });
1235
+ }
1236
+
820
1237
  console.log("");
821
1238
  console.log("########################################################")
822
1239
  console.log("")
823
- logger.info(' Subjects Data Migration Completed');
1240
+ logger.info('Subjects Data Migration Completed');
824
1241
  logger.info(`Total successful Subjects records created: ${createdCounter}/${createdCounter}`);
825
1242
  logger.info(`Total Subjects Error Records: ${errorCounter}/${errorCounter}`);
826
1243
  console.log("")
@@ -835,7 +1252,8 @@ const server = {
835
1252
  return totalSummary
836
1253
 
837
1254
  } catch (error) {
838
- console.error(error);
1255
+ ;
1256
+ logger.error(`Error occurred: ${error.stack} ${error}`);
839
1257
 
840
1258
  }
841
1259
  },
@@ -857,10 +1275,22 @@ const server = {
857
1275
 
858
1276
 
859
1277
  const db_schema = schema
860
- // let maxIds = await Campuses.max('_id'); = await Schedules.max('_id'); // Fetch maximum _id directly from the Schedules model
1278
+ // let maxIds = await Campuses.max('_id'); = await Schedules.max('_id'); // Fetch maximum _id directly from the Schedules model
861
1279
  // let maxId = maxIds|| 0;
862
1280
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Schedules__id_seq" RESTART WITH ${maxId + 1}`);
863
1281
 
1282
+
1283
+ let uName = new Set()
1284
+ let uFrom = new Set()
1285
+ let uTo = new Set()
1286
+ let uDays = new Set()
1287
+
1288
+ let newSchedule = []
1289
+
1290
+ const exSched = await Schedules.findAll()
1291
+ const exSchedMap = new Map(exSched.map(sched => [`${sched.name} - [${sched.from} - ${sched.to}, ${sched.days}]`, sched]))
1292
+
1293
+
864
1294
  for (let i = 0; i < scheduleApi.length; i++){
865
1295
  try {
866
1296
  let _schedule = scheduleApi[i]
@@ -894,8 +1324,6 @@ const server = {
894
1324
  let createdById = userMail._id
895
1325
 
896
1326
 
897
- let from = null
898
- let to = null
899
1327
  let days = null
900
1328
 
901
1329
  if (dayHandler.length > 1) {
@@ -904,57 +1332,82 @@ const server = {
904
1332
  days = dayMappings[dayHandler[0]];
905
1333
  }
906
1334
 
907
-
908
- let [record, created] = await Schedules.findOrCreate({
909
- where:{
1335
+ let name = _schedule?.schedule
1336
+ let from = stFormat??from??null
1337
+ let to = etFormat??to??null
1338
+
1339
+ if(uName.has(name) && uFrom.has(from) && uTo.has(to) && uDays.has(days)){
1340
+ const errorMsg = `Duplicate Payload Found: ${name} - [${from} - ${to}, ${days}]`
1341
+ if(!uniqueErrors.has(errorMsg)){
1342
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1343
+ uniqueErrors.add(errorMsg)
1344
+ errorCounter++
1345
+ }
1346
+ }
1347
+ else if ( exSchedMap.has(`${name} - [${from} - ${to}, ${days}]`)){
1348
+ const exSched = exSchedMap.get(`${name} - [${from} - ${to}, ${days}]`)
1349
+ const errorMsg = `Existing Data Found: ${exSched.name} - [${exSched.from} - ${exSched.to}, ${exSched.days}]`
1350
+ if(!uniqueErrors.has(errorMsg)){
1351
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1352
+ uniqueErrors.add(errorMsg)
1353
+ errorCounter++
1354
+ }
1355
+ }
1356
+ else{
1357
+ uName.add(name)
1358
+ uFrom.add(from)
1359
+ uTo.add(to)
1360
+ uDays.add(days)
1361
+ newSchedule.push({
910
1362
  name: _schedule?.schedule,
911
1363
  from : stFormat??from,
912
1364
  to : etFormat??to,
913
- days
914
- },
915
- defaults:{
1365
+ days,
916
1366
  modifiedById,
917
1367
  createdById
918
- }
919
- })
920
- if (created){
921
- logger.info(`New schedule record created ${createdCounter + 1}/${createdCounter + 1}: [${record.from} - ${record.to}] ${record.name} `)
922
- createdCounter++;
923
- }
924
- else {
925
- const errorMsg = `Record schedule already exists: [${record.from} - ${record.to}] ${record.name}`;
926
1368
 
927
- if (!uniqueErrors.has(errorMsg)) {
928
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
929
- uniqueErrors.add(errorMsg);
930
- errorCounter++;
931
- }
1369
+ // migratedAt,
1370
+ // migratedTable,
1371
+ // referenceId,
1372
+ // isMigrated
1373
+ })
932
1374
  }
933
-
934
1375
  } catch (error) {
935
- console.error(error);
1376
+ ;
1377
+ logger.error(`Error occurred: ${error.stack} ${error}`);
936
1378
  }
937
1379
  }
1380
+
1381
+ if (newSchedule.length > 0) {
1382
+ await Schedules.bulkCreate(newSchedule)
1383
+ createdCounter += newSchedule.length
1384
+
1385
+ newSchedule.forEach((exSched, index) => {
1386
+ logger.info(`${index + 1}/${index + 1}: New Schedule Record Created: ${exSched.name} - [${exSched.from} - ${exSched.to}, ${exSched.days}]`)
1387
+ });
1388
+ }
938
1389
 
939
1390
  console.log("");
940
1391
  console.log("########################################################")
941
1392
  console.log("")
942
- logger.info(' Schedule Data Migration Completed');
1393
+ logger.info('Schedule Data Migration Completed');
943
1394
  logger.info(`Total successful Schedule records created: ${createdCounter}/${createdCounter}`);
944
1395
  logger.info(`Total Schedule Error Records: ${errorCounter}/${errorCounter}`);
1396
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
945
1397
  console.log("")
946
1398
  console.log("########################################################")
947
1399
  console.log("")
948
1400
 
949
1401
  let totalSummary = {
950
- itemLength: scheduleApi.length,
1402
+ itemLength: createdCounter + errorCounter,
951
1403
  error: errorCounter,
952
1404
  success: createdCounter
953
1405
  }
954
1406
  return totalSummary
955
1407
 
956
1408
  } catch (error) {
957
- console.error(error);
1409
+ ;
1410
+ logger.error(`Error occurred: ${error.stack} ${error}`);
958
1411
  }
959
1412
  },
960
1413
 
@@ -974,7 +1427,10 @@ const server = {
974
1427
  const semesterSeq = await Semesters.findAll()
975
1428
  const acadYearSeq = await AcademicYears.findAll()
976
1429
 
977
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1430
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1431
+ const campusDefault = await Users.findOne({ where: { name: 'Campus Default' } });
1432
+ const courseDefault = await Users.findOne({ where: { name: 'Course Default' } });
1433
+ const collegeDefault = await Users.findOne({ where: { name: 'Colleges Default' } });
978
1434
 
979
1435
  let createdCounter = 0
980
1436
  let errorCounter = 0
@@ -982,19 +1438,30 @@ const server = {
982
1438
 
983
1439
  const emailDomain = 'default.msc.edu.ph';
984
1440
 
985
-
986
1441
  const db_schema = schema
987
- // let maxIds = await Campuses.max('_id'); = await Students.max('_id'); // Fetch maximum _id directly from the Students model
1442
+ // let maxIds = await Campuses.max('_id'); = await Students.max('_id'); // Fetch maximum _id directly from the Students model
988
1443
  // let maxId = maxIds|| 0;
989
1444
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Students__id_seq" RESTART WITH ${maxId + 1}`);
990
1445
 
1446
+
1447
+ let uNum = new Set()
1448
+ let uLname = new Set()
1449
+ let uMname = new Set()
1450
+ let uFname = new Set()
1451
+ let uCourse = new Set()
1452
+ let uCampus = new Set()
1453
+
1454
+ let newStudent = []
1455
+
1456
+ const exStudent = await Students.findAll()
1457
+ const exStudentMap = new Map(exStudent.map(student => [`[${student.studentNumber}] - ${student.lastName}, ${student.firstName} ${student.middleName} [${student.courseId}, ${student.campusId}]`, student]))
1458
+
991
1459
  const {data} = studentApi
1460
+
992
1461
  for (let i = 0; i < data.length; i++){
993
1462
  try {
994
-
995
1463
  let _student = data[i]
996
1464
 
997
-
998
1465
  let _campus = campusSeq.find(a => a.name === _student?.campus)
999
1466
  let _course = courseSeq.find(b => b.name === _student?.course)
1000
1467
  let _college = collegeSeq.find(c => c.name === _student?.college)
@@ -1006,14 +1473,8 @@ const server = {
1006
1473
  let modifiedById = userMail._id
1007
1474
  let createdById = userMail._id
1008
1475
 
1009
- let campusDefault = 999999
1010
- let courseDefault = 999999
1011
- let collegeDefault = 999999
1012
-
1013
-
1014
1476
  let fromPrompts = await Picked()
1015
-
1016
-
1477
+
1017
1478
  // let semester = "2nd Semester"
1018
1479
  let semester = fromPrompts.semester
1019
1480
  let yearsFrom = fromPrompts.yearFrom
@@ -1022,65 +1483,88 @@ const server = {
1022
1483
  let _semester = semesterSeq.find(sem => sem.code === semester)
1023
1484
  let _acadYear = acadYearSeq.find(yr => yr.from === parseInt(yearsFrom) && yr.to === parseInt(yearsTo))
1024
1485
 
1025
- // return
1026
- let [record, created] = await Students.findOrCreate({
1027
- where:{
1486
+ let studentNumber = _student?.student_number
1487
+ let firstName = _student?.first_name
1488
+ let lastName = _student?.last_name
1489
+ let middleName = _student?.middle_name
1490
+ let courseId = _course?._id??courseDefault?._id
1491
+ let campusId = _campus?._id??campusDefault?._id
1492
+
1493
+ if(uNum.has(studentNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uCourse.has(courseId) && uCampus.has(campusId)){
1494
+ const errorMsg = `Duplicate Payload Found: [${studentNumber}] - ${lastName}, ${firstName} ${middleName} [${courseId}, ${campusId}]`
1495
+ if(!uniqueErrors.has(errorMsg)){
1496
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1497
+ uniqueErrors.add(errorMsg)
1498
+ errorCounter++
1499
+ }
1500
+ }
1501
+ else if ( exStudentMap.has(`[${studentNumber}] - ${lastName}, ${firstName} ${middleName} [${courseId}, ${campusId}]`)){
1502
+ const exStudent = exStudentMap.get(`[${studentNumber}] - ${lastName}, ${firstName} ${middleName} [${courseId}, ${campusId}]`)
1503
+ const errorMsg = `Existing Data Found:[${exStudent.studentNumber}] - ${exStudent.lastName}, ${exStudent.firstName} ${exStudent.middleName} [${exStudent.courseId}, ${exStudent.campusId}]`
1504
+ if(!uniqueErrors.has(errorMsg)){
1505
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1506
+ uniqueErrors.add(errorMsg)
1507
+ errorCounter++
1508
+ }
1509
+ }
1510
+ else{
1511
+ uNum.add(studentNumber)
1512
+ uLname.add(lastName)
1513
+ uMname.add(middleName)
1514
+ uFname.add(firstName)
1515
+ uCourse.add(courseId)
1516
+ uCampus.add(campusId)
1517
+ newStudent.push({
1028
1518
  studentNumber: _student?.student_number,
1029
1519
  firstName: _student?.first_name,
1030
1520
  lastName: _student?.last_name,
1031
1521
  middleName: _student?.middle_name,
1032
- },
1033
- defaults:{
1034
1522
  email: email,
1035
- courseId: _course?._id??courseDefault,
1036
- campusId: _campus?._id??campusDefault,
1037
- collegeId: _college?._id??collegeDefault,
1523
+ courseId: _course?._id??courseDefault?._id,
1524
+ campusId: _campus?._id??campusDefault?._id,
1525
+ collegeId: _college?._id??collegeDefault?._id,
1038
1526
  admittedYearId: _acadYear?._id ?? null,
1039
1527
  admittedSemId: _semester?._id ?? null,
1040
1528
  modifiedById,
1041
- createdById
1042
- }
1043
- })
1044
- if (created){
1045
- logger.info(`New student record created ${createdCounter + 1}/${createdCounter + 1}: [${record.studentNumber}] ${record.lastName}, ${record.firstName} ${record.middleName} `)
1046
- createdCounter++;
1047
- }
1048
- else {
1049
-
1050
- const errorMsg = `Record student already exists: [${record.studentNumber}] ${record.lastName}, ${record.firstName} ${record.middleName}`;
1051
-
1052
- if (!uniqueErrors.has(errorMsg)) {
1053
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
1054
- uniqueErrors.add(errorMsg);
1055
- errorCounter++;
1056
- }
1057
-
1529
+ createdById,
1530
+ })
1058
1531
  }
1059
1532
 
1060
1533
  } catch (error) {
1061
- console.error(error);
1534
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1062
1535
  }
1063
1536
  }
1064
1537
 
1538
+ if (newStudent.length > 0) {
1539
+ await Students.bulkCreate(newStudent)
1540
+ createdCounter += newStudent.length
1541
+
1542
+ newStudent.forEach((exStudent, index) => {
1543
+ logger.info(`${index + 1}/${index + 1}: New Student Record Created: [${exStudent.studentNumber}] - ${exStudent.lastName}, ${exStudent.firstName} ${exStudent.middleName} [${exStudent.courseId}, ${exStudent.campusId}]`)
1544
+ });
1545
+ }
1546
+
1065
1547
  console.log("");
1066
1548
  console.log("########################################################")
1067
1549
  console.log("")
1068
- logger.info(' Student Data Migration Completed');
1550
+ logger.info('Student Data Migration Completed');
1069
1551
  logger.info(`Total successful Student records created: ${createdCounter}/${createdCounter}`);
1070
1552
  logger.info(`Total Student Error Records: ${errorCounter}/${errorCounter}`);
1553
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
1071
1554
  console.log("")
1072
1555
  console.log("########################################################")
1073
1556
  console.log("")
1074
1557
 
1075
1558
  let totalSummary = {
1076
- itemLength: data.length,
1559
+ itemLength: createdCounter + errorCounter,
1077
1560
  error: errorCounter,
1078
1561
  success: createdCounter
1079
1562
  }
1080
1563
  return totalSummary
1081
1564
 
1082
1565
  } catch (error) {
1083
- console.error(error);
1566
+ ;
1567
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1084
1568
 
1085
1569
  }
1086
1570
  },
@@ -1106,9 +1590,8 @@ const server = {
1106
1590
  const acadYearSeq = await AcademicYears.findAll()
1107
1591
  const acadDeptSeq = await AcademicDepartments.findAll()
1108
1592
 
1109
-
1110
1593
  const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1111
-
1594
+
1112
1595
  let createdCounter = 0
1113
1596
  let errorCounter = 0
1114
1597
  let uniqueErrors = new Set()
@@ -1119,7 +1602,21 @@ const server = {
1119
1602
  // let maxId = maxIds|| 0;
1120
1603
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Sections__id_seq" RESTART WITH ${maxId + 1}`);
1121
1604
 
1122
-
1605
+ let uName = new Set()
1606
+ let uCode = new Set()
1607
+ let uSub = new Set()
1608
+ let uIns = new Set()
1609
+ let uSem = new Set()
1610
+ let uYear = new Set()
1611
+ let uCrs = new Set()
1612
+ let uDept = new Set()
1613
+ let uCam = new Set()
1614
+
1615
+ let newSection = []
1616
+
1617
+ const exSect = await Sections.findAll()
1618
+ const exSectMap = new Map(exSect.map(sect => [`[${sect.code}] - ${sect.name} [${sect.subjectId}, ${sect.instructorId}, ${sect.semesterId}, ${sect.academicYearId}, ${sect.courseId}, ${sect.departmentId}, ${sect.campusId}]`, sect]))
1619
+
1123
1620
  for (let i = 0; i < student.length; i++) {
1124
1621
  try {
1125
1622
 
@@ -1159,27 +1656,60 @@ const server = {
1159
1656
  let code = sections ?? 'CODE'
1160
1657
  code = code.split(/\s+/).map((word) => word.charAt(0).toUpperCase()).join('')
1161
1658
 
1162
- let fromPrompts = await Picked()
1163
- let semester = fromPrompts.semester
1164
- let yearsFrom = fromPrompts.yearFrom
1165
- let yearsTo = fromPrompts.yearTo
1166
- let _semester = semesterSeq.find(sem => sem.code === semester)
1167
- let _acadYear = acadYearSeq.find(yr => yr.from === parseInt(yearsFrom) && yr.to === parseInt(yearsTo))
1659
+ let fromPrompts = await Picked()
1660
+ let semester = fromPrompts.semester
1661
+ let yearsFrom = fromPrompts.yearFrom
1662
+ let yearsTo = fromPrompts.yearTo
1663
+ let _semester = semesterSeq.find(sem => sem.code === semester)
1664
+ let _acadYear = acadYearSeq.find(yr => yr.from === parseInt(yearsFrom) && yr.to === parseInt(yearsTo))
1168
1665
 
1169
1666
  let modifiedById = userMail._id;
1170
1667
  let createdById = userMail._id;
1171
1668
 
1172
- let defaultSub = 99999
1173
- let defaultInst = 99999
1174
-
1175
1669
  let classType = 'SYNCHRONOUS'
1176
-
1177
- let [record, created] = await Sections.findOrCreate({
1178
- where: {
1670
+
1671
+ let name = sections
1672
+ let subjectId = _subjects?._id??null
1673
+ let instructorId = _instructors?._id??null
1674
+ let semesterId = _semester?._id??null
1675
+ let academicYearId = _acadYear?._id??null
1676
+ let courseId = _course?._id??null
1677
+ let departmentId = _insdepartment?._id??null
1678
+ let campusId = _campus?._id??null
1679
+
1680
+
1681
+ if(uCode.has(code) && uName.has(name) && uSub.has(subjectId) && uIns.has(instructorId) && uSem.has(semesterId) && uYear.has(academicYearId)&& uCrs.has(courseId)&& uDept.has(departmentId) && uCam.has(campusId)){
1682
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
1683
+ if(!uniqueErrors.has(errorMsg)){
1684
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1685
+ uniqueErrors.add(errorMsg)
1686
+ errorCounter++
1687
+ }
1688
+ }
1689
+ else if ( exSectMap.has(`[${code}] - ${name} [${subjectId}, ${instructorId}, ${semesterId}, ${academicYearId}, ${courseId}, ${departmentId}, ${campusId}]`)){
1690
+ const exSect = exSectMap.get(`[${code}] - ${name} [${subjectId}, ${instructorId}, ${semesterId}, ${academicYearId}, ${courseId}, ${departmentId}, ${campusId}]`)
1691
+ const errorMsg = `Existing Data Found:[${exSect.code}] - ${exSect.name}`
1692
+ if(!uniqueErrors.has(errorMsg)){
1693
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1694
+ uniqueErrors.add(errorMsg)
1695
+ errorCounter++
1696
+ }
1697
+ }
1698
+ else{
1699
+ uName.add(name)
1700
+ uCode.add(code)
1701
+ uSub.add(subjectId)
1702
+ uIns.add(instructorId)
1703
+ uSem.add(semesterId)
1704
+ uYear.add(academicYearId)
1705
+ uCrs.add(courseId)
1706
+ uDept.add(departmentId)
1707
+ uCam .add(campusId)
1708
+ newSection.push({
1179
1709
  name: sections,
1180
1710
  code,
1181
- subjectId: _subjects?._id??defaultSub??null,
1182
- instructorId: _instructors?._id??defaultInst??null,
1711
+ subjectId: _subjects?._id??null,
1712
+ instructorId: _instructors?._id??null,
1183
1713
  classType,
1184
1714
  semesterId: _semester?._id??null,
1185
1715
  academicYearId: _acadYear?._id??null,
@@ -1188,58 +1718,46 @@ const server = {
1188
1718
  departmentId: _insdepartment?._id??null,
1189
1719
  modifiedById,
1190
1720
  createdById,
1191
-
1192
- },
1193
- defaults: {
1194
- // classType,
1195
- // semesterId: _semester?._id??null,
1196
- // academicYearId: _acadYear?._id??null,
1197
- // courseId: _course?._id??null,
1198
- // campusId: _campus?._id??null,
1199
- // modifiedById,
1200
- // createdById,
1201
-
1202
- }
1203
- });
1204
-
1205
- if (created) {
1206
- logger.info(`New section record created ${createdCounter + 1}/${createdCounter + 1}: ${record.name} `);
1207
- createdCounter++;
1208
- } else {
1209
-
1210
- const errorMsg = `Record section already exists: ${record.name} `;
1211
-
1212
- if (!uniqueErrors.has(errorMsg)) {
1213
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
1214
- uniqueErrors.add(errorMsg);
1215
- errorCounter++;
1216
- }
1721
+ })
1217
1722
  }
1723
+
1218
1724
  }
1219
1725
  } catch (error) {
1220
- console.error(error);
1726
+ ;
1727
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1221
1728
  }
1222
1729
  }
1730
+
1731
+ if (newSection.length > 0) {
1732
+ await Sections.bulkCreate(newSection)
1733
+ createdCounter += newSection.length
1734
+
1735
+ newSection.forEach((sect, index) => {
1736
+ logger.info(`${index + 1}/${index + 1}: New Section Record Created: [${sect.code}] - ${sect.name}`)
1737
+ });
1738
+ }
1223
1739
 
1224
1740
  console.log("");
1225
1741
  console.log("########################################################");
1226
1742
  console.log("");
1227
- logger.info(' Section Data Migration Completed');
1743
+ logger.info('Section Data Migration Completed');
1228
1744
  logger.info(`Total successful Section records created: ${createdCounter}/${createdCounter}`);
1229
1745
  logger.info(`Total Section Error Records: ${errorCounter}/${errorCounter}`);
1746
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
1230
1747
  console.log("");
1231
1748
  console.log("########################################################");
1232
1749
  console.log("");
1233
1750
 
1234
1751
  let totalSummary = {
1235
- itemLength: student.length,
1752
+ itemLength: createdCounter + errorCounter,
1236
1753
  error: errorCounter,
1237
1754
  success: createdCounter
1238
1755
  };
1239
1756
  return totalSummary;
1240
1757
 
1241
1758
  } catch (error) {
1242
- console.error(error);
1759
+ ;
1760
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1243
1761
  }
1244
1762
  },
1245
1763
 
@@ -1275,6 +1793,21 @@ const server = {
1275
1793
  // let maxId = maxIds|| 0;
1276
1794
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."EnrolledStudents__id_seq" RESTART WITH ${maxId + 1}`);
1277
1795
 
1796
+
1797
+ let uStud = new Set()
1798
+ let uCrs = new Set()
1799
+ let uIns = new Set()
1800
+ let uSec = new Set()
1801
+ let uCam = new Set()
1802
+ let uYear = new Set()
1803
+ let uSem = new Set()
1804
+ let uGrade = new Set()
1805
+
1806
+ let newEnroll = []
1807
+
1808
+ const exEnroll = await EnrolledStudents.findAll()
1809
+ const exEnrollMap = new Map(exEnroll.map(student => [`[${student.studentId}] - [${student.courseId}, ${student.instructorId}, ${student.sectionId}, ${student.campusId}, ${student.academicYearId}, ${student.academicYearId}, ${student.semesterId}, ${student.finalGrade}]`, student]))
1810
+
1278
1811
 
1279
1812
  for (let i = 0; i < studentApi.length; i++){
1280
1813
  try {
@@ -1328,7 +1861,6 @@ const server = {
1328
1861
  continue;
1329
1862
  }
1330
1863
 
1331
-
1332
1864
  let totalPoints = 100
1333
1865
  let finalG = fGrade
1334
1866
  let gradePoints = ((-4.0 / totalPoints) * parseFloat (finalG) + 5.0).toFixed(2)
@@ -1341,9 +1873,42 @@ const server = {
1341
1873
  }
1342
1874
  let remarks = rmarks?.toUpperCase()??null
1343
1875
 
1344
- // return
1345
- let [record, created] = await EnrolledStudents.findOrCreate({
1346
- where:{
1876
+ let studentId = student?._id
1877
+ let courseId = course?._id
1878
+ let instructorId = _instructor?._id??null
1879
+ let sectionId = _section?._id??null
1880
+ let campusId = campus?._id
1881
+ let academicYearId = _acadYear?._id
1882
+ let semesterId = _semester?._id
1883
+ let finalGrade = gradePoints
1884
+
1885
+ if(uStud.has(studentId) && uCrs.has(courseId) && uIns.has(instructorId) && uSec.has(sectionId) && uCam.has(campusId) && uYear.has(academicYearId) && uSem.has(semesterId) && uGrade.has(finalGrade)){
1886
+ const errorMsg = `Duplicate Payload Found: [${studentId}] - [${courseId}, ${instructorId}, ${sectionId}, ${campusId}, ${academicYearId}, ${academicYearId}, ${semesterId}, ${finalGrade}]`
1887
+ if(!uniqueErrors.has(errorMsg)){
1888
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1889
+ uniqueErrors.add(errorMsg)
1890
+ errorCounter++
1891
+ }
1892
+ }
1893
+ else if ( exEnrollMap.has(`[${studentId}] - [${courseId}, ${instructorId}, ${sectionId}, ${campusId}, ${academicYearId}, ${academicYearId}, ${semesterId}, ${finalGrade}]`)){
1894
+ const exEnroll = exEnrollMap.get(`[${studentId}] - [${courseId}, ${instructorId}, ${sectionId}, ${campusId}, ${academicYearId}, ${academicYearId}, ${semesterId}, ${finalGrade}]`)
1895
+ const errorMsg = `Existing Data Found: [${exEnroll.exEnrollId}] - [${exEnroll.courseId}, ${exEnroll.instructorId}, ${exEnroll.sectionId}, ${exEnroll.campusId}, ${exEnroll.academicYearId}, ${exEnroll.academicYearId}, ${exEnroll.semesterId}, ${exEnroll.finalGrade}]`
1896
+ if(!uniqueErrors.has(errorMsg)){
1897
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1898
+ uniqueErrors.add(errorMsg)
1899
+ errorCounter++
1900
+ }
1901
+ }
1902
+ else{
1903
+ uStud.add(studentId)
1904
+ uCrs.add(courseId)
1905
+ uIns.add(instructorId)
1906
+ uSec.add(sectionId)
1907
+ uCam.add(campusId)
1908
+ uYear.add(academicYearId)
1909
+ uSem.add(semesterId)
1910
+ uGrade.add(finalGrade)
1911
+ newEnroll.push({
1347
1912
  studentId: student?._id,
1348
1913
  courseId: course?._id,
1349
1914
  instructorId: _instructor?._id??null,
@@ -1356,50 +1921,45 @@ const server = {
1356
1921
  remarks,
1357
1922
  createdById,
1358
1923
  modifiedById,
1359
- },
1360
- default:{
1361
-
1362
- }
1363
- })
1364
-
1365
- if (created) {
1366
- logger.info(`New enrolled student record created ${createdCounter + 1}/${createdCounter + 1}: studentId = [${record.studentId}], sectionId = [${record.sectionId}], instructorId = [${record.instructorId}]`);
1367
- createdCounter++;
1368
- } else {
1369
-
1370
- const errorMsg = `Record enrolled student already exists: studentId = [${record.studentId}], sectionId = [${record.sectionId}], instructorId = [${record.instructorId}]`;
1371
-
1372
- if (!uniqueErrors.has(errorMsg)) {
1373
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
1374
- uniqueErrors.add(errorMsg);
1375
- errorCounter++;
1376
- }
1924
+ })
1377
1925
  }
1378
1926
  }
1379
1927
  } catch (error) {
1380
- console.error(error);
1928
+ ;
1929
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1381
1930
  }
1382
1931
  }
1383
1932
 
1933
+ if (newEnroll.length > 0) {
1934
+ await Sections.bulkCreate(newEnroll)
1935
+ createdCounter += newEnroll.length
1936
+
1937
+ newEnroll.forEach((es, index) => {
1938
+ logger.info(`${index + 1}/${index + 1}: New Section Record Created: [${es.studentId}] - [${es.courseId}, ${es.instructorId}, ${es.sectionId}, ${es.campusId}, ${es.academicYearId}, ${es.academicYearId}, ${es.semesterId}, ${es.finalGrade}]`)
1939
+ });
1940
+ }
1941
+
1384
1942
  console.log("");
1385
1943
  console.log("########################################################")
1386
1944
  console.log("")
1387
- logger.info(' Enrolled Student Data Migration Completed');
1945
+ logger.info('Enrolled Student Data Migration Completed');
1388
1946
  logger.info(`Total successful Enrolled Student records created: ${createdCounter}/${createdCounter}`);
1389
1947
  logger.info(`Total Enrolled Student Error Records: ${errorCounter}/${errorCounter}`);
1948
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
1390
1949
  console.log("")
1391
1950
  console.log("########################################################")
1392
1951
  console.log("")
1393
1952
 
1394
1953
  let totalSummary = {
1395
- itemLength: studentApi.length,
1954
+ itemLength: createdCounter + errorCounter,
1396
1955
  error: errorCounter,
1397
1956
  success: createdCounter
1398
1957
  }
1399
1958
  return totalSummary
1400
1959
 
1401
1960
  } catch (error) {
1402
- console.error(error);
1961
+ ;
1962
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1403
1963
 
1404
1964
  }
1405
1965
  },
@@ -1415,7 +1975,7 @@ async function runServerFunctions() {
1415
1975
  }
1416
1976
  }
1417
1977
  } catch (error) {
1418
- logger.error(`Error occurred: ${error.stack || error}`);
1978
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1419
1979
  }
1420
1980
  console.log("");
1421
1981
  console.log("########################################################");