lms-sync 1.0.83 → 1.0.85

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,6 +4,7 @@ const api = require('../apiConnections/apiConnects')
4
4
  const moment = require('moment')
5
5
  const { Picked } = require('./semesterPick')
6
6
  const Mixins = require('../utils/Mixins')
7
+ const bcrypt = require('bcrypt');
7
8
 
8
9
  const {
9
10
  AcademicDepartments,
@@ -746,13 +747,17 @@ const server = {
746
747
  let referenceId = _instructor?.id // id of the data
747
748
  let isMigrated = true
748
749
 
750
+ const saltRounds = 10; // Number of salt rounds
751
+
749
752
  let firstName = _instructor?.first_name
750
753
  let lastName = _instructor?.last_name
751
754
  let middleName = _instructor?.middle_name
752
755
  let getUserName = Mixins.generateUsername(firstName, lastName)
753
756
  let email = `${getUserName}@msumarinduque.edu.ph`
754
- let password = `${getUserName}`
755
- let temporaryPassword = password
757
+ let password = getUserName
758
+ const hashedPassword = await bcrypt.hash(password, saltRounds);
759
+
760
+ let temporaryPassword = getUserName
756
761
  let adminScopes = []
757
762
 
758
763
  let employeeNumber = _instructor?.faculty_id
@@ -792,8 +797,8 @@ const server = {
792
797
  firstName: _instructor?.first_name,
793
798
  lastName: _instructor?.last_name,
794
799
  middleName: _instructor?.middle_name,
795
- password: password,
796
- temporaryPassword: password,
800
+ password: hashedPassword,
801
+ temporaryPassword: getUserName,
797
802
  email,
798
803
  modifiedById,
799
804
  createdById,
@@ -1975,10 +1980,6 @@ const server = {
1975
1980
  const yearDefault = await AcademicYears.findOne({ where: { from: 1799, to: 1800 } });
1976
1981
  const semeDefault = await Semesters.findOne({ where: { code: '1st Semester' }});
1977
1982
 
1978
-
1979
-
1980
-
1981
-
1982
1983
  let createdCounter = 0
1983
1984
  let errorCounter = 0
1984
1985
  let uniqueErrors = new Set()
@@ -2038,6 +2039,8 @@ const server = {
2038
2039
  let defSem = semeDefault?._id
2039
2040
  let defYear = yearDefault?._id
2040
2041
 
2042
+ const saltRounds = 10; // Number of salt rounds
2043
+
2041
2044
  let studentNumber = _student?.student_number
2042
2045
  let firstName = _student?.first_name
2043
2046
  let lastName = _student?.last_name
@@ -2048,7 +2051,9 @@ const server = {
2048
2051
  let getUserName = Mixins.generateUsername(firstName, lastName)
2049
2052
  let email = `${getUserName}@msumarinduque.edu.ph`
2050
2053
  let password = `${getUserName}`
2051
- let temporaryPassword = password
2054
+
2055
+ const hashedPassword = await bcrypt.hash(password, saltRounds);
2056
+ let temporaryPassword = getUserName
2052
2057
  let adminScopes = []
2053
2058
 
2054
2059
  let migratedAt = new Date() //present date of the migration
@@ -2056,6 +2061,8 @@ const server = {
2056
2061
  let referenceId = _student?.id // id of the data
2057
2062
  let isMigrated = true
2058
2063
 
2064
+
2065
+
2059
2066
  if(uEmail.has(email) && uPass.has(password) && uTPass.has(temporaryPassword) && uULname.has(lastName) && uUFname.has(firstName) && uUMname.has(middleName) && uScopes.has(adminScopes)){
2060
2067
  const errorMsg = `Duplicate Payload Found: [${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`
2061
2068
  if(!uniqueErrors.has(errorMsg)){
@@ -2085,8 +2092,8 @@ const server = {
2085
2092
  firstName: _student?.first_name,
2086
2093
  lastName: _student?.last_name,
2087
2094
  middleName: _student?.middle_name,
2088
- password: password,
2089
- temporaryPassword: password,
2095
+ password: hashedPassword,
2096
+ temporaryPassword: getUserName,
2090
2097
  email,
2091
2098
  modifiedById,
2092
2099
  createdById,
@@ -656,6 +656,339 @@ const server = {
656
656
  }
657
657
  },
658
658
 
659
+ async Instructor(){
660
+ let userIds = []
661
+ await db.sequelize.query('DROP FUNCTION IF EXISTS pg_temp.testfunc()');
662
+
663
+ try {
664
+ console.log("");
665
+ console.log("########################################################")
666
+ console.log(" Instructors Migrations ")
667
+ console.log("########################################################")
668
+ console.log("");
669
+
670
+ const db_schema = schema
671
+ let maxIds = await Users.max('_id'); //Fetch maximum _id directly from the Users model
672
+ let maxIdsIns = await Instructors.max('_id'); //Fetch maximum _id directly from the Users model
673
+
674
+ // console.log('maxIdsIns :>> ', maxIdsIns);
675
+
676
+ let maxId = maxIds|| 0;
677
+ let maxIdIns = maxIdsIns|| 0;
678
+
679
+ // console.log('maxIdIns :>> ', maxIdIns);
680
+
681
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Users__id_seq"`);
682
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Users__id_seq" RESTART WITH ${maxId + 1}`);
683
+
684
+ await db.sequelize.query(`CREATE SEQUENCE IF NOT EXISTS ${db_schema}."Instructors__id_seq"`);
685
+ await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Instructors__id_seq" RESTART WITH ${maxIdIns + 1}`);
686
+ await db.sequelize.query(`DROP FUNCTION IF EXISTS ${db_schema}."pg_temp.testfunc()"`);
687
+
688
+ const instructorApi = await api.Instructor()
689
+ const departmentApi = await api.Department()
690
+
691
+ let userDefPayload = {
692
+ email: 'ccci_integrator@gmail.com',
693
+ password: '$2a$12$Q.h3Q9IN6vsIxGBa/EgfOOABeXTcwxt4t9cu4nqAK.nczGRRtZJUS',
694
+ temporaryPassword: 'P@ssw0rd123',
695
+ firstName: 'Androi',
696
+ lastName: 'Pamisaran',
697
+ adminScopes: [],
698
+ createdAt: new Date(),
699
+ updatedAt: new Date()
700
+ };
701
+
702
+ let [userDefault, createdUser] = await Users.findOrCreate({
703
+ where: { email: userDefPayload.email },
704
+ defaults: userDefPayload
705
+ });
706
+
707
+ const departmentSeq = await AcademicDepartments.findAll()
708
+ const campusSeq = await Campuses.findAll()
709
+ const employeeSeq = await Employees.findAll()
710
+ const userSeq = await Users.findAll()
711
+
712
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
713
+ if (!userMail){}
714
+
715
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
716
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
717
+
718
+ let defaultPayload = {
719
+ firstName: 'Instructor',
720
+ lastName: 'Default',
721
+ middleName: 'Migration',
722
+ employeeNumber: '_Instructor',
723
+ departmentId: departmentDefault?._id,
724
+ campusId: campusDefault?._id,
725
+ modifiedById: userMail?._id,
726
+ createdById: userMail?._id
727
+ };
728
+
729
+ let [defaults, createddef] = await Instructors.findOrCreate({
730
+ where: { employeeNumber: defaultPayload.employeeNumber, lastName: defaultPayload.lastName},
731
+ defaults: defaultPayload
732
+ });
733
+
734
+ let createdCounter = 0
735
+ let errorCounter = 0
736
+ let uniqueErrors = new Set()
737
+
738
+ let uEmail = new Set()
739
+ let uPass = new Set()
740
+ let uTPass = new Set()
741
+ let uULname = new Set()
742
+ let uUFname = new Set()
743
+ let uUMname = new Set()
744
+ let uScopes = new Set()
745
+
746
+ let newUser = []
747
+
748
+ const exUser = await Users.findAll()
749
+ const exUserMap = new Map(exUser.map(usr => [`[${usr.email} - ${usr.password} ${usr.temporaryPassword}] - ${usr.lastName}, ${usr.firstName} ${usr.middleName} ${usr.adminScopes}`, usr]))
750
+
751
+ let uDept = new Set()
752
+ let uCamp = new Set()
753
+ let uLname = new Set()
754
+ let uMname = new Set()
755
+ let uFname = new Set()
756
+ let uNum = new Set()
757
+
758
+ let newInstructor = []
759
+
760
+ const exInst = await Instructors.findAll()
761
+ const exInstMap = new Map(exInst.map(inst => [`[${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [${inst.departmentId}, ${inst.campusId}]` , inst]))
762
+
763
+ for (let i = 0; i < instructorApi.length; i++){
764
+ try {
765
+ let _instructor = instructorApi[i]
766
+
767
+ let acadDepartmentMap = departmentApi.find(a => a.name === _instructor?.department_name)
768
+ let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
769
+ let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
770
+
771
+ let employeeFind = employeeSeq.find(emps => emps.employeeNumber === _instructor?.faculty_id)
772
+ let userFind = userSeq.find(eus => eus._id === employeeFind?.userId)
773
+ let _userFind = userSeq.find(e => e.firstName === _instructor?.first_name && e.middleName === _instructor?.middle_name && e.lastName === _instructor?.last_name)
774
+
775
+ // console.log('userFind :>> ', userFind);
776
+
777
+ if(!employeeFind){}
778
+ if(!userFind){}
779
+
780
+ let modifiedById = userMail?._id
781
+ let createdById = userMail?._id
782
+
783
+ let campusDefault = "MSC - Boac Campus"
784
+ let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
785
+
786
+ let role = _instructor?.role
787
+ let isChairPerson = false
788
+ let isDean = false
789
+
790
+ if(role === "Program Chair"){
791
+ isChairPerson = true
792
+ }
793
+ if(role === "Dean"){
794
+ isDean = true
795
+ }
796
+
797
+ let migratedAt = new Date() //present date of the migration
798
+ let migratedTable = 'Instructors' // sql counterpart main table
799
+ let referenceId = _instructor?.id // id of the data
800
+ let isMigrated = true
801
+
802
+ let firstName = _instructor?.first_name
803
+ let lastName = _instructor?.last_name
804
+ let middleName = _instructor?.middle_name
805
+ let getUserName = Mixins.generateUsername(firstName, lastName)
806
+ let email = `${getUserName}@msumarinduque.edu.ph`
807
+ let password = `${getUserName}`
808
+ let temporaryPassword = password
809
+ let adminScopes = []
810
+
811
+ let employeeNumber = _instructor?.faculty_id
812
+ let departmentId = _acadDepartment?._id??departmentDefault?._id
813
+ let campusId = campusMap?._id??_campusDefault?._id
814
+ let employeeId = employeeFind?._id??null
815
+ let userId = userFind?._id??_userFind?._id
816
+
817
+ // console.log('userId :>> ', userId);
818
+
819
+ let [record, created] = await Users.findOrCreate({
820
+ where: {
821
+ firstName: _instructor?.first_name,
822
+ lastName: _instructor?.last_name,
823
+ middleName: _instructor?.middle_name,
824
+ password: password,
825
+ temporaryPassword: password,
826
+ email,
827
+ modifiedById,
828
+ createdById,
829
+ adminScopes,
830
+ migratedAt,
831
+ migratedTable,
832
+ // referenceId,
833
+ isMigrated,
834
+ },
835
+ defaults:{
836
+
837
+ }
838
+ })
839
+
840
+ if(created){
841
+ console.log('record.password :>> ', record.password);
842
+ }
843
+ // if(uEmail.has(email) && uPass.has(password) && uTPass.has(temporaryPassword) && uULname.has(lastName) && uUFname.has(firstName) && uUMname.has(middleName) && uScopes.has(adminScopes)){
844
+ // const errorMsg = `Duplicate Payload Found: [${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`
845
+ // if(!uniqueErrors.has(errorMsg)){
846
+ // // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
847
+ // uniqueErrors.add(errorMsg)
848
+ // // errorCounter++
849
+ // }
850
+ // }
851
+ // else if (exUserMap.has(`[${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`)){
852
+ // const exUser = exUserMap.get(`[${email} - ${password} ${temporaryPassword}] - ${lastName}, ${firstName} ${middleName} ${adminScopes}`)
853
+ // const errorMsg = `Existing Data Found: [${exUser.email} - ${exUser.password} ${exUser.temporaryPassword}] - ${exUser.lastName}, ${exUser.firstName} ${exUser.middleName} ${exUser.adminScopes}`
854
+ // if(!uniqueErrors.has(errorMsg)){
855
+ // // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
856
+ // uniqueErrors.add(errorMsg)
857
+ // // errorCounter++
858
+ // }
859
+ // }
860
+ // else{
861
+ // uEmail.add(email)
862
+ // uPass.add(password)
863
+ // uTPass.add(temporaryPassword)
864
+ // uULname.add(lastName)
865
+ // uUFname.add(firstName)
866
+ // uUMname.add(middleName)
867
+ // uScopes.add(adminScopes)
868
+ // newUser.push({
869
+ // firstName: _instructor?.first_name,
870
+ // lastName: _instructor?.last_name,
871
+ // middleName: _instructor?.middle_name,
872
+ // password: password,
873
+ // temporaryPassword: password,
874
+ // email,
875
+ // modifiedById,
876
+ // createdById,
877
+ // adminScopes,
878
+ // migratedAt,
879
+ // migratedTable,
880
+ // // referenceId,
881
+ // isMigrated,
882
+ // })
883
+ // }
884
+
885
+
886
+
887
+
888
+ // if(uNum.has(employeeNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uDept.has(departmentId) && uCamp.has(campusId)){
889
+ // const errorMsg = `Duplicate Payload Found: [${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [departmentId: ${departmentId}, campusId:${campusId}]`
890
+ // if(!uniqueErrors.has(errorMsg)){
891
+ // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
892
+ // uniqueErrors.add(errorMsg)
893
+ // errorCounter++
894
+ // }
895
+ // }
896
+ // else if ( exInstMap.has(`[${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [${departmentId}, ${campusId}]`)){
897
+ // const exInst = exInstMap.get(`[${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [${departmentId}, ${campusId}]`)
898
+ // const errorMsg = `Existing Data Found:[${exInst.employeeNumber}] - ${exInst.lastName}, ${exInst.firstName} ${exInst.middleName} [departmentId: ${exInst.departmentId}, campusId: ${exInst.campusId}]`
899
+ // if(!uniqueErrors.has(errorMsg)){
900
+ // logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
901
+ // uniqueErrors.add(errorMsg)
902
+ // errorCounter++
903
+ // }
904
+ // }
905
+ // else{
906
+ // uNum.add(employeeNumber)
907
+ // uLname.add(lastName)
908
+ // uFname.add(firstName)
909
+ // uMname.add(middleName)
910
+ // uDept.add(departmentId)
911
+ // uCamp.add(campusId)
912
+ // newInstructor.push({
913
+ // firstName: _instructor?.first_name,
914
+ // lastName: _instructor?.last_name,
915
+ // middleName: _instructor?.middle_name,
916
+ // employeeNumber: _instructor?.faculty_id,
917
+ // departmentId: _acadDepartment?._id??departmentDefault?._id,
918
+ // academicDepartmentId: _acadDepartment?._id??departmentDefault?._id,
919
+ // campusId: campusMap?._id??_campusDefault?._id??campusDefault?._id,
920
+ // isDean,
921
+ // isChairPerson,
922
+ // modifiedById,
923
+ // createdById,
924
+ // migratedAt,
925
+ // migratedTable,
926
+ // // referenceId,
927
+ // isMigrated,
928
+ // userId: userId || null,
929
+ // employeeId,
930
+ // })
931
+ // }
932
+
933
+ } catch (error) {
934
+ logger.error(`Error occurred: ${error} ${error.stack}`);
935
+ }
936
+ }
937
+
938
+ // if (newUser.length > 0) {
939
+ // const createdUser = await Users.bulkCreate(newUser, {returning: true})
940
+ // userIds = createdUser.map(_user => _user._id) // Remove const or let
941
+ // // createdCounter += newUser.length
942
+ // newUser.forEach((user, index) => {
943
+ // // 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}`)
944
+ // });
945
+ // }
946
+
947
+
948
+ // if (newInstructor.length > 0) {
949
+ // // Associate userIds with new instructors
950
+ // // if(!newInstructor.userId){
951
+ // // newInstructor = newInstructor.map((inst, index) => ({
952
+ // // ...inst,
953
+ // // userId: userIds[index]
954
+ // // }));
955
+ // // }
956
+ // await Instructors.bulkCreate(newInstructor);
957
+ // createdCounter += newInstructor.length;
958
+
959
+ // newInstructor.forEach((inst, index) => {
960
+ // logger.info(`${index + 1}/${index + 1}: New Instructor Record Created: [${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [ departmentId: ${inst.departmentId}, campusId: ${inst.campusId}]`);
961
+ // });
962
+ // }
963
+
964
+
965
+
966
+ console.log("");
967
+ console.log("########################################################")
968
+ console.log("")
969
+ logger.info('Instructors Data Migration Completed');
970
+ logger.info(`Total Successful Instructors Records Created: ${createdCounter}/${createdCounter}`);
971
+ logger.info(`Total Existing Instructors Records: ${errorCounter}/${errorCounter}`);
972
+ logger.info(`Total Records: ${createdCounter + errorCounter}`);
973
+ console.log("")
974
+ console.log("########################################################")
975
+ console.log("")
976
+
977
+ let totalSummary = {
978
+ itemLength: createdCounter + errorCounter,
979
+ error: errorCounter,
980
+ success: createdCounter
981
+ }
982
+ return totalSummary
983
+
984
+ } catch (error) {
985
+ ;
986
+ logger.error(`Error occurred: ${error} ${error.stack} `);
987
+
988
+ }
989
+ },
990
+
991
+
659
992
  async AcademicYear(){
660
993
  try {
661
994
  console.log("");
package/login.json ADDED
@@ -0,0 +1,5 @@
1
+ {
2
+ "email": "ictsc@mscmarinduque.edu.ph",
3
+ "password": "MjU8qweXLaFpDnEyfRrbY9",
4
+ "baseURL": "https://lms.api.msc.priisms.online/api"
5
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lms-sync",
3
- "version": "1.0.83",
3
+ "version": "1.0.85",
4
4
  "description": "Migration App for MSC LMS",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/target.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "host": "188.166.212.92",
3
+ "username": "migration",
4
+ "database": "migration",
5
+ "password": "Admin123",
6
+ "dialect": "postgres",
7
+ "schema": "public_migrations",
8
+ "logging": false
9
+ }