lms-sync 1.0.45 → 1.0.46

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.
@@ -3,6 +3,7 @@ const logger = require('../utils/logger')
3
3
  const api = require('../apiConnections/apiConnects')
4
4
  const moment = require('moment')
5
5
  const { Picked } = require('./semesterPick')
6
+ const Mixins = require('../utils/Mixins')
6
7
 
7
8
  const {
8
9
  AcademicDepartments,
@@ -38,9 +39,8 @@ const server = {
38
39
  let maxIdsUser = await Users.max('_id'); //Fetch maximum _id directly from the campuses model
39
40
 
40
41
  let maxId = maxIds|| 0;
41
- let maxIdSems = maxIdsSem|| 0;
42
- let maxIdUsers = maxIdsUser|| 0;
43
-
42
+ let maxIdSems = maxIdsSem || 0;
43
+ let maxIdUsers = maxIdsUser || 0;
44
44
 
45
45
  await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Users__id_seq"`);
46
46
  await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Users__id_seq" RESTART WITH ${maxIdUsers + 1}`);
@@ -135,8 +135,6 @@ const server = {
135
135
  let errorCounter = 0
136
136
  let uniqueErrors = new Set()
137
137
 
138
-
139
-
140
138
  let uCode = new Set()
141
139
  let uName = new Set()
142
140
 
@@ -156,6 +154,11 @@ const server = {
156
154
  let name = _campus?.name
157
155
  let code = _campus?.code
158
156
 
157
+ let migratedAt = new Date() //present date of the migration
158
+ let migratedTable = 'Campuses' // sql counterpart main table
159
+ let referenceId = _campus?.id // id of the data
160
+ let isMigrated = true
161
+
159
162
  if(uCode.has(code) && uName.has(name)){
160
163
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
161
164
  if(!uniqueErrors.has(errorMsg)){
@@ -183,10 +186,10 @@ const server = {
183
186
  address: _campus?.address,
184
187
  modifiedById,
185
188
  createdById,
186
- // migratedAt,
187
- // migratedTable,
188
- // referenceId,
189
- // isMigrated
189
+ migratedAt,
190
+ migratedTable,
191
+ referenceId,
192
+ isMigrated
190
193
  })
191
194
  }
192
195
 
@@ -267,12 +270,7 @@ const server = {
267
270
 
268
271
  let createdCounter = 0
269
272
  let errorCounter = 0
270
- let uniqueErrors = new Set()
271
-
272
- // let migratedAt = new Date() //present date of the migration
273
- // let migratedTable = 'colleges' // sql counterpart main table
274
- // let referenceId = collegeApi.id // id of the data
275
- // let isMigrated = true
273
+ let uniqueErrors = new Set()
276
274
 
277
275
  let uCode = new Set()
278
276
  let uName = new Set()
@@ -296,6 +294,11 @@ const server = {
296
294
  let name = _college?.name
297
295
  let code = _college?.code
298
296
 
297
+ let migratedAt = new Date() //present date of the migration
298
+ let migratedTable = 'Colleges' // sql counterpart main table
299
+ let referenceId = _college.id // id of the data
300
+ let isMigrated = true
301
+
299
302
  if(uCode.has(code) && uName.has(name)){
300
303
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
301
304
  if(!uniqueErrors.has(errorMsg)){
@@ -321,7 +324,15 @@ const server = {
321
324
  code: _college?.code,
322
325
  campusId: _campus?._id??campusDefault?._id,
323
326
  modifiedById,
324
- createdById
327
+ createdById,
328
+ migratedAt,
329
+ migratedTable,
330
+ referenceId,
331
+ isMigrated,
332
+ migratedAt,
333
+ migratedTable,
334
+ referenceId,
335
+ isMigrated
325
336
  })
326
337
  }
327
338
 
@@ -372,7 +383,7 @@ const server = {
372
383
  try {
373
384
  console.log("");
374
385
  console.log("########################################################")
375
- console.log(" Academic Departments Migration ")
386
+ console.log(" Academic Departments Migration ")
376
387
  console.log("########################################################")
377
388
  console.log("");
378
389
 
@@ -424,6 +435,7 @@ const server = {
424
435
  let newAcadDeptTwo = []
425
436
  const exAcadDeptTwo = await AcademicDepartments.findAll()
426
437
  const exAcadDeptMapTwo = new Map(exAcadDeptTwo.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
438
+
427
439
 
428
440
  for (let i = 0; i < departmentApi.length; i++){
429
441
  try {
@@ -438,6 +450,11 @@ const server = {
438
450
  let name = _acadDept?.name
439
451
  let code = _acadDept?.code
440
452
 
453
+ let migratedAt = new Date() //present date of the migration
454
+ let migratedTable = 'Departments' // sql counterpart main table
455
+ let referenceId = _acadDept.id // id of the data
456
+ let isMigrated = true
457
+
441
458
  if(uCode.has(code) && uName.has(name)){
442
459
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
443
460
  if(!uniqueErrors.has(errorMsg)){
@@ -464,7 +481,11 @@ const server = {
464
481
  collegeId: _college?._id??collegeDefault?._id,
465
482
  campusId: campus?._id??campusDefault?._id,
466
483
  modifiedById,
467
- createdById
484
+ createdById,
485
+ migratedAt,
486
+ migratedTable,
487
+ referenceId,
488
+ isMigrated
468
489
  })
469
490
  }
470
491
  } catch (error) {
@@ -572,6 +593,279 @@ const server = {
572
593
  },
573
594
 
574
595
  async Instructor(){
596
+ let userIds = []
597
+ try {
598
+ console.log("");
599
+ console.log("########################################################")
600
+ console.log(" Instructors Migrations ")
601
+ console.log("########################################################")
602
+ console.log("");
603
+
604
+
605
+ const db_schema = schema
606
+ let maxIds = await Users.max('_id'); //Fetch maximum _id directly from the Users model
607
+ let maxIdsIns = await Instructors.max('_id'); //Fetch maximum _id directly from the Users model
608
+
609
+ let maxId = maxIds|| 0;
610
+ let maxIdIns = maxIdsIns|| 0;
611
+
612
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Users__id_seq"`);
613
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Users__id_seq" RESTART WITH ${maxId + 1}`);
614
+
615
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Instructors__id_seq"`);
616
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Instructors__id_seq" RESTART WITH ${maxIdIns + 1}`);
617
+
618
+ const instructorApi = await api.Instructor()
619
+ const departmentApi = await api.Department()
620
+
621
+ const departmentSeq = await AcademicDepartments.findAll()
622
+ const campusSeq = await Campuses.findAll()
623
+
624
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
625
+ if (!userMail){}
626
+
627
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
628
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
629
+
630
+ let defaultPayload = {
631
+ firstName: 'Instructor',
632
+ lastName: 'Default',
633
+ middleName: 'Migration',
634
+ employeeNumber: '_Instructor',
635
+ departmentId: departmentDefault?._id,
636
+ campusId: campusDefault?._id,
637
+ modifiedById: userMail?._id,
638
+ createdById: userMail?._id
639
+ };
640
+
641
+ let [defaults, createddef] = await Instructors.findOrCreate({
642
+ where: { employeeNumber: defaultPayload.employeeNumber, lastName: defaultPayload.lastName},
643
+ defaults: defaultPayload
644
+ });
645
+
646
+ let createdCounter = 0
647
+ let errorCounter = 0
648
+ let uniqueErrors = new Set()
649
+
650
+ let uEmail = new Set()
651
+ let uPass = new Set()
652
+ let uTPass = new Set()
653
+ let uULname = new Set()
654
+ let uUFname = new Set()
655
+ let uUMname = new Set()
656
+ let uScopes = new Set()
657
+
658
+ let newUser = []
659
+
660
+ const exUser = await Users.findAll()
661
+ const exUserMap = new Map(exUser.map(usr => [`[${usr.email} - ${usr.password} ${usr.temporaryPassword}] - ${usr.lastName}, ${usr.firstName} ${usr.middleName} ${usr.adminScopes}`, usr]))
662
+
663
+ let uDept = new Set()
664
+ let uCamp = new Set()
665
+ let uLname = new Set()
666
+ let uMname = new Set()
667
+ let uFname = new Set()
668
+ let uNum = new Set()
669
+
670
+ let newInstructor = []
671
+
672
+ const exInst = await Instructors.findAll()
673
+ const exInstMap = new Map(exInst.map(inst => [`[${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [${inst.departmentId}, ${inst.campusId}]` , inst]))
674
+
675
+ for (let i = 0; i < instructorApi.length; i++){
676
+ try {
677
+ let _instructor = instructorApi[i]
678
+
679
+ let acadDepartmentMap = departmentApi.find(a => a.name === _instructor?.department_name)
680
+ let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
681
+ let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
682
+
683
+ let modifiedById = userMail?._id
684
+ let createdById = userMail?._id
685
+
686
+ let campusDefault = "MSC - Boac Campus"
687
+ let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
688
+
689
+ let role = _instructor?.role
690
+ let isChairPerson = false
691
+ let isDean = false
692
+
693
+ if(role === "Program Chair"){
694
+ isChairPerson = true
695
+ }
696
+ if(role === "Dean"){
697
+ isDean = true
698
+ }
699
+
700
+ let migratedAt = new Date() //present date of the migration
701
+ let migratedTable = 'Instructors' // sql counterpart main table
702
+ let referenceId = _instructor?.id // id of the data
703
+ let isMigrated = true
704
+
705
+ let firstName = _instructor?.first_name
706
+ let lastName = _instructor?.last_name
707
+ let middleName = _instructor?.middle_name
708
+ let getUserName = Mixins.generateUsername(firstName, lastName)
709
+ let email = `${getUserName}@msumarinduque.edu.ph`
710
+ let password = `${getUserName}`
711
+ let temporaryPassword = password
712
+ let adminScopes = []
713
+
714
+ let employeeNumber = _instructor?.faculty_id
715
+ let departmentId = _acadDepartment?._id??departmentDefault?._id
716
+ let campusId = campusMap?._id??_campusDefault?._id
717
+
718
+ if(uEmail.has(email) && uPass.has(password) && uTPass.has(temporaryPassword) && uULname.has(lastName) && uUFname.has(firstName) && uUMname.has(middleName) && uScopes.has(adminScopes)){
719
+ const errorMsg = `Duplicate Payload Found: [${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`
720
+ if(!uniqueErrors.has(errorMsg)){
721
+ // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
722
+ uniqueErrors.add(errorMsg)
723
+ // errorCounter++
724
+ }
725
+ }
726
+ else if (exUserMap.has(`[${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`)){
727
+ const exUser = exUserMap.get(`[${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`)
728
+ const errorMsg = `Existing Data Found: [${exUser.email} - ${exUser.password} ${exUser.temporaryPassword}] - ${exUser.lastName}, ${exUser.firstName} ${exUser.middleName} ${exUser.adminScopes}`
729
+ if(!uniqueErrors.has(errorMsg)){
730
+ // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
731
+ uniqueErrors.add(errorMsg)
732
+ // errorCounter++
733
+ }
734
+ }
735
+ else{
736
+ uEmail.add(email)
737
+ uPass.add(password)
738
+ uTPass.add(temporaryPassword)
739
+ uULname.add(lastName)
740
+ uUFname.add(firstName)
741
+ uUMname.add(middleName)
742
+ uScopes.add(adminScopes)
743
+ newUser.push({
744
+ firstName: _instructor?.first_name,
745
+ lastName: _instructor?.last_name,
746
+ middleName: _instructor?.middle_name,
747
+ password: password,
748
+ temporaryPassword: password,
749
+ email,
750
+ modifiedById,
751
+ createdById,
752
+ adminScopes,
753
+ })
754
+ }
755
+
756
+ if(uNum.has(employeeNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uDept.has(departmentId) && uCamp.has(campusId)){
757
+ const errorMsg = `Duplicate Payload Found: [${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [departmentId: ${departmentId}, campusId:${campusId}]`
758
+ if(!uniqueErrors.has(errorMsg)){
759
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
760
+ uniqueErrors.add(errorMsg)
761
+ errorCounter++
762
+ }
763
+ }
764
+ else if ( exInstMap.has(`[${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [${departmentId}, ${campusId}]`)){
765
+ const exInst = exInstMap.get(`[${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [${departmentId}, ${campusId}]`)
766
+ const errorMsg = `Existing Data Found:[${exInst.employeeNumber}] - ${exInst.lastName}, ${exInst.firstName} ${exInst.middleName} [departmentId: ${exInst.departmentId}, campusId: ${exInst.campusId}]`
767
+ if(!uniqueErrors.has(errorMsg)){
768
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
769
+ uniqueErrors.add(errorMsg)
770
+ errorCounter++
771
+ }
772
+ }
773
+ else{
774
+ uNum.add(employeeNumber)
775
+ uLname.add(lastName)
776
+ uFname.add(firstName)
777
+ uMname.add(middleName)
778
+ uDept.add(departmentId)
779
+ uCamp.add(campusId)
780
+ newInstructor.push({
781
+ firstName: _instructor?.first_name,
782
+ lastName: _instructor?.last_name,
783
+ middleName: _instructor?.middle_name,
784
+ employeeNumber: _instructor?.faculty_id,
785
+ departmentId: _acadDepartment?._id??departmentDefault?._id,
786
+ academicDepartmentId: _acadDepartment?._id??departmentDefault?._id,
787
+ campusId: campusMap?._id??_campusDefault?._id??campusDefault?._id,
788
+ isDean,
789
+ isChairPerson,
790
+ modifiedById,
791
+ createdById,
792
+ migratedAt,
793
+ migratedTable,
794
+ // referenceId,
795
+ isMigrated
796
+ })
797
+ }
798
+
799
+ } catch (error) {
800
+ logger.error(`Error occurred: ${error} ${error.stack}`);
801
+ }
802
+ }
803
+
804
+ if (newUser.length > 0) {
805
+ const createdUser = await Users.bulkCreate(newUser, {returning: true})
806
+ userIds = createdUser.map(_user => _user._id) // Remove const or let
807
+ createdCounter += newUser.length
808
+ newUser.forEach((user, index) => {
809
+ // logger.info(`${index + 1}/${index + 1}: New Instructor User Record Created: [${user.email} - ${user.password} ${user.temporaryPassword}] - ${user.lastName}, ${user.firstName} ${user.middleName} ${user.adminScopes}`)
810
+ });
811
+ }
812
+
813
+
814
+ if (newInstructor.length > 0) {
815
+ // Associate userIds with new instructors
816
+ newInstructor = newInstructor.map((inst, index) => ({
817
+ ...inst,
818
+ userId: userIds[index]
819
+ }));
820
+
821
+ await Instructors.bulkCreate(newInstructor);
822
+ createdCounter += newInstructor.length;
823
+
824
+ newInstructor.forEach((inst, index) => {
825
+ logger.info(`${index + 1}/${index + 1}: New Instructor Record Created: [${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [ departmentId: ${inst.departmentId}, campusId: ${inst.campusId}]`);
826
+ });
827
+ }
828
+
829
+
830
+ // if (newInstructor.length > 0) {
831
+
832
+ // await Instructors.bulkCreate(newInstructor)
833
+ // createdCounter += newInstructor.length
834
+
835
+ // newInstructor.forEach((inst, index) => {
836
+ // logger.info(`${index + 1}/${index + 1}: New Instructor Record Created: [${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [ departmentId: ${inst.departmentId}, campusId: ${inst.campusId}]`)
837
+ // });
838
+
839
+ // }
840
+
841
+
842
+ console.log("");
843
+ console.log("########################################################")
844
+ console.log("")
845
+ logger.info('User Instructors Data Creation Completed');
846
+ logger.info(`Total successful User Instructors records created: ${createdCounter}/${createdCounter}`);
847
+ logger.info(`Total User Instructors Error Records: ${errorCounter}/${errorCounter}`);
848
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
849
+
850
+ console.log("")
851
+ console.log("########################################################")
852
+ console.log("")
853
+
854
+ let totalSummary = {
855
+ itemLength: createdCounter + errorCounter,
856
+ error: errorCounter,
857
+ success: createdCounter
858
+ }
859
+ return totalSummary
860
+
861
+ } catch (error) {
862
+ ;
863
+ logger.error(`Error occurred: ${error} ${error.stack} `);
864
+
865
+ }
866
+ },
867
+
868
+ async Instructorsss(){
575
869
  try {
576
870
  console.log("");
577
871
  console.log("########################################################")
@@ -590,8 +884,10 @@ const server = {
590
884
 
591
885
  const departmentSeq = await AcademicDepartments.findAll()
592
886
  const campusSeq = await Campuses.findAll()
593
- const instructorSeq = await Instructors.findAll()
594
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
887
+ const userSeq = await Users.findAll()
888
+
889
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
890
+ if (!userMail){}
595
891
  const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
596
892
  const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
597
893
 
@@ -627,16 +923,18 @@ const server = {
627
923
  const exInst = await Instructors.findAll()
628
924
  const exInstMap = new Map(exInst.map(inst => [`[${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [${inst.departmentId}, ${inst.campusId}]` , inst]))
629
925
 
926
+
630
927
  for (let i = 0; i < instructorApi.length; i++){
631
928
  try {
929
+
632
930
  let _instructor = instructorApi[i]
931
+
932
+ let findUser = await userSeq.find( f => f.lastName === _instructor?.last_name && f.firstName === _instructor?.first_name && f.middleName === _instructor?.middle_name)
633
933
 
634
934
  let acadDepartmentMap = departmentApi.find(a => a.name === _instructor?.department_name)
635
-
636
935
  let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
637
-
638
936
  let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
639
-
937
+
640
938
  let modifiedById = userMail?._id
641
939
  let createdById = userMail?._id
642
940
 
@@ -644,7 +942,6 @@ const server = {
644
942
  let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
645
943
 
646
944
  let role = _instructor?.role
647
-
648
945
  let isChairPerson = false
649
946
  let isDean = false
650
947
 
@@ -661,6 +958,7 @@ const server = {
661
958
  let employeeNumber = _instructor?.faculty_id
662
959
  let departmentId = _acadDepartment?._id??departmentDefault?._id
663
960
  let campusId = campusMap?._id??_campusDefault?._id
961
+ let userId = findUser?._id
664
962
 
665
963
  if(uNum.has(employeeNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uDept.has(departmentId) && uCamp.has(campusId)){
666
964
  const errorMsg = `Duplicate Payload Found: [${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [departmentId: ${departmentId}, campusId:${campusId}]`
@@ -698,11 +996,12 @@ const server = {
698
996
  isChairPerson,
699
997
  modifiedById,
700
998
  createdById,
999
+ userId
701
1000
  })
702
1001
  }
703
1002
 
704
1003
  } catch (error) {
705
- logger.error(`Error occurred: ${error} ${error.stack}`);
1004
+ logger.error(`Error occurred: ${error} ${error.stack}`);
706
1005
  }
707
1006
  }
708
1007
 
@@ -717,7 +1016,6 @@ const server = {
717
1016
 
718
1017
  }
719
1018
 
720
-
721
1019
  console.log("");
722
1020
  console.log("########################################################")
723
1021
  console.log("")
@@ -823,6 +1121,10 @@ const server = {
823
1121
  let campusId = campus?._id??null
824
1122
  let departmentId = _department?._id??null
825
1123
 
1124
+ let migratedAt = new Date() //present date of the migration
1125
+ let migratedTable = 'Courses' // sql counterpart main table
1126
+ let referenceId = courseCode?.id // id of the data
1127
+ let isMigrated = true
826
1128
 
827
1129
 
828
1130
  if(uCode.has(code) && uName.has(name) && uMajor.has(major) && uCampus.has(campusId) && uDept.has(departmentId)){
@@ -855,7 +1157,11 @@ const server = {
855
1157
  campusId: campus?._id??campusDefault?._id,
856
1158
  departmentId: _department?._id??departmentDefault?._id,
857
1159
  modifiedById,
858
- createdById
1160
+ createdById,
1161
+ migratedAt,
1162
+ migratedTable,
1163
+ referenceId,
1164
+ isMigrated
859
1165
  })
860
1166
  }
861
1167
 
@@ -969,6 +1275,11 @@ const server = {
969
1275
  let modifiedById = userMail?._id
970
1276
  let createdById = userMail?._id
971
1277
 
1278
+ let migratedAt = new Date() //present date of the migration
1279
+ let migratedTable = 'Rooms' // sql counterpart main table
1280
+ let referenceId = _room?.id // id of the data
1281
+ let isMigrated = true
1282
+
972
1283
  let name = _room?.name
973
1284
  let campusId = _campus?._id??_campusDefault?._id??null
974
1285
 
@@ -997,7 +1308,11 @@ const server = {
997
1308
  campusId: _campus?._id??_campusDefault?._id??campusesDefault._id,
998
1309
  capacity,
999
1310
  modifiedById,
1000
- createdById
1311
+ createdById,
1312
+ migratedAt,
1313
+ migratedTable,
1314
+ referenceId,
1315
+ isMigrated
1001
1316
  })
1002
1317
  }
1003
1318
 
@@ -1093,6 +1408,11 @@ const server = {
1093
1408
  let modifiedById = userMail?._id
1094
1409
  let createdById = userMail?._id
1095
1410
 
1411
+ let migratedAt = new Date() //present date of the migration
1412
+ let migratedTable = 'AcademicYears' // sql counterpart main table
1413
+ let referenceId = _acadyear?.id // id of the data
1414
+ let isMigrated = true
1415
+
1096
1416
 
1097
1417
  if(uFrom.has(from) && uTo.has(to)){
1098
1418
  const errorMsg = `Duplicate Payload Found: [${from} - ${to}]`
@@ -1119,7 +1439,11 @@ const server = {
1119
1439
  to,
1120
1440
  modifiedById,
1121
1441
  createdById,
1122
- default: isDefault
1442
+ default: isDefault,
1443
+ migratedAt,
1444
+ migratedTable,
1445
+ referenceId,
1446
+ isMigrated
1123
1447
  })
1124
1448
  }
1125
1449
 
@@ -1247,6 +1571,11 @@ const server = {
1247
1571
  let departmentId = _department?._id??departmentDefault?._id
1248
1572
  let description = _description
1249
1573
 
1574
+ let migratedAt = new Date() //present date of the migration
1575
+ let migratedTable = 'Subjects' // sql counterpart main table
1576
+ let referenceId = _subjects?.subject_id // id of the data
1577
+ let isMigrated = true
1578
+
1250
1579
  if(uCode.has(code) && uName.has(name) && uDescription.has(description) && uUnits.has(units) && uDept.has(departmentId)){
1251
1580
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name} [units: ${units}, departmentId: ${departmentId}]`
1252
1581
  if(!uniqueErrors.has(errorMsg)){
@@ -1279,10 +1608,10 @@ const server = {
1279
1608
  description,
1280
1609
  modifiedById,
1281
1610
  createdById,
1282
- // migratedAt,
1283
- // migratedTable,
1284
- // referenceId,
1285
- // isMigrated
1611
+ migratedAt,
1612
+ migratedTable,
1613
+ referenceId,
1614
+ isMigrated
1286
1615
  })
1287
1616
  }
1288
1617
 
@@ -1395,6 +1724,11 @@ const server = {
1395
1724
 
1396
1725
  let days = null
1397
1726
 
1727
+ let migratedAt = new Date() //present date of the migration
1728
+ let migratedTable = 'Schedules' // sql counterpart main table
1729
+ let referenceId = _schedule?.schedule_id // id of the data
1730
+ let isMigrated = true
1731
+
1398
1732
  if (dayHandler.length > 1) {
1399
1733
  days = dayHandler[0].split('').map(day => dayMappings[day]).join(', ');
1400
1734
  } else {
@@ -1433,12 +1767,11 @@ const server = {
1433
1767
  to : etFormat??to,
1434
1768
  days,
1435
1769
  modifiedById,
1436
- createdById
1437
-
1438
- // migratedAt,
1439
- // migratedTable,
1440
- // referenceId,
1441
- // isMigrated
1770
+ createdById,
1771
+ migratedAt,
1772
+ migratedTable,
1773
+ referenceId,
1774
+ isMigrated
1442
1775
  })
1443
1776
  }
1444
1777
  } catch (error) {
@@ -1481,6 +1814,7 @@ const server = {
1481
1814
  },
1482
1815
 
1483
1816
  async Student(){
1817
+ let userIds = []
1484
1818
  try {
1485
1819
  console.log("");
1486
1820
  console.log("########################################################")
@@ -1489,8 +1823,15 @@ const server = {
1489
1823
  console.log("");
1490
1824
 
1491
1825
  const db_schema = schema
1826
+ let maxIdsU = await Users.max('_id'); //Fetch maximum _id directly from the Users model
1492
1827
  let maxIds = await Students.max('_id'); // Fetch maximum _id directly from the Students model
1828
+
1493
1829
  let maxId = maxIds|| 0;
1830
+ let maxIdU = maxIdsU|| 0;
1831
+
1832
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Users__id_seq"`);
1833
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Users__id_seq" RESTART WITH ${maxIdU + 1}`);
1834
+
1494
1835
  await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Students__id_seq"`);
1495
1836
  await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Students__id_seq" RESTART WITH ${maxId + 1}`);
1496
1837
 
@@ -1511,7 +1852,18 @@ const server = {
1511
1852
  let errorCounter = 0
1512
1853
  let uniqueErrors = new Set()
1513
1854
 
1514
- const emailDomain = 'default.msc.edu.ph';
1855
+ let uEmail = new Set()
1856
+ let uPass = new Set()
1857
+ let uTPass = new Set()
1858
+ let uULname = new Set()
1859
+ let uUFname = new Set()
1860
+ let uUMname = new Set()
1861
+ let uScopes = new Set()
1862
+
1863
+ let newUser = []
1864
+
1865
+ const exUser = await Users.findAll()
1866
+ const exUserMap = new Map(exUser.map(usr => [`[${usr.email} - ${usr.password} ${usr.temporaryPassword}] - ${usr.lastName}, ${usr.firstName} ${usr.middleName} ${usr.adminScopes}`, usr]))
1515
1867
 
1516
1868
  let uNum = new Set()
1517
1869
  let uLname = new Set()
@@ -1534,10 +1886,237 @@ const server = {
1534
1886
  let _campus = campusSeq.find(a => a.name === _student?.campus)
1535
1887
  let _course = courseSeq.find(b => b.name === _student?.course)
1536
1888
  let _college = collegeSeq.find(c => c.name === _student?.college)
1889
+
1890
+ let modifiedById = userMail?._id
1891
+ let createdById = userMail?._id
1892
+
1893
+ let fromPrompts = await Picked()
1894
+
1895
+ // let semester = "2nd Semester"
1896
+ let semester = fromPrompts.semester
1897
+ let yearsFrom = fromPrompts.yearFrom
1898
+ let yearsTo = fromPrompts.yearTo
1899
+
1900
+ let _semester = semesterSeq.find(sem => sem.code === semester)
1901
+ let _acadYear = acadYearSeq.find(yr => yr.from === parseInt(yearsFrom) && yr.to === parseInt(yearsTo))
1902
+
1903
+ let studentNumber = _student?.student_number
1904
+ let firstName = _student?.first_name
1905
+ let lastName = _student?.last_name
1906
+ let middleName = _student?.middle_name
1907
+ let courseId = _course?._id??courseDefault?._id
1908
+ let campusId = _campus?._id??campusDefault?._id
1909
+
1910
+ let getUserName = Mixins.generateUsername(firstName, lastName)
1911
+ let email = `${getUserName}@msumarinduque.edu.ph`
1912
+ let password = `${getUserName}`
1913
+ let temporaryPassword = password
1914
+ let adminScopes = []
1915
+
1916
+ let migratedAt = new Date() //present date of the migration
1917
+ let migratedTable = 'Students' // sql counterpart main table
1918
+ let referenceId = _student?.id // id of the data
1919
+ let isMigrated = true
1920
+
1921
+ if(uEmail.has(email) && uPass.has(password) && uTPass.has(temporaryPassword) && uULname.has(lastName) && uUFname.has(firstName) && uUMname.has(middleName) && uScopes.has(adminScopes)){
1922
+ const errorMsg = `Duplicate Payload Found: [${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`
1923
+ if(!uniqueErrors.has(errorMsg)){
1924
+ // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1925
+ uniqueErrors.add(errorMsg)
1926
+ // errorCounter++
1927
+ }
1928
+ }
1929
+ else if (exUserMap.has(`[${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`)){
1930
+ const exUser = exUserMap.get(`[${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`)
1931
+ const errorMsg = `Existing Data Found: [${exUser.email} - ${exUser.password} ${exUser.temporaryPassword}] - ${exUser.lastName}, ${exUser.firstName} ${exUser.middleName} ${exUser.adminScopes}`
1932
+ if(!uniqueErrors.has(errorMsg)){
1933
+ // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1934
+ uniqueErrors.add(errorMsg)
1935
+ // errorCounter++
1936
+ }
1937
+ }
1938
+ else{
1939
+ uEmail.add(email)
1940
+ uPass.add(password)
1941
+ uTPass.add(temporaryPassword)
1942
+ uULname.add(lastName)
1943
+ uUFname.add(firstName)
1944
+ uUMname.add(middleName)
1945
+ uScopes.add(adminScopes)
1946
+ newUser.push({
1947
+ firstName: _student?.first_name,
1948
+ lastName: _student?.last_name,
1949
+ middleName: _student?.middle_name,
1950
+ password: password,
1951
+ temporaryPassword: password,
1952
+ email,
1953
+ modifiedById,
1954
+ createdById,
1955
+ adminScopes,
1956
+ })
1957
+ }
1958
+
1959
+ if(uNum.has(studentNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uCourse.has(courseId) && uCampus.has(campusId)){
1960
+ const errorMsg = `Duplicate Payload Found: [${studentNumber}] - ${lastName}, ${firstName} ${middleName} [courseId: ${courseId}, campusId:${campusId}]`
1961
+ if(!uniqueErrors.has(errorMsg)){
1962
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1963
+ uniqueErrors.add(errorMsg)
1964
+ errorCounter++
1965
+ }
1966
+ }
1967
+ else if ( exStudentMap.has(`[${studentNumber}] - ${lastName}, ${firstName} ${middleName} [${courseId}, ${campusId}]`)){
1968
+ const exStudent = exStudentMap.get(`[${studentNumber}] - ${lastName}, ${firstName} ${middleName} [${courseId}, ${campusId}]`)
1969
+ const errorMsg = `Existing Data Found:[${exStudent.studentNumber}] - ${exStudent.lastName}, ${exStudent.firstName} ${exStudent.middleName} [courseId: ${exStudent.courseId}, campusId: ${exStudent.campusId}]`
1970
+ if(!uniqueErrors.has(errorMsg)){
1971
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1972
+ uniqueErrors.add(errorMsg)
1973
+ errorCounter++
1974
+ }
1975
+ }
1976
+ else{
1977
+ uNum.add(studentNumber)
1978
+ uLname.add(lastName)
1979
+ uMname.add(middleName)
1980
+ uFname.add(firstName)
1981
+ uCourse.add(courseId)
1982
+ uCampus.add(campusId)
1983
+ newStudent.push({
1984
+ studentNumber: _student?.student_number,
1985
+ firstName: _student?.first_name,
1986
+ lastName: _student?.last_name,
1987
+ middleName: _student?.middle_name,
1988
+ email: email,
1989
+ courseId: _course?._id??courseDefault?._id,
1990
+ campusId: _campus?._id??campusDefault?._id,
1991
+ collegeId: _college?._id??collegeDefault?._id,
1992
+ admittedYearId: _acadYear?._id ?? null,
1993
+ admittedSemId: _semester?._id ?? null,
1994
+ modifiedById,
1995
+ createdById,
1996
+ migratedAt,
1997
+ migratedTable,
1998
+ // referenceId,
1999
+ isMigrated
2000
+ })
2001
+ }
1537
2002
 
1538
- const getLastName = _student?.last_name.toLowerCase().replace(/\s/g, '') ?? "";
2003
+ } catch (error) {
2004
+ logger.error(`Error occurred: ${error.stack} ${error}`);
2005
+ }
2006
+ }
2007
+
2008
+ if (newUser.length > 0) {
2009
+ const createdUser = await Users.bulkCreate(newUser, {returning: true})
2010
+ userIds = createdUser.map(_user => _user._id) // Remove const or let
2011
+ createdCounter += newUser.length
2012
+ newUser.forEach((user, index) => {
2013
+ // logger.info(`${index + 1}/${index + 1}: New Student User Record Created: [${user.email} - ${user.password} ${user.temporaryPassword}] - ${user.lastName}, ${user.firstName} ${user.middleName} ${user.adminScopes}`)
2014
+ });
2015
+ }
2016
+
2017
+ if (newStudent.length > 0) {
2018
+ // Associate userIds with new students
2019
+ newStudent = newStudent.map((exStudent, index) => ({
2020
+ ...exStudent,
2021
+ userId: userIds[index]
2022
+ }));
2023
+
2024
+ await Students.bulkCreate(newStudent);
2025
+ createdCounter += newStudent.length;
2026
+
2027
+ newStudent.forEach((exStudent, index) => {
2028
+ logger.info(`${index + 1}/${index + 1}: New Student Record Created: [${exStudent.studentNumber}] - ${exStudent.lastName}, ${exStudent.firstName} ${exStudent.middleName} [courseId: ${exStudent.courseId}, campusId: ${exStudent.campusId}]`)
2029
+ });
2030
+ }
2031
+
2032
+ // if (newStudent.length > 0) {
2033
+ // await Students.bulkCreate(newStudent)
2034
+ // createdCounter += newStudent.length
2035
+
2036
+ // newStudent.forEach((exStudent, index) => {
2037
+ // logger.info(`${index + 1}/${index + 1}: New Student Record Created: [${exStudent.studentNumber}] - ${exStudent.lastName}, ${exStudent.firstName} ${exStudent.middleName} [courseId: ${exStudent.courseId}, campusId: ${exStudent.campusId}]`)
2038
+ // });
2039
+ // }
2040
+
2041
+ console.log("");
2042
+ console.log("########################################################")
2043
+ console.log("")
2044
+ logger.info('Student Data Migration Completed');
2045
+ logger.info(`Total successful Student records created: ${createdCounter}/${createdCounter}`);
2046
+ logger.info(`Total Student Error Records: ${errorCounter}/${errorCounter}`);
2047
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
2048
+ console.log("")
2049
+ console.log("########################################################")
2050
+ console.log("")
2051
+
2052
+ let totalSummary = {
2053
+ itemLength: createdCounter + errorCounter,
2054
+ error: errorCounter,
2055
+ success: createdCounter
2056
+ }
2057
+ return totalSummary
2058
+
2059
+ } catch (error) {
2060
+ logger.error(`Error occurred: ${error.stack} ${error}`);
2061
+
2062
+ }
2063
+ },
1539
2064
 
1540
- let email = `${_student?.student_number}_${getLastName}@${emailDomain}`;
2065
+ async Studentsss(){
2066
+ try {
2067
+ console.log("");
2068
+ console.log("########################################################")
2069
+ console.log(" Students Migration ")
2070
+ console.log("########################################################")
2071
+ console.log("");
2072
+
2073
+ const db_schema = schema
2074
+ let maxIds = await Students.max('_id'); // Fetch maximum _id directly from the Students model
2075
+ let maxId = maxIds|| 0;
2076
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Students__id_seq"`);
2077
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Students__id_seq" RESTART WITH ${maxId + 1}`);
2078
+
2079
+ const studentApi = await api.Student()
2080
+
2081
+ const campusSeq = await Campuses.findAll()
2082
+ const courseSeq = await Courses.findAll()
2083
+ const collegeSeq = await Colleges.findAll()
2084
+ const semesterSeq = await Semesters.findAll()
2085
+ const acadYearSeq = await AcademicYears.findAll()
2086
+ const userSeq = await Users.findAll()
2087
+
2088
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
2089
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
2090
+ const courseDefault = await Courses.findOne({ where: { name: 'Course Default' } });
2091
+ const collegeDefault = await Colleges.findOne({ where: { name: 'Colleges Default' } });
2092
+
2093
+ let createdCounter = 0
2094
+ let errorCounter = 0
2095
+ let uniqueErrors = new Set()
2096
+
2097
+ let uNum = new Set()
2098
+ let uLname = new Set()
2099
+ let uMname = new Set()
2100
+ let uFname = new Set()
2101
+ let uCourse = new Set()
2102
+ let uCampus = new Set()
2103
+
2104
+ let newStudent = []
2105
+
2106
+ const exStudent = await Students.findAll()
2107
+ const exStudentMap = new Map(exStudent.map(student => [`[${student.studentNumber}] - ${student.lastName}, ${student.firstName} ${student.middleName} [${student.courseId}, ${student.campusId}]`, student]))
2108
+
2109
+ const {data} = studentApi
2110
+
2111
+ for (let i = 0; i < data.length; i++){
2112
+ try {
2113
+ let _student = data[i]
2114
+
2115
+ let _campus = campusSeq.find(a => a.name === _student?.campus)
2116
+ let _course = courseSeq.find(b => b.name === _student?.course)
2117
+ let _college = collegeSeq.find(c => c.name === _student?.college)
2118
+
2119
+ let findUser = await userSeq.find( f => f.lastName === _student?.last_name && f.firstName === _student?.first_name && f.middleName === _student?.middle_name)
1541
2120
 
1542
2121
  let modifiedById = userMail?._id
1543
2122
  let createdById = userMail?._id
@@ -1559,6 +2138,12 @@ const server = {
1559
2138
  let courseId = _course?._id??courseDefault?._id
1560
2139
  let campusId = _campus?._id??campusDefault?._id
1561
2140
 
2141
+ let getUserName = Mixins.generateUsername(firstName, lastName)
2142
+ let email = `${getUserName}@msumarinduque.edu.ph`
2143
+
2144
+ let userId = findUser?._id
2145
+
2146
+
1562
2147
  if(uNum.has(studentNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uCourse.has(courseId) && uCampus.has(campusId)){
1563
2148
  const errorMsg = `Duplicate Payload Found: [${studentNumber}] - ${lastName}, ${firstName} ${middleName} [courseId: ${courseId}, campusId:${campusId}]`
1564
2149
  if(!uniqueErrors.has(errorMsg)){
@@ -1596,6 +2181,7 @@ const server = {
1596
2181
  admittedSemId: _semester?._id ?? null,
1597
2182
  modifiedById,
1598
2183
  createdById,
2184
+ userId
1599
2185
  })
1600
2186
  }
1601
2187
 
@@ -1655,6 +2241,7 @@ const server = {
1655
2241
 
1656
2242
  const subjectApi = await api.Subject();
1657
2243
  const instructorApi = await api.Instructor()
2244
+ const sectionApi = await api.Section()
1658
2245
 
1659
2246
  const subjectSeq = await Subjects.findAll();
1660
2247
  const instructorSeq = await Instructors.findAll()
@@ -1711,6 +2298,8 @@ const server = {
1711
2298
  let _insdepartment = acadDeptSeq.find(idep => idep.name === _instructor?.department_name)
1712
2299
 
1713
2300
 
2301
+ let _sections = sectionApi.find(sect => sect.name === sections)
2302
+
1714
2303
  if (!_subject) {
1715
2304
  // console.error(`Subject with code ${subjects} not found.`);
1716
2305
  continue;
@@ -1745,6 +2334,11 @@ const server = {
1745
2334
  let departmentId = _insdepartment?._id??null
1746
2335
  let campusId = _campus?._id??null
1747
2336
 
2337
+ let migratedAt = new Date() //present date of the migration
2338
+ let migratedTable = 'Sections' // sql counterpart main table
2339
+ let referenceId = _sections?.id // id of the data
2340
+ let isMigrated = true
2341
+
1748
2342
 
1749
2343
  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)){
1750
2344
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name} [subjectId: ${subjectId}, instructorId: ${instructorId}]`
@@ -1786,6 +2380,10 @@ const server = {
1786
2380
  departmentId: _insdepartment?._id??null,
1787
2381
  modifiedById,
1788
2382
  createdById,
2383
+ migratedAt,
2384
+ migratedTable,
2385
+ referenceId,
2386
+ isMigrated
1789
2387
  })
1790
2388
  }
1791
2389
 
@@ -1908,6 +2506,11 @@ const server = {
1908
2506
  let modifiedById = userMail?._id;
1909
2507
  let createdById = userMail?._id;
1910
2508
 
2509
+ let migratedAt = new Date() //present date of the migration
2510
+ let migratedTable = 'campuses' // sql counterpart main table
2511
+ let referenceId = _campus?.id // id of the data
2512
+ let isMigrated = true
2513
+
1911
2514
  for (let j = 0; j < _students.length; j++){
1912
2515
  let instrcutor = _students[j].faculty_id
1913
2516
  let sections = _students[j].section_name
@@ -1977,6 +2580,7 @@ const server = {
1977
2580
  remarks = "FAILED"
1978
2581
  overAllStatus = "FAILED"
1979
2582
  }
2583
+
1980
2584
 
1981
2585
  let studentId = student?._id
1982
2586
  let courseId = course?._id
@@ -2126,6 +2730,11 @@ const server = {
2126
2730
  let modifiedById = userMail?._id;
2127
2731
  let createdById = userMail?._id;
2128
2732
 
2733
+ let migratedAt = new Date() //present date of the migration
2734
+ let migratedTable = 'Students' // sql counterpart main table
2735
+ let referenceId = _student?.id // id of the data
2736
+ let isMigrated = true
2737
+
2129
2738
  for (let j = 0; j < _students.length; j++){
2130
2739
 
2131
2740
  let instrcutor = _students[j].faculty_id
@@ -2220,6 +2829,10 @@ const server = {
2220
2829
  overAllStatus,
2221
2830
  createdById,
2222
2831
  modifiedById,
2832
+ migratedAt,
2833
+ migratedTable,
2834
+ // referenceId,
2835
+ isMigrated
2223
2836
  },
2224
2837
  default:{
2225
2838
 
@@ -2312,10 +2925,12 @@ module.exports = {
2312
2925
  AcademicDepartments: server.AcademicDepartment,
2313
2926
  Course: server.Course,
2314
2927
  Room: server.Room,
2928
+ UserInstructor: server.UserInstructor,
2315
2929
  Instructor: server.Instructor,
2316
2930
  AcademicYear: server.AcademicYear,
2317
2931
  Subject: server.Subject,
2318
2932
  Schedule: server.Schedule,
2933
+ UserStudents: server.UserStudents,
2319
2934
  Student: server.Student,
2320
2935
  Section: server.Section,
2321
2936
  EnrolledStudent: server.EnrolledStudent,