lms-sync 1.0.43 → 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}`);
@@ -64,11 +64,13 @@ const server = {
64
64
  let [userDefault, createdUser] = await Users.findOrCreate({
65
65
  where: { email: userDefPayload.email },
66
66
  defaults: userDefPayload
67
- });
67
+ });
68
+
69
+ if (createdUser){
70
+ logger.info(`Created Migration User :>> ${userDefault.email}`);
71
+ }
68
72
 
69
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
70
-
71
-
73
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
72
74
 
73
75
  let semesterData = [
74
76
  {
@@ -133,8 +135,6 @@ const server = {
133
135
  let errorCounter = 0
134
136
  let uniqueErrors = new Set()
135
137
 
136
-
137
-
138
138
  let uCode = new Set()
139
139
  let uName = new Set()
140
140
 
@@ -154,6 +154,11 @@ const server = {
154
154
  let name = _campus?.name
155
155
  let code = _campus?.code
156
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
+
157
162
  if(uCode.has(code) && uName.has(name)){
158
163
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
159
164
  if(!uniqueErrors.has(errorMsg)){
@@ -181,10 +186,10 @@ const server = {
181
186
  address: _campus?.address,
182
187
  modifiedById,
183
188
  createdById,
184
- // migratedAt,
185
- // migratedTable,
186
- // referenceId,
187
- // isMigrated
189
+ migratedAt,
190
+ migratedTable,
191
+ referenceId,
192
+ isMigrated
188
193
  })
189
194
  }
190
195
 
@@ -265,12 +270,7 @@ const server = {
265
270
 
266
271
  let createdCounter = 0
267
272
  let errorCounter = 0
268
- let uniqueErrors = new Set()
269
-
270
- // let migratedAt = new Date() //present date of the migration
271
- // let migratedTable = 'colleges' // sql counterpart main table
272
- // let referenceId = collegeApi.id // id of the data
273
- // let isMigrated = true
273
+ let uniqueErrors = new Set()
274
274
 
275
275
  let uCode = new Set()
276
276
  let uName = new Set()
@@ -294,6 +294,11 @@ const server = {
294
294
  let name = _college?.name
295
295
  let code = _college?.code
296
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
+
297
302
  if(uCode.has(code) && uName.has(name)){
298
303
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
299
304
  if(!uniqueErrors.has(errorMsg)){
@@ -319,7 +324,15 @@ const server = {
319
324
  code: _college?.code,
320
325
  campusId: _campus?._id??campusDefault?._id,
321
326
  modifiedById,
322
- createdById
327
+ createdById,
328
+ migratedAt,
329
+ migratedTable,
330
+ referenceId,
331
+ isMigrated,
332
+ migratedAt,
333
+ migratedTable,
334
+ referenceId,
335
+ isMigrated
323
336
  })
324
337
  }
325
338
 
@@ -370,7 +383,7 @@ const server = {
370
383
  try {
371
384
  console.log("");
372
385
  console.log("########################################################")
373
- console.log(" Academic Departments Migration ")
386
+ console.log(" Academic Departments Migration ")
374
387
  console.log("########################################################")
375
388
  console.log("");
376
389
 
@@ -422,6 +435,7 @@ const server = {
422
435
  let newAcadDeptTwo = []
423
436
  const exAcadDeptTwo = await AcademicDepartments.findAll()
424
437
  const exAcadDeptMapTwo = new Map(exAcadDeptTwo.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
438
+
425
439
 
426
440
  for (let i = 0; i < departmentApi.length; i++){
427
441
  try {
@@ -436,6 +450,11 @@ const server = {
436
450
  let name = _acadDept?.name
437
451
  let code = _acadDept?.code
438
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
+
439
458
  if(uCode.has(code) && uName.has(name)){
440
459
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
441
460
  if(!uniqueErrors.has(errorMsg)){
@@ -462,7 +481,11 @@ const server = {
462
481
  collegeId: _college?._id??collegeDefault?._id,
463
482
  campusId: campus?._id??campusDefault?._id,
464
483
  modifiedById,
465
- createdById
484
+ createdById,
485
+ migratedAt,
486
+ migratedTable,
487
+ referenceId,
488
+ isMigrated
466
489
  })
467
490
  }
468
491
  } catch (error) {
@@ -570,6 +593,279 @@ const server = {
570
593
  },
571
594
 
572
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(){
573
869
  try {
574
870
  console.log("");
575
871
  console.log("########################################################")
@@ -588,8 +884,10 @@ const server = {
588
884
 
589
885
  const departmentSeq = await AcademicDepartments.findAll()
590
886
  const campusSeq = await Campuses.findAll()
591
- const instructorSeq = await Instructors.findAll()
592
- 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){}
593
891
  const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
594
892
  const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
595
893
 
@@ -625,16 +923,18 @@ const server = {
625
923
  const exInst = await Instructors.findAll()
626
924
  const exInstMap = new Map(exInst.map(inst => [`[${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [${inst.departmentId}, ${inst.campusId}]` , inst]))
627
925
 
926
+
628
927
  for (let i = 0; i < instructorApi.length; i++){
629
928
  try {
929
+
630
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)
631
933
 
632
934
  let acadDepartmentMap = departmentApi.find(a => a.name === _instructor?.department_name)
633
-
634
935
  let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
635
-
636
936
  let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
637
-
937
+
638
938
  let modifiedById = userMail?._id
639
939
  let createdById = userMail?._id
640
940
 
@@ -642,7 +942,6 @@ const server = {
642
942
  let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
643
943
 
644
944
  let role = _instructor?.role
645
-
646
945
  let isChairPerson = false
647
946
  let isDean = false
648
947
 
@@ -659,6 +958,7 @@ const server = {
659
958
  let employeeNumber = _instructor?.faculty_id
660
959
  let departmentId = _acadDepartment?._id??departmentDefault?._id
661
960
  let campusId = campusMap?._id??_campusDefault?._id
961
+ let userId = findUser?._id
662
962
 
663
963
  if(uNum.has(employeeNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uDept.has(departmentId) && uCamp.has(campusId)){
664
964
  const errorMsg = `Duplicate Payload Found: [${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [departmentId: ${departmentId}, campusId:${campusId}]`
@@ -696,11 +996,12 @@ const server = {
696
996
  isChairPerson,
697
997
  modifiedById,
698
998
  createdById,
999
+ userId
699
1000
  })
700
1001
  }
701
1002
 
702
1003
  } catch (error) {
703
- logger.error(`Error occurred: ${error} ${error.stack}`);
1004
+ logger.error(`Error occurred: ${error} ${error.stack}`);
704
1005
  }
705
1006
  }
706
1007
 
@@ -715,7 +1016,6 @@ const server = {
715
1016
 
716
1017
  }
717
1018
 
718
-
719
1019
  console.log("");
720
1020
  console.log("########################################################")
721
1021
  console.log("")
@@ -821,6 +1121,10 @@ const server = {
821
1121
  let campusId = campus?._id??null
822
1122
  let departmentId = _department?._id??null
823
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
824
1128
 
825
1129
 
826
1130
  if(uCode.has(code) && uName.has(name) && uMajor.has(major) && uCampus.has(campusId) && uDept.has(departmentId)){
@@ -853,7 +1157,11 @@ const server = {
853
1157
  campusId: campus?._id??campusDefault?._id,
854
1158
  departmentId: _department?._id??departmentDefault?._id,
855
1159
  modifiedById,
856
- createdById
1160
+ createdById,
1161
+ migratedAt,
1162
+ migratedTable,
1163
+ referenceId,
1164
+ isMigrated
857
1165
  })
858
1166
  }
859
1167
 
@@ -967,6 +1275,11 @@ const server = {
967
1275
  let modifiedById = userMail?._id
968
1276
  let createdById = userMail?._id
969
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
+
970
1283
  let name = _room?.name
971
1284
  let campusId = _campus?._id??_campusDefault?._id??null
972
1285
 
@@ -995,7 +1308,11 @@ const server = {
995
1308
  campusId: _campus?._id??_campusDefault?._id??campusesDefault._id,
996
1309
  capacity,
997
1310
  modifiedById,
998
- createdById
1311
+ createdById,
1312
+ migratedAt,
1313
+ migratedTable,
1314
+ referenceId,
1315
+ isMigrated
999
1316
  })
1000
1317
  }
1001
1318
 
@@ -1091,6 +1408,11 @@ const server = {
1091
1408
  let modifiedById = userMail?._id
1092
1409
  let createdById = userMail?._id
1093
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
+
1094
1416
 
1095
1417
  if(uFrom.has(from) && uTo.has(to)){
1096
1418
  const errorMsg = `Duplicate Payload Found: [${from} - ${to}]`
@@ -1117,7 +1439,11 @@ const server = {
1117
1439
  to,
1118
1440
  modifiedById,
1119
1441
  createdById,
1120
- default: isDefault
1442
+ default: isDefault,
1443
+ migratedAt,
1444
+ migratedTable,
1445
+ referenceId,
1446
+ isMigrated
1121
1447
  })
1122
1448
  }
1123
1449
 
@@ -1245,6 +1571,11 @@ const server = {
1245
1571
  let departmentId = _department?._id??departmentDefault?._id
1246
1572
  let description = _description
1247
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
+
1248
1579
  if(uCode.has(code) && uName.has(name) && uDescription.has(description) && uUnits.has(units) && uDept.has(departmentId)){
1249
1580
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name} [units: ${units}, departmentId: ${departmentId}]`
1250
1581
  if(!uniqueErrors.has(errorMsg)){
@@ -1277,10 +1608,10 @@ const server = {
1277
1608
  description,
1278
1609
  modifiedById,
1279
1610
  createdById,
1280
- // migratedAt,
1281
- // migratedTable,
1282
- // referenceId,
1283
- // isMigrated
1611
+ migratedAt,
1612
+ migratedTable,
1613
+ referenceId,
1614
+ isMigrated
1284
1615
  })
1285
1616
  }
1286
1617
 
@@ -1393,6 +1724,11 @@ const server = {
1393
1724
 
1394
1725
  let days = null
1395
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
+
1396
1732
  if (dayHandler.length > 1) {
1397
1733
  days = dayHandler[0].split('').map(day => dayMappings[day]).join(', ');
1398
1734
  } else {
@@ -1431,12 +1767,11 @@ const server = {
1431
1767
  to : etFormat??to,
1432
1768
  days,
1433
1769
  modifiedById,
1434
- createdById
1435
-
1436
- // migratedAt,
1437
- // migratedTable,
1438
- // referenceId,
1439
- // isMigrated
1770
+ createdById,
1771
+ migratedAt,
1772
+ migratedTable,
1773
+ referenceId,
1774
+ isMigrated
1440
1775
  })
1441
1776
  }
1442
1777
  } catch (error) {
@@ -1479,6 +1814,7 @@ const server = {
1479
1814
  },
1480
1815
 
1481
1816
  async Student(){
1817
+ let userIds = []
1482
1818
  try {
1483
1819
  console.log("");
1484
1820
  console.log("########################################################")
@@ -1487,8 +1823,15 @@ const server = {
1487
1823
  console.log("");
1488
1824
 
1489
1825
  const db_schema = schema
1826
+ let maxIdsU = await Users.max('_id'); //Fetch maximum _id directly from the Users model
1490
1827
  let maxIds = await Students.max('_id'); // Fetch maximum _id directly from the Students model
1828
+
1491
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
+
1492
1835
  await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Students__id_seq"`);
1493
1836
  await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Students__id_seq" RESTART WITH ${maxId + 1}`);
1494
1837
 
@@ -1509,7 +1852,18 @@ const server = {
1509
1852
  let errorCounter = 0
1510
1853
  let uniqueErrors = new Set()
1511
1854
 
1512
- 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]))
1513
1867
 
1514
1868
  let uNum = new Set()
1515
1869
  let uLname = new Set()
@@ -1532,10 +1886,237 @@ const server = {
1532
1886
  let _campus = campusSeq.find(a => a.name === _student?.campus)
1533
1887
  let _course = courseSeq.find(b => b.name === _student?.course)
1534
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
+ }
1535
2002
 
1536
- 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
+ },
2064
+
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]
1537
2114
 
1538
- let email = `${_student?.student_number}_${getLastName}@${emailDomain}`;
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)
1539
2120
 
1540
2121
  let modifiedById = userMail?._id
1541
2122
  let createdById = userMail?._id
@@ -1557,6 +2138,12 @@ const server = {
1557
2138
  let courseId = _course?._id??courseDefault?._id
1558
2139
  let campusId = _campus?._id??campusDefault?._id
1559
2140
 
2141
+ let getUserName = Mixins.generateUsername(firstName, lastName)
2142
+ let email = `${getUserName}@msumarinduque.edu.ph`
2143
+
2144
+ let userId = findUser?._id
2145
+
2146
+
1560
2147
  if(uNum.has(studentNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uCourse.has(courseId) && uCampus.has(campusId)){
1561
2148
  const errorMsg = `Duplicate Payload Found: [${studentNumber}] - ${lastName}, ${firstName} ${middleName} [courseId: ${courseId}, campusId:${campusId}]`
1562
2149
  if(!uniqueErrors.has(errorMsg)){
@@ -1594,6 +2181,7 @@ const server = {
1594
2181
  admittedSemId: _semester?._id ?? null,
1595
2182
  modifiedById,
1596
2183
  createdById,
2184
+ userId
1597
2185
  })
1598
2186
  }
1599
2187
 
@@ -1653,6 +2241,7 @@ const server = {
1653
2241
 
1654
2242
  const subjectApi = await api.Subject();
1655
2243
  const instructorApi = await api.Instructor()
2244
+ const sectionApi = await api.Section()
1656
2245
 
1657
2246
  const subjectSeq = await Subjects.findAll();
1658
2247
  const instructorSeq = await Instructors.findAll()
@@ -1709,6 +2298,8 @@ const server = {
1709
2298
  let _insdepartment = acadDeptSeq.find(idep => idep.name === _instructor?.department_name)
1710
2299
 
1711
2300
 
2301
+ let _sections = sectionApi.find(sect => sect.name === sections)
2302
+
1712
2303
  if (!_subject) {
1713
2304
  // console.error(`Subject with code ${subjects} not found.`);
1714
2305
  continue;
@@ -1743,6 +2334,11 @@ const server = {
1743
2334
  let departmentId = _insdepartment?._id??null
1744
2335
  let campusId = _campus?._id??null
1745
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
+
1746
2342
 
1747
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)){
1748
2344
  const errorMsg = `Duplicate Payload Found: [${code}] - ${name} [subjectId: ${subjectId}, instructorId: ${instructorId}]`
@@ -1784,6 +2380,10 @@ const server = {
1784
2380
  departmentId: _insdepartment?._id??null,
1785
2381
  modifiedById,
1786
2382
  createdById,
2383
+ migratedAt,
2384
+ migratedTable,
2385
+ referenceId,
2386
+ isMigrated
1787
2387
  })
1788
2388
  }
1789
2389
 
@@ -1906,6 +2506,11 @@ const server = {
1906
2506
  let modifiedById = userMail?._id;
1907
2507
  let createdById = userMail?._id;
1908
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
+
1909
2514
  for (let j = 0; j < _students.length; j++){
1910
2515
  let instrcutor = _students[j].faculty_id
1911
2516
  let sections = _students[j].section_name
@@ -1975,6 +2580,7 @@ const server = {
1975
2580
  remarks = "FAILED"
1976
2581
  overAllStatus = "FAILED"
1977
2582
  }
2583
+
1978
2584
 
1979
2585
  let studentId = student?._id
1980
2586
  let courseId = course?._id
@@ -2124,6 +2730,11 @@ const server = {
2124
2730
  let modifiedById = userMail?._id;
2125
2731
  let createdById = userMail?._id;
2126
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
+
2127
2738
  for (let j = 0; j < _students.length; j++){
2128
2739
 
2129
2740
  let instrcutor = _students[j].faculty_id
@@ -2218,6 +2829,10 @@ const server = {
2218
2829
  overAllStatus,
2219
2830
  createdById,
2220
2831
  modifiedById,
2832
+ migratedAt,
2833
+ migratedTable,
2834
+ // referenceId,
2835
+ isMigrated
2221
2836
  },
2222
2837
  default:{
2223
2838
 
@@ -2310,10 +2925,12 @@ module.exports = {
2310
2925
  AcademicDepartments: server.AcademicDepartment,
2311
2926
  Course: server.Course,
2312
2927
  Room: server.Room,
2928
+ UserInstructor: server.UserInstructor,
2313
2929
  Instructor: server.Instructor,
2314
2930
  AcademicYear: server.AcademicYear,
2315
2931
  Subject: server.Subject,
2316
2932
  Schedule: server.Schedule,
2933
+ UserStudents: server.UserStudents,
2317
2934
  Student: server.Student,
2318
2935
  Section: server.Section,
2319
2936
  EnrolledStudent: server.EnrolledStudent,