lms-sync 1.0.13 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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("########################################################");