lms-sync 1.0.43 → 1.0.46

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,