lms-sync 1.0.14 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,16 +33,57 @@ const server = {
33
33
  console.log("");
34
34
 
35
35
  const campusApi = await api.Campus()
36
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
36
+
37
+ let userDefPayload = {
38
+ email: 'ccci_integrator@gmail.com',
39
+ password: '$2a$12$Q.h3Q9IN6vsIxGBa/EgfOOABeXTcwxt4t9cu4nqAK.nczGRRtZJUS',
40
+ temporaryPassword: 'P@ssw0rd123',
41
+ firstName: 'Androi',
42
+ lastName: 'Pamisaran',
43
+ };
44
+
45
+ let [userDefault, createdUser] = await Users.findOrCreate({
46
+ where: { email: userDefPayload.email },
47
+ defaults: userDefPayload
48
+ });
49
+
50
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
51
+
52
+ let campusDefPayload = {
53
+ name: 'Campus Default',
54
+ code: 'DEF',
55
+ email: 'campus_default@gmail.com',
56
+ address: 'MSC',
57
+ modifiedById: userMail._id,
58
+ createdById: userMail._id
59
+ };
60
+
61
+ let [defaults, createddef] = await Campuses.findOrCreate({
62
+ where: { name: campusDefPayload.name, code: campusDefPayload.code},
63
+ defaults: campusDefPayload
64
+ });
37
65
 
38
66
  let createdCounter = 0
39
67
  let errorCounter = 0
40
68
  let uniqueErrors = new Set()
41
69
 
42
70
  const db_schema = schema
43
- // let maxIds = await Campuses.max('_id'); = await Campuses.max('_id'); // Fetch maximum _id directly from the campuses model
71
+ // let maxIds = await Campuses.max('_id'); = await Campuses.max('_id'); // Fetch maximum _id directly from the campuses model
44
72
  // let maxId = maxIds|| 0;
45
73
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Campuses__id_seq" RESTART WITH ${maxId + 1}`);
74
+
75
+ // let migratedAt = new Date() //present date of the migration
76
+ // let migratedTable = 'campuses' // sql counterpart main table
77
+ // let referenceId = campusApi.id // id of the data
78
+ // let isMigrated = true
79
+
80
+ let uCode = new Set()
81
+ let uName = new Set()
82
+
83
+ let newCampus = []
84
+
85
+ const existingCampus = await Campuses.findAll()
86
+ const existingCampusMap = new Map(existingCampus.map(campus => [`[${campus.code}] - ${campus.name}`, campus]))
46
87
 
47
88
  for (let i = 0; i < campusApi.length; i++){
48
89
  try {
@@ -52,58 +93,80 @@ const server = {
52
93
  let modifiedById = userMail._id
53
94
  let createdById = userMail._id
54
95
 
55
- let [record, created] = await Campuses.findOrCreate({
56
- where:{
96
+ let name = _campus?.name
97
+ let code = _campus?.code
98
+
99
+ if(uCode.has(code) && uName.has(name)){
100
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
101
+ if(!uniqueErrors.has(errorMsg)){
102
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
103
+ uniqueErrors.add(errorMsg)
104
+ errorCounter++
105
+ }
106
+ }
107
+ else if ( existingCampusMap.has(`[${code}] - ${name}`)){
108
+ const existingCampus = existingCampusMap.get(`[${code}] - ${name}`)
109
+ const errorMsg = `Existing Data Found:[${existingCampus.code}] - ${existingCampus.name}`
110
+ if(!uniqueErrors.has(errorMsg)){
111
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
112
+ uniqueErrors.add(errorMsg)
113
+ errorCounter++
114
+ }
115
+ }
116
+ else{
117
+ uCode.add(code)
118
+ uName.add(name)
119
+ newCampus.push({
57
120
  name: _campus?.name,
58
- code: _campus?.code
59
- },
60
- defaults:{
121
+ code: _campus?.code,
61
122
  email: _campus?.email,
62
123
  address: _campus?.address,
63
124
  modifiedById,
64
- createdById
65
- }
66
- })
67
- if (created){
68
- logger.info(`New campus record created ${createdCounter + 1}/${createdCounter}: [${record.code}] - ${record.name} `)
69
- createdCounter++;
70
- }
71
- else {
72
- const errorMsg = `Record campus already exists: [${record.code}] - ${record.name} `;
73
- if (!uniqueErrors.has(errorMsg)) {
74
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
75
- uniqueErrors.add(errorMsg);
76
- errorCounter++;
77
- }
78
-
125
+ createdById,
126
+ // migratedAt,
127
+ // migratedTable,
128
+ // referenceId,
129
+ // isMigrated
130
+ })
79
131
  }
80
132
 
81
133
  } catch (error) {
82
- logger.error(`Error occurred: ${error}`);
83
- logger.error(`Error occurred: ${error.stack || error}`);
134
+ ;
135
+ logger.error(`Error occurred: ${error.stack} ${error}`);
84
136
  }
85
137
  }
86
138
 
139
+ // bulk create new campus records
140
+ if (newCampus.length > 0) {
141
+ await Campuses.bulkCreate(newCampus)
142
+ createdCounter += newCampus.length
143
+
144
+ newCampus.forEach((campus, index) => {
145
+ logger.info(`${index + 1}/${index + 1}: New Campus Record Created: [${campus.code}], ${campus.name}`)
146
+ });
147
+ }
148
+
87
149
  console.log("");
88
150
  console.log("########################################################")
89
151
  console.log("")
90
- logger.info(' Campus Data Migration Completed');
152
+ logger.info('Campus Data Migration Completed');
91
153
  logger.info(`Total successful Campus records created: ${createdCounter}/${createdCounter}`);
92
154
  logger.info(`Total Campus Error Records: ${errorCounter}/${errorCounter}`);
155
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
93
156
  console.log("")
94
157
  console.log("########################################################")
95
158
  console.log("")
96
159
 
97
160
  let totalSummary = {
98
- itemLength: campusApi.length,
161
+ itemLength: createdCounter + errorCounter,
99
162
  error: errorCounter,
100
163
  success: createdCounter
101
164
  }
102
165
  return totalSummary
103
166
 
104
167
  } catch (error) {
105
- logger.error(`Error occurred: ${error}`);
106
- logger.error(`Error occurred: ${error.stack || error}`);
168
+ ;
169
+ logger.error(`Error occurred: ${error.stack} ${error}`);
107
170
 
108
171
  }
109
172
  },
@@ -120,17 +183,44 @@ const server = {
120
183
  const campusApi = await api.Campus()
121
184
 
122
185
  const campusSeq = await Campuses.findAll()
123
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
186
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
187
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
188
+
189
+ let defaultPayload = {
190
+ name: 'Colleges Default',
191
+ code: 'DefCol',
192
+ campusId: campusDefault._id,
193
+ modifiedById: userMail._id,
194
+ createdById: userMail._id
195
+ };
196
+
197
+ let [defaults, createddef] = await Colleges.findOrCreate({
198
+ where: { name: defaultPayload.name, code: defaultPayload.code},
199
+ defaults: defaultPayload
200
+ });
124
201
 
125
202
  let createdCounter = 0
126
203
  let errorCounter = 0
127
204
  let uniqueErrors = new Set()
128
205
 
129
206
  const db_schema = schema
130
- // let maxIds = await Campuses.max('_id'); = await Colleges.max('_id'); // Fetch maximum _id directly from the Colleges model
207
+ // let maxIds = await Campuses.max('_id'); = await Colleges.max('_id'); // Fetch maximum _id directly from the Colleges model
131
208
  // let maxId = maxIds|| 0;
132
209
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Colleges__id_seq" RESTART WITH ${maxId + 1}`);
133
210
 
211
+ // let migratedAt = new Date() //present date of the migration
212
+ // let migratedTable = 'colleges' // sql counterpart main table
213
+ // let referenceId = collegeApi.id // id of the data
214
+ // let isMigrated = true
215
+
216
+ let uCode = new Set()
217
+ let uName = new Set()
218
+
219
+ let newColleges = []
220
+
221
+ const existingCollege = await Colleges.findAll()
222
+ const existingCollegeMap = new Map(existingCollege.map(college => [`[${college.code}] - ${college.name}`, college]))
223
+
134
224
  for (let i = 0; i < collegeApi.length; i++){
135
225
  try {
136
226
  let _college = collegeApi[i]
@@ -138,64 +228,81 @@ const server = {
138
228
  let campusMap = campusApi.find(a => a.id === _college?.campus_id)
139
229
 
140
230
  let _campus = campusSeq.find(b => b.name === campusMap?.name)
141
-
142
- let campusDefault = 999999
143
231
 
144
232
  let modifiedById = userMail._id
145
233
  let createdById = userMail._id
146
234
 
147
- let [record, created] = await Colleges.findOrCreate({
148
-
149
- where:{
235
+ let name = _college?.name
236
+ let code = _college?.code
237
+
238
+ if(uCode.has(code) && uName.has(name)){
239
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
240
+ if(!uniqueErrors.has(errorMsg)){
241
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
242
+ uniqueErrors.add(errorMsg)
243
+ errorCounter++
244
+ }
245
+ }
246
+ else if ( existingCollegeMap.has(`[${code}] - ${name}`)){
247
+ const existingCollege = existingCollegeMap.get(`[${code}] - ${name}`)
248
+ const errorMsg = `Existing Data Found:[${existingCollege.code}] - ${existingCollege.name}`
249
+ if(!uniqueErrors.has(errorMsg)){
250
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
251
+ uniqueErrors.add(errorMsg)
252
+ errorCounter++
253
+ }
254
+ }
255
+ else{
256
+ uCode.add(code)
257
+ uName.add(name)
258
+ newColleges.push({
150
259
  name: _college?.name,
151
- code: _college?.code
152
- },
153
- defaults:{
154
- campusId: _campus?._id??campusDefault,
260
+ code: _college?.code,
261
+ campusId: _campus?._id??campusDefault?._id,
155
262
  modifiedById,
156
263
  createdById
157
- }
158
- })
159
- if (created){
160
- logger.info(`New college record created ${createdCounter + 1}/${createdCounter + 1}: [${record.code}] - ${record.name} `)
161
- createdCounter++;
162
- }
163
- else {
164
- const errorMsg = `Record college already exists: [${record.code}] - ${record.name} `
165
-
166
- if (!uniqueErrors.has(errorMsg)) {
167
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
168
- uniqueErrors.add(errorMsg);
169
- errorCounter++;
170
- }
264
+ })
171
265
  }
172
266
 
173
267
  } catch (error) {
174
- logger.error(`Error occurred: ${error}`);
175
- logger.error(`Error occurred: ${error.stack || error}`);
268
+ ;
269
+ logger.error(`Error occurred: ${error.stack} ${error}`);
176
270
  }
177
271
  }
178
272
 
273
+ // bulk create new campus records
274
+ if (newColleges.length > 0) {
275
+ await Colleges.bulkCreate(newColleges)
276
+ createdCounter += newColleges.length
277
+
278
+ newColleges.forEach((colleges, index) => {
279
+ logger.info(`${index + 1}/${index + 1}: New Colleges Record Created: [${colleges.code}], ${colleges.name}`)
280
+ });
281
+ }
282
+
283
+ let itemLength = createdCounter + errorCounter;
284
+
179
285
  console.log("");
180
286
  console.log("########################################################")
181
287
  console.log("")
182
- logger.info(' College Data Migration Completed');
288
+ logger.info('College Data Migration Completed');
183
289
  logger.info(`Total successful College records created: ${createdCounter}/${createdCounter}`);
184
290
  logger.info(`Total College Error Records: ${errorCounter}/${errorCounter}`);
291
+ logger.info(`Total records: ${itemLength}`)
185
292
  console.log("")
186
293
  console.log("########################################################")
187
294
  console.log("")
188
295
 
189
296
  let totalSummary = {
190
- itemLength: collegeApi.length,
297
+ itemLength: itemLength,
191
298
  error: errorCounter,
192
299
  success: createdCounter
193
300
  }
194
301
  return totalSummary
195
302
 
196
303
  } catch (error) {
197
- logger.error(`Error occurred: ${error}`);
198
- logger.error(`Error occurred: ${error.stack || error}`);
304
+ ;
305
+ logger.error(`Error occurred: ${error.stack} ${error}`);
199
306
 
200
307
  }
201
308
  },
@@ -211,11 +318,29 @@ const server = {
211
318
  const departmentApi = await api.Department()
212
319
  const campusApi = await api.Campus()
213
320
  const collegeApi = await api.College()
214
-
321
+ const instructorApi = await api.Instructor()
215
322
 
216
323
  const campusSeq = await Campuses.findAll()
217
324
  const collegeSeq = await Colleges.findAll()
218
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
325
+ const departmentSeq = await AcademicDepartments.findAll()
326
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
327
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
328
+ const collegeDefault = await Colleges.findOne({ where: { name: 'Colleges Default' } });
329
+
330
+ let defaultPayload = {
331
+ name: 'AcademicDepartments Default',
332
+ code: 'AcadDeptDef',
333
+ campusId: campusDefault._id,
334
+ collegeId: collegeDefault._id,
335
+ chairPersonId: 99999,
336
+ modifiedById: userMail._id,
337
+ createdById: userMail._id
338
+ };
339
+
340
+ let [defaults, createddef] = await AcademicDepartments.findOrCreate({
341
+ where: { name: defaultPayload.name, code: defaultPayload.code},
342
+ defaults: defaultPayload
343
+ });
219
344
 
220
345
  let createdCounter = 0
221
346
  let errorCounter = 0
@@ -225,326 +350,525 @@ const server = {
225
350
  // let maxIds = await Campuses.max('_id'); = await AcademicDepartments.max('_id'); // Fetch maximum _id directly from the AcademicDepartments model
226
351
  // let maxId = maxIds|| 0;
227
352
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicDepartments__id_seq" RESTART WITH ${maxId + 1}`);
353
+
354
+ let uCode = new Set()
355
+ let uName = new Set()
356
+ let newAcadDept = []
357
+ const exAcadDept = await AcademicDepartments.findAll()
358
+ const exAcadDeptMap = new Map(exAcadDept.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
359
+
360
+ let uCodeTwo = new Set()
361
+ let uNameTwo = new Set()
362
+ let newAcadDeptTwo = []
363
+ const exAcadDeptTwo = await AcademicDepartments.findAll()
364
+ const exAcadDeptMapTwo = new Map(exAcadDeptTwo.map(dept => [`[${dept.code}] - ${dept.name}`, dept]))
365
+
228
366
  for (let i = 0; i < departmentApi.length; i++){
229
367
  try {
230
368
  let _acadDept = departmentApi[i]
231
-
232
-
233
369
  let _college = collegeSeq.find( col => col.code === _acadDept?.code)
234
-
235
370
  let college = collegeApi.find( cols => cols.code === _acadDept?.code)
236
-
237
371
  let _campus = campusApi.find(cam => cam.id === college?.campus_id)
238
-
239
372
  let campus = campusSeq.find(camp => camp.code === _campus?.code)
240
-
241
- let campusDefault = 999999
242
- let collegeDefault = 999999
243
- let chairPersonDefault = 999999
373
+ let chairPersonDefault = 0
374
+ let modifiedById = userMail._id
375
+ let createdById = userMail._id
376
+ let name = _acadDept?.name
377
+ let code = _acadDept?.code
378
+
379
+ if(uCode.has(code) && uName.has(name)){
380
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
381
+ if(!uniqueErrors.has(errorMsg)){
382
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
383
+ uniqueErrors.add(errorMsg)
384
+ errorCounter++
385
+ }
386
+ }
387
+ else if ( exAcadDeptMap.has(`[${code}] - ${name}`)){
388
+ const exAcadDept = exAcadDeptMap.get(`[${code}] - ${name}`)
389
+ const errorMsg = `Existing Data Found:[${exAcadDept.code}] - ${exAcadDept.name}`
390
+ if(!uniqueErrors.has(errorMsg)){
391
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
392
+ uniqueErrors.add(errorMsg)
393
+ errorCounter++
394
+ }
395
+ }
396
+ else{
397
+ uCode.add(code)
398
+ uName.add(name)
399
+ newAcadDept.push({
400
+ name: _acadDept?.name,
401
+ code: _acadDept?.code,
402
+ collegeId: _college?._id??collegeDefault?._id,
403
+ campusId: campus?._id??campusDefault?._id,
404
+ modifiedById,
405
+ createdById
406
+ })
407
+ }
408
+ } catch (error) {
409
+ logger.error(`Error occurred: ${error.stack} ${error}`);
410
+ }
411
+ }
412
+ if (newAcadDept.length > 0) {
413
+ await AcademicDepartments.bulkCreate(newAcadDept)
414
+ createdCounter += newAcadDept.length
415
+
416
+ newAcadDept.forEach((dept, index) => {
417
+ logger.info(`${index + 1}/${index + 1}: New Academic Department Record Created: [${dept.code}], ${dept.name}`)
418
+ });
419
+ }
244
420
 
421
+
422
+ //additional departments from instructors api
423
+ for (let j = 0; j < instructorApi.length; j++) {
424
+ try {
425
+ let instructor = instructorApi[j];
245
426
  let modifiedById = userMail._id
246
427
  let createdById = userMail._id
247
428
 
429
+ let acadDepartmentMap = departmentApi.find(a => a.name === instructor?.department_name)
248
430
 
249
- let [record, created] = await AcademicDepartments.findOrCreate({
431
+ let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
250
432
 
251
- where:{
252
- name: _acadDept?.name,
253
- code: _acadDept?.code
254
- },
255
- defaults:{
256
- collegeId: _college?._id??collegeDefault,
257
- campusId: campus?._id??campusDefault,
258
- chairPersonId: chairPersonDefault,
259
- modifiedById,
260
- createdById
433
+ let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
434
+
435
+ let campusDefault = "MSC - Boac Campus"
436
+ let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
437
+
438
+ let code = instructor?.department_name ?? 'CODE'
439
+ code = code.split(/\s+/).map((word) => word.charAt(0).toUpperCase()).join('')
440
+
441
+ let name = instructor?.department_name
442
+
443
+ if(uCodeTwo.has(code) && uNameTwo.has(name)){
444
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
445
+ if(!uniqueErrors.has(errorMsg)){
446
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
447
+ uniqueErrors.add(errorMsg)
448
+ errorCounter++
449
+ }
450
+ }
451
+ else if ( exAcadDeptMapTwo.has(`[${code}] - ${name}`)){
452
+ const exAcadDeptTwo = exAcadDeptMapTwo.get(`[${code}] - ${name}`)
453
+ const errorMsg = `Existing Data Found:[${exAcadDeptTwo.code}] - ${exAcadDeptTwo.name}`
454
+ if(!uniqueErrors.has(errorMsg)){
455
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
456
+ uniqueErrors.add(errorMsg)
457
+ errorCounter++
261
458
  }
262
- })
263
- if (created){
264
- logger.info(`New academic department record created ${createdCounter + 1}/${createdCounter + 1}: [${record.code}] - ${record.name} `)
265
- createdCounter++;
266
459
  }
267
- else {
268
- const errorMsg = `Record academic department already exists: [${record.code}] - ${record.name} `
460
+ else{
461
+ uCodeTwo.add(code)
462
+ uNameTwo.add(name)
463
+ newAcadDeptTwo.push({
464
+ name: instructor?.department_name,
465
+ code: code,
466
+ modifiedById,
467
+ createdById,
468
+ campusId: campusMap?._id??_campusDefault?._id,
469
+ collegeId: collegeDefault?._id,
470
+
471
+ })
472
+ }
269
473
 
270
- if (!uniqueErrors.has(errorMsg)) {
271
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
272
- uniqueErrors.add(errorMsg);
273
- errorCounter++;
274
- }
275
474
 
276
- }
277
-
278
475
  } catch (error) {
279
- logger.error(`Error occurred: ${error}`);
280
- logger.error(`Error occurred: ${error.stack || error}`);
476
+ logger.error(`Error occurred: ${error} ${error.stack}`);
281
477
  }
282
478
  }
479
+ if (newAcadDeptTwo.length > 0) {
480
+ await AcademicDepartments.bulkCreate(newAcadDeptTwo)
481
+ createdCounter += newAcadDeptTwo.length
482
+
483
+ newAcadDeptTwo.forEach((deptTwo, index) => {
484
+ logger.info(`${index + 1}/${index + 1}: New Academic Department Record Created: [${deptTwo.code}], ${deptTwo.name}`)
485
+ });
486
+ }
283
487
 
284
488
  console.log("");
285
489
  console.log("########################################################")
286
490
  console.log("")
287
- logger.info(' Academic Department Data Migration Completed');
491
+ logger.info('Academic Department Data Migration Completed');
288
492
  logger.info(`Total successful Academic Department records created: ${createdCounter}/${createdCounter}`);
289
493
  logger.info(`Total Academic Department Error Records: ${errorCounter}/${errorCounter}`);
494
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
290
495
  console.log("")
291
496
  console.log("########################################################")
292
497
  console.log("")
293
498
 
294
499
  let totalSummary = {
295
- itemLength: departmentApi.length,
500
+ itemLength: createdCounter + errorCounter,
296
501
  error: errorCounter,
297
502
  success: createdCounter
298
503
  }
299
504
  return totalSummary
300
505
 
301
506
  } catch (error) {
302
- logger.error(`Error occurred: ${error}`);
303
- logger.error(`Error occurred: ${error.stack || error}`);
304
-
507
+ logger.error(`Error occurred: ${error} ${error.stack}`);
508
+ logger.error(`Error occurredsss: ${error.stack}`);
305
509
  }
306
510
  },
307
511
 
308
- async Course(){
512
+ async Instructor(){
309
513
  try {
310
514
  console.log("");
311
515
  console.log("########################################################")
312
- console.log(" Courses Migration ")
516
+ console.log(" Instructors Migration ")
313
517
  console.log("########################################################")
314
518
  console.log("");
315
519
 
316
- const studentApi = (await api.Student()).data
317
-
318
- const courseApi = await api.Course()
319
- const collegeApi = await api.College()
520
+ const instructorApi = await api.Instructor()
320
521
  const departmentApi = await api.Department()
321
-
322
- const acadDeptSeq = await AcademicDepartments.findAll()
323
522
 
523
+ const departmentSeq = await AcademicDepartments.findAll()
324
524
  const campusSeq = await Campuses.findAll()
325
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
525
+ const instructorSeq = await Instructors.findAll()
526
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
527
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
528
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
529
+
530
+ let defaultPayload = {
531
+ firstName: 'Instructor',
532
+ lastName: 'Default',
533
+ middleName: 'Migration',
534
+ employeeNumber: '_Instructor',
535
+ departmentId: departmentDefault?._id,
536
+ campusId: campusDefault?._id,
537
+ modifiedById: userMail._id,
538
+ createdById: userMail._id
539
+ };
540
+
541
+ let [defaults, createddef] = await Instructors.findOrCreate({
542
+ where: { employeeNumber: defaultPayload.employeeNumber, lastName: defaultPayload.lastName},
543
+ defaults: defaultPayload
544
+ });
326
545
 
327
546
  let createdCounter = 0
328
547
  let errorCounter = 0
329
548
  let uniqueErrors = new Set()
330
549
 
550
+
331
551
  const db_schema = schema
332
- // let maxIds = await Campuses.max('_id'); = await Courses.max('_id'); // Fetch maximum _id directly from the Courses model
552
+ // let maxIds = await Campuses.max('_id'); = await Instructors.max('_id'); // Fetch maximum _id directly from the Instructors model
333
553
  // let maxId = maxIds|| 0;
334
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Courses__id_seq" RESTART WITH ${maxId + 1}`);
554
+ // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Instructors__id_seq" RESTART WITH ${maxId + 1}`);
335
555
 
336
- for (let i = 0; i < studentApi.length; i++){
337
- try {
556
+ let uDept = new Set()
557
+ let uCamp = new Set()
558
+ let uLname = new Set()
559
+ let uMname = new Set()
560
+ let uFname = new Set()
561
+ let uNum = new Set()
338
562
 
339
- let course = studentApi[i]
340
- let courseCode = courseApi.find(crs => crs.name === course?.course)
341
- let campus = campusSeq.find(camp => camp.name === course?.campus)
563
+ let newInstructor = []
342
564
 
343
- let college = collegeApi.find(col => col.name === course?.college)
344
- let department = departmentApi.find(dep => dep.name === college?.name)
345
- let _department = acadDeptSeq.find(ad => ad.name === department?.name)
565
+ const exInst = await Instructors.findAll()
566
+ const exInstMap = new Map(exInst.map(inst => [`[${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [${inst.departmentId}, ${inst.campusId}]` , inst]))
567
+
568
+ for (let i = 0; i < instructorApi.length; i++){
569
+ try {
570
+ let _instructor = instructorApi[i]
346
571
 
572
+ let acadDepartmentMap = departmentApi.find(a => a.name === _instructor?.department_name)
347
573
 
574
+ let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
348
575
 
349
-
576
+ let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
350
577
 
351
578
  let modifiedById = userMail._id
352
579
  let createdById = userMail._id
353
580
 
354
-
355
- let [record, created] = await Courses.findOrCreate({
356
- where:{
357
- name: course?.course,
358
- code: courseCode?.code,
359
- major: course?.major,
360
- campusId: campus?._id??null,
361
- departmentId: _department?._id??null,
362
- modifiedById,
363
- createdById
364
- },
365
- defaults:{
366
-
367
-
368
- }
369
- })
370
-
371
- if (created) {
372
- logger.info(`New course record created ${createdCounter +1}/${createdCounter +1}: [${record.code}] - ${record.name}, Major in ${record.major}`)
373
- createdCounter++
374
- } else {
581
+ let campusDefault = "MSC - Boac Campus"
582
+ let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
375
583
 
376
- const errorMsg = `Record course already exists: [${record.code}] - ${record.name}, Major in ${record.major}`;
584
+ let role = _instructor?.role
377
585
 
378
- if (!uniqueErrors.has(errorMsg)) {
379
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
380
- uniqueErrors.add(errorMsg);
381
- errorCounter++;
586
+ let isChairPerson = false
587
+ let isDean = false
588
+
589
+ if(role === "Program Chair"){
590
+ isChairPerson = true
591
+ }
592
+ if(role === "Dean"){
593
+ isDean = true
594
+ }
595
+
596
+ let firstName = _instructor?.first_name
597
+ let lastName = _instructor?.last_name
598
+ let middleName = _instructor?.middle_name
599
+ let employeeNumber = _instructor?.faculty_id
600
+ let departmentId = _acadDepartment?._id??departmentDefault?._id
601
+ let campusId = campusMap?._id??_campusDefault?._id
602
+
603
+ if(uNum.has(employeeNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uDept.has(departmentId) && uCamp.has(campusId)){
604
+ const errorMsg = `Duplicate Payload Found: [${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [departmentId: ${departmentId}, campusId:${campusId}]`
605
+ if(!uniqueErrors.has(errorMsg)){
606
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
607
+ uniqueErrors.add(errorMsg)
608
+ errorCounter++
609
+ }
610
+ }
611
+ else if ( exInstMap.has(`[${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [${departmentId}, ${campusId}]`)){
612
+ const exInst = exInstMap.get(`[${employeeNumber}] - ${lastName}, ${firstName} ${middleName} [${departmentId}, ${campusId}]`)
613
+ const errorMsg = `Existing Data Found:[${exInst.employeeNumber}] - ${exInst.lastName}, ${exInst.firstName} ${exInst.middleName} [departmentId: ${exInst.departmentId}, campusId: ${exInst.campusId}]`
614
+ if(!uniqueErrors.has(errorMsg)){
615
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
616
+ uniqueErrors.add(errorMsg)
617
+ errorCounter++
382
618
  }
383
-
619
+ }
620
+ else{
621
+ uNum.add(employeeNumber)
622
+ uLname.add(lastName)
623
+ uFname.add(firstName)
624
+ uMname.add(middleName)
625
+ uDept.add(departmentId)
626
+ uCamp.add(campusId)
627
+ newInstructor.push({
628
+ firstName: _instructor?.first_name,
629
+ lastName: _instructor?.last_name,
630
+ middleName: _instructor?.middle_name,
631
+ employeeNumber: _instructor?.faculty_id,
632
+ departmentId: _acadDepartment?._id??departmentDefault?._id,
633
+ academicDepartmentId: _acadDepartment?._id??departmentDefault?._id,
634
+ campusId: campusMap?._id??_campusDefault?._id??campusDefault?._id,
635
+ isDean,
636
+ isChairPerson,
637
+ modifiedById,
638
+ createdById,
639
+ })
384
640
  }
385
641
 
386
642
  } catch (error) {
387
- logger.error(`Error occurred: ${error}`);
388
- logger.error(`Error occurred: ${error.stack || error}`);
389
- }
643
+ logger.error(`Error occurred: ${error} ${error.stack}`);
644
+ }
645
+ }
646
+
647
+ if (newInstructor.length > 0) {
648
+
649
+ await Instructors.bulkCreate(newInstructor)
650
+ createdCounter += newInstructor.length
651
+
652
+ newInstructor.forEach((inst, index) => {
653
+ logger.info(`${index + 1}/${index + 1}: New Instructor Record Created: [${inst.employeeNumber}] - ${inst.lastName}, ${inst.firstName} ${inst.middleName} [ departmentId: ${inst.departmentId}, campusId: ${inst.campusId}]`)
654
+ });
655
+
390
656
  }
391
657
 
392
658
 
393
659
  console.log("");
394
660
  console.log("########################################################")
395
661
  console.log("")
396
- logger.info(' Course Data Migration Completed');
397
- logger.info(`Total successful Course records created: ${createdCounter}/${createdCounter}`);
398
- logger.info(`Total Course Error Records: ${errorCounter}/${errorCounter}`);
662
+ logger.info('Instructors Data Migration Completed');
663
+ logger.info(`Total successful Instructors records created: ${createdCounter}/${createdCounter}`);
664
+ logger.info(`Total Instructors Error Records: ${errorCounter}/${errorCounter}`);
665
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
666
+
399
667
  console.log("")
400
668
  console.log("########################################################")
401
669
  console.log("")
402
670
 
403
671
  let totalSummary = {
404
- itemLength: courseApi.length,
672
+ itemLength: createdCounter + errorCounter,
405
673
  error: errorCounter,
406
674
  success: createdCounter
407
675
  }
408
-
409
- uniqueErrors.clear();
410
-
411
676
  return totalSummary
412
-
677
+
413
678
  } catch (error) {
414
- logger.error(`Error occurred: ${error}`);
415
- logger.error(`Error occurred: ${error.stack || error}`);
679
+ ;
680
+ logger.error(`Error occurred: ${error} ${error.stack} `);
681
+
416
682
  }
417
683
  },
418
684
 
419
- async Room(){
685
+ async Course(){
420
686
  try {
421
687
  console.log("");
422
688
  console.log("########################################################")
423
- console.log(" Rooms Migration ")
689
+ console.log(" Courses Migration ")
424
690
  console.log("########################################################")
425
691
  console.log("");
426
692
 
427
- const subjectRoom = await api.Subject()
428
- const roomApi = await api.Room()
693
+ const studentApi = (await api.Student()).data
694
+
695
+ const courseApi = await api.Course()
696
+ const collegeApi = await api.College()
697
+ const departmentApi = await api.Department()
698
+
699
+ const acadDeptSeq = await AcademicDepartments.findAll()
429
700
 
430
- const subjectSeq = await Subjects.findAll()
431
701
  const campusSeq = await Campuses.findAll()
432
- const departmentSeq = await AcademicDepartments.findAll()
702
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
703
+ const campusDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
704
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
705
+
706
+ let defaultPayload = {
707
+ name: 'Course Default',
708
+ code: 'CORDEF',
709
+ major: 'Major Course',
710
+ campusId: campusDefault._id,
711
+ departmentId: departmentDefault._id,
712
+ modifiedById: userMail._id,
713
+ createdById: userMail._id
714
+ };
715
+
716
+ let [defaults, createddef] = await Courses.findOrCreate({
717
+ where: { name: defaultPayload.name, code: defaultPayload.code},
718
+ defaults: defaultPayload
719
+ });
433
720
 
434
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
435
721
 
436
722
  let createdCounter = 0
437
723
  let errorCounter = 0
438
724
  let uniqueErrors = new Set()
439
725
 
440
-
441
726
  const db_schema = schema
442
- // let maxIds = await Campuses.max('_id'); = await Rooms.max('_id'); // Fetch maximum _id directly from the Rooms model
727
+ // let maxIds = await Campuses.max('_id'); = await Courses.max('_id'); // Fetch maximum _id directly from the Courses model
443
728
  // let maxId = maxIds|| 0;
444
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Rooms__id_seq" RESTART WITH ${maxId + 1}`);
445
-
446
-
447
- for (let i = 0; i < roomApi.length; i++){
448
- try {
449
- let _room = roomApi[i]
450
-
451
- let _subject = subjectRoom.find(r => r.room_id === _room?.id)
452
- // console.log('_subject :>> ', _subject);
453
-
454
- let _subjects = subjectSeq.find(s => s.name === _subject?.name)
455
- // console.log('_subjects :>> ', _subjects);
456
-
457
-
458
- let _department = departmentSeq.find(dep => dep._id === _subjects?.departmentId)
459
- // console.log('_department :>> ', _department);
729
+ // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Courses__id_seq" RESTART WITH ${maxId + 1}`);
460
730
 
461
731
 
462
- let _campus = campusSeq.find (cam => cam._id === _department?.campusId)
463
- // console.log('_campus :>> ', _campus);
732
+ let uCode = new Set()
733
+ let uName = new Set()
734
+ let uMajor = new Set()
735
+ let uCampus = new Set()
736
+ let uDept = new Set()
464
737
 
738
+ let newCourse = []
465
739
 
466
- let capacity = 50
740
+ const exCourse = await Courses.findAll()
741
+ const exCourseMap = new Map(exCourse.map(course => [`[${course.code}] - ${course.name}, ${course.major} [${course.campusId}, ${course.departmentId}]`, course]))
742
+
467
743
 
468
- let campusDefault = "MSC - Boac Campus"
744
+ for (let i = 0; i < studentApi.length; i++){
745
+ try {
469
746
 
470
- let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
747
+ let course = studentApi[i]
748
+ let courseCode = courseApi.find(crs => crs.name === course?.course)
749
+ let campus = campusSeq.find(camp => camp.name === course?.campus)
471
750
 
472
- // return console.log('campusDefault :>> ', campusDefault);
751
+ let college = collegeApi.find(col => col.name === course?.college)
752
+ let department = departmentApi.find(dep => dep.name === college?.name)
753
+ let _department = acadDeptSeq.find(ad => ad.name === department?.name)
473
754
 
474
755
  let modifiedById = userMail._id
475
756
  let createdById = userMail._id
476
757
 
477
- let [record, created] = await Rooms.findOrCreate({
478
- where:{
479
- name: _room?.name,
480
- campusId: _campus?._id??_campusDefault?._id??null,
481
- },
482
- defaults:{
483
- capacity,
484
- modifiedById,
485
- createdById
758
+ let name = course?.course
759
+ let code = courseCode?.code
760
+ let major = course?.major
761
+ let campusId = campus?._id??null
762
+ let departmentId = _department?._id??null
486
763
 
487
- }
488
- })
489
- if (created){
490
- logger.info(`New room record created ${createdCounter + 1}/${createdCounter + 1}: ${record.name} `)
491
- createdCounter++;
492
- }
493
- else {
494
- const errorMsg = `Record room already exists: ${record.name}`;
495
764
 
496
- if (!uniqueErrors.has(errorMsg)) {
497
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
498
- uniqueErrors.add(errorMsg);
499
- errorCounter++;
500
- }
501
765
 
502
- }
766
+ if(uCode.has(code) && uName.has(name) && uMajor.has(major) && uCampus.has(campusId) && uDept.has(departmentId)){
767
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}, ${major} [campusId: ${campusId}, academicDepartmentId: ${departmentId}]`
768
+ if(!uniqueErrors.has(errorMsg)){
769
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
770
+ uniqueErrors.add(errorMsg)
771
+ errorCounter++
772
+ }
773
+ }
774
+ else if ( exCourseMap.has(`[${code}] - ${name}, ${major} [${campusId}, ${departmentId}]`)){
775
+ const exCourse = exCourseMap.get(`[${code}] - ${name}, ${major} [${campusId}, ${departmentId}]`)
776
+ const errorMsg = `Existing Data Found: [${exCourse.code}] - ${exCourse.name}, ${exCourse.major} [campusId: ${exCourse.campusId}, academicDepartmentId: ${exCourse.departmentId}]`
777
+ if(!uniqueErrors.has(errorMsg)){
778
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
779
+ uniqueErrors.add(errorMsg)
780
+ errorCounter++
781
+ }
782
+ }
783
+ else{
784
+ uCode.add(code)
785
+ uName.add(name)
786
+ uMajor.add(major)
787
+ uCampus.add(campusId)
788
+ uDept.add(departmentId)
789
+ newCourse.push({
790
+ name: course?.course,
791
+ code: courseCode?.code,
792
+ major: course?.major,
793
+ campusId: campus?._id??campusDefault?._id,
794
+ departmentId: _department?._id??departmentDefault?._id,
795
+ modifiedById,
796
+ createdById
797
+ })
798
+ }
503
799
 
504
800
  } catch (error) {
505
- logger.error(`Error occurred: ${error}`);
506
- logger.error(`Error occurred: ${error.stack || error}`);
801
+ ;
802
+ logger.error(`Error occurred: ${error.stack} ${error}`);
507
803
  }
508
804
  }
509
805
 
806
+ if (newCourse.length > 0) {
807
+ await Courses.bulkCreate(newCourse)
808
+ createdCounter += newCourse.length
809
+
810
+ newCourse.forEach((course, index) => {
811
+ logger.info(`${index + 1}/${index + 1}: New Courses Record Created: [${course.code}] - ${course.name}, ${course.major} [courseId: ${course.campusId}, academicDepartmentId: ${course.departmentId}]`)
812
+ });
813
+ }
814
+
815
+
510
816
  console.log("");
511
817
  console.log("########################################################")
512
818
  console.log("")
513
- logger.info(' Room Data Migration Completed');
514
- logger.info(`Total successful Room records created: ${createdCounter}/${createdCounter}`);
515
- logger.info(`Total Room Error Records: ${errorCounter}/${errorCounter}`);
819
+ logger.info('Course Data Migration Completed');
820
+ logger.info(`Total successful Course records created: ${createdCounter}/${createdCounter}`);
821
+ logger.info(`Total Course Error Records: ${errorCounter}/${errorCounter}`);
516
822
  console.log("")
517
823
  console.log("########################################################")
518
824
  console.log("")
519
825
 
520
826
  let totalSummary = {
521
- itemLength: roomApi.length,
827
+ itemLength: courseApi.length,
522
828
  error: errorCounter,
523
829
  success: createdCounter
524
830
  }
525
- return totalSummary
526
831
 
527
- } catch (error) {
528
- logger.error(`Error occurred: ${error}`);
529
- logger.error(`Error occurred: ${error.stack || error}`);
832
+ uniqueErrors.clear();
833
+
834
+ return totalSummary
530
835
 
836
+ } catch (error) {
837
+ ;
838
+ logger.error(`Error occurred: ${error.stack} ${error}`);
531
839
  }
532
840
  },
533
841
 
534
- async Instructor(){
842
+ async Room(){
535
843
  try {
536
844
  console.log("");
537
845
  console.log("########################################################")
538
- console.log(" Instructors Migration ")
846
+ console.log(" Rooms Migration ")
539
847
  console.log("########################################################")
540
848
  console.log("");
541
849
 
542
- const instructorApi = await api.Instructor()
543
- const departmentApi = await api.Department()
850
+ const subjectRoom = await api.Subject()
851
+ const roomApi = await api.Room()
544
852
 
545
- const departmentSeq = await AcademicDepartments.findAll()
853
+ const subjectSeq = await Subjects.findAll()
546
854
  const campusSeq = await Campuses.findAll()
547
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
855
+ const departmentSeq = await AcademicDepartments.findAll()
856
+
857
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
858
+ const campusesDefault = await Campuses.findOne({ where: { name: 'Campus Default' } });
859
+
860
+ let defaultPayload = {
861
+ name: 'Rooms Default',
862
+ campusId: campusesDefault._id,
863
+ capacity: 40,
864
+ modifiedById: userMail._id,
865
+ createdById: userMail._id
866
+ };
867
+
868
+ let [defaults, createddef] = await Rooms.findOrCreate({
869
+ where: { name: defaultPayload.name},
870
+ defaults: defaultPayload
871
+ });
548
872
 
549
873
  let createdCounter = 0
550
874
  let errorCounter = 0
@@ -552,89 +876,104 @@ const server = {
552
876
 
553
877
 
554
878
  const db_schema = schema
555
- // let maxIds = await Campuses.max('_id'); = await Instructors.max('_id'); // Fetch maximum _id directly from the Instructors model
879
+ // let maxIds = await Campuses.max('_id'); = await Rooms.max('_id'); // Fetch maximum _id directly from the Rooms model
556
880
  // let maxId = maxIds|| 0;
557
- // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Instructors__id_seq" RESTART WITH ${maxId + 1}`);
558
-
559
-
560
- for (let i = 0; i < instructorApi.length; i++){
561
- try {
562
- let _instructor = instructorApi[i]
563
-
564
- let acadDepartmentMap = departmentApi.find(a => a.name === _instructor?.department_name)
881
+ // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Rooms__id_seq" RESTART WITH ${maxId + 1}`);
565
882
 
566
- let _acadDepartment = departmentSeq.find(b => b.name === acadDepartmentMap?.name)
883
+ let uName = new Set()
884
+ let uCampus = new Set()
567
885
 
568
- let campusMap = campusSeq.find(c => c._id === _acadDepartment?.campusId)
886
+ let newRoom = []
569
887
 
570
- let academicDepartmentDefault = 999999
888
+ const exRoom = await Rooms.findAll()
889
+ const exRoomMap = new Map(exRoom.map(room => [`[${room.name}] - ${room.campusId}`, room]))
890
+
571
891
 
572
- let modifiedById = userMail._id
573
- let createdById = userMail._id
574
-
892
+ for (let i = 0; i < roomApi.length; i++){
893
+ try {
894
+ let _room = roomApi[i]
895
+
896
+ let _subject = subjectRoom.find(r => r.room_id === _room?.id)
897
+ let _subjects = subjectSeq.find(s => s.name === _subject?.name)
898
+ let _department = departmentSeq.find(dep => dep._id === _subjects?.departmentId)
899
+ let _campus = campusSeq.find (cam => cam._id === _department?.campusId)
575
900
 
901
+ let capacity = 50
576
902
  let campusDefault = "MSC - Boac Campus"
577
903
  let _campusDefault = campusSeq.find(ccc => ccc.name === campusDefault)
578
904
 
579
- let [record, created] = await Instructors.findOrCreate({
580
- where:{
581
- firstName: _instructor?.first_name,
582
- lastName: _instructor?.last_name,
583
- middleName: _instructor?.middle_name,
584
- employeeNumber: _instructor?.faculty_id,
585
- departmentId: _acadDepartment?._id??academicDepartmentDefault,
586
- campusId: campusMap?._id??_campusDefault?._id,
587
- modifiedById,
588
- createdById,
589
- // employeeId: record?._id??null,
905
+ // return console.log('campusDefault :>> ', campusDefault);
590
906
 
907
+ let modifiedById = userMail._id
908
+ let createdById = userMail._id
591
909
 
592
- },
593
- defaults:{
910
+ let name = _room?.name
911
+ let campusId = _campus?._id??_campusDefault?._id??null
594
912
 
595
- }
596
- })
597
- if (created){
598
- logger.info(`New instructor record created ${createdCounter + 1}/${createdCounter + 1}: [${record.employeeNumber}] - ${record.lastName}, ${record.firstName} `)
599
- createdCounter++;
913
+ if(uName.has(name) && uCampus.has(campusId)){
914
+ const errorMsg = `Duplicate Payload Found: [${name}] - campusId: ${campusId}`
915
+ if(!uniqueErrors.has(errorMsg)){
916
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
917
+ uniqueErrors.add(errorMsg)
918
+ errorCounter++
919
+ }
600
920
  }
601
- else {
602
- const errorMsg = `Record instructor already exists: [${record.employeeNumber}] - ${record.lastName}, ${record.firstName}`;
603
-
604
- if (!uniqueErrors.has(errorMsg)) {
605
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
606
- uniqueErrors.add(errorMsg);
607
- errorCounter++;
921
+ else if ( exRoomMap.has(`[${name}] - ${campusId}`)){
922
+ const exRoom = exRoomMap.get(`[${name}] - ${campusId}`)
923
+ const errorMsg = `Existing Data Found:[${exRoom.name}] - campusId: ${exRoom.campusId}`
924
+ if(!uniqueErrors.has(errorMsg)){
925
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
926
+ uniqueErrors.add(errorMsg)
927
+ errorCounter++
608
928
  }
609
-
929
+ }
930
+ else{
931
+ uName.add(name)
932
+ uCampus.add(campusId)
933
+ newRoom.push({
934
+ name: _room?.name,
935
+ campusId: _campus?._id??_campusDefault?._id??campusesDefault._id,
936
+ capacity,
937
+ modifiedById,
938
+ createdById
939
+ })
610
940
  }
611
941
 
612
942
  } catch (error) {
613
- logger.error(`Error occurred: ${error}`);
614
- logger.error(`Error occurred: ${error.stack || error}`);
943
+ ;
944
+ logger.error(`Error occurred: ${error.stack} ${error}`);
615
945
  }
616
946
  }
617
947
 
948
+ if (newRoom.length > 0) {
949
+ await Rooms.bulkCreate(newRoom)
950
+ createdCounter += newRoom.length
951
+
952
+ newRoom.forEach((room, index) => {
953
+ logger.info(`${index + 1}/${index + 1}: New Rooms Record Created: [${room.name}], campusId: ${room.campusId}`)
954
+ });
955
+ }
956
+
618
957
  console.log("");
619
958
  console.log("########################################################")
620
959
  console.log("")
621
- logger.info(' Instructors Data Migration Completed');
622
- logger.info(`Total successful Instructors records created: ${createdCounter}/${createdCounter}`);
623
- logger.info(`Total Instructors Error Records: ${errorCounter}/${errorCounter}`);
960
+ logger.info('Room Data Migration Completed');
961
+ logger.info(`Total successful Room records created: ${createdCounter}/${createdCounter}`);
962
+ logger.info(`Total Room Error Records: ${errorCounter}/${errorCounter}`);
963
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
624
964
  console.log("")
625
965
  console.log("########################################################")
626
966
  console.log("")
627
967
 
628
968
  let totalSummary = {
629
- itemLength: instructorApi.length,
969
+ itemLength: createdCounter + errorCounter,
630
970
  error: errorCounter,
631
971
  success: createdCounter
632
972
  }
633
973
  return totalSummary
634
974
 
635
975
  } catch (error) {
636
- logger.error(`Error occurred: ${error}`);
637
- logger.error(`Error occurred: ${error.stack || error}`);
976
+ logger.error(`Error occurred: ${error.stack} ${error}`);
638
977
 
639
978
  }
640
979
  },
@@ -656,12 +995,19 @@ const server = {
656
995
 
657
996
  const { acadYearResult, currentSchoolYear } = acadYearApi;
658
997
 
659
-
660
998
  const db_schema = schema
661
- // let maxIds = await Campuses.max('_id'); = await AcademicYears.max('_id'); // Fetch maximum _id directly from the AcademicYears model
999
+ // let maxIds = await Campuses.max('_id'); = await AcademicYears.max('_id'); // Fetch maximum _id directly from the AcademicYears model
662
1000
  // let maxId = maxIds|| 0;
663
1001
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."AcademicYears__id_seq" RESTART WITH ${maxId + 1}`);
664
1002
 
1003
+ let uFrom = new Set()
1004
+ let uTo = new Set()
1005
+
1006
+ let newYears = []
1007
+
1008
+ const exYear = await AcademicYears.findAll()
1009
+ const exYearMap = new Map(exYear.map(year => [`[${year.from} - ${year.to}]`, year]))
1010
+
665
1011
 
666
1012
  for (let i = 0; i < acadYearResult.length; i++){
667
1013
  try {
@@ -683,56 +1029,72 @@ const server = {
683
1029
  let modifiedById = userMail._id
684
1030
  let createdById = userMail._id
685
1031
 
686
- let [record, created] = await AcademicYears.findOrCreate({
687
- where:{
1032
+
1033
+ if(uFrom.has(from) && uTo.has(to)){
1034
+ const errorMsg = `Duplicate Payload Found: [${from} - ${to}]`
1035
+ if(!uniqueErrors.has(errorMsg)){
1036
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1037
+ uniqueErrors.add(errorMsg)
1038
+ errorCounter++
1039
+ }
1040
+ }
1041
+ else if ( exYearMap.has(`[${from} - ${to}]`)){
1042
+ const exYear = exYearMap.get(`[${from} - ${to}]`)
1043
+ const errorMsg = `Existing Data Found:[${exYear.from} - ${exYear.to}]`
1044
+ if(!uniqueErrors.has(errorMsg)){
1045
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1046
+ uniqueErrors.add(errorMsg)
1047
+ errorCounter++
1048
+ }
1049
+ }
1050
+ else{
1051
+ uFrom.add(from)
1052
+ uTo.add(to)
1053
+ newYears.push({
688
1054
  from,
689
- to
690
- },
691
- defaults:{
1055
+ to,
692
1056
  modifiedById,
693
1057
  createdById,
694
1058
  default: isDefault
695
- }
696
- })
697
- if (created){
698
- logger.info(`New academic year record created ${createdCounter + 1}/${createdCounter + 1}: ${record.from} - ${record.to} `)
699
- createdCounter++;
700
- }
701
- else {
702
- const errorMsg = `Record academic year already exists: ${record.from} - ${record.to}`;
703
- if (!uniqueErrors.has(errorMsg)) {
704
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
705
- uniqueErrors.add(errorMsg);
706
- errorCounter++;
707
- }
1059
+ })
708
1060
  }
709
1061
 
710
1062
  } catch (error) {
711
- logger.error(`Error occurred: ${error}`);
712
- logger.error(`Error occurred: ${error.stack || error}`);
1063
+ ;
1064
+ logger.error(`Error occurred: ${error.stack} ${error}`);
713
1065
  }
714
1066
  }
715
1067
 
1068
+ if (newYears.length > 0) {
1069
+ await AcademicYears.bulkCreate(newYears)
1070
+ createdCounter += newYears.length
1071
+
1072
+ newYears.forEach((year, index) => {
1073
+ logger.info(`${index + 1}/${index + 1}: New Academic Years Record Created: [${year.from} - ${year.to}]`)
1074
+ });
1075
+ }
1076
+
716
1077
  console.log("");
717
1078
  console.log("########################################################")
718
1079
  console.log("")
719
- logger.info(' Academic Years Data Migration Completed');
1080
+ logger.info('Academic Years Data Migration Completed');
720
1081
  logger.info(`Total successful Academic Years records created: ${createdCounter}/${createdCounter}`);
721
1082
  logger.info(`Total Academic Years Error Records: ${errorCounter}/${errorCounter}`);
1083
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
722
1084
  console.log("")
723
1085
  console.log("########################################################")
724
1086
  console.log("")
725
1087
 
726
1088
  let totalSummary = {
727
- itemLength: acadYearResult.length,
1089
+ itemLength: createdCounter + errorCounter,
728
1090
  error: errorCounter,
729
1091
  success: createdCounter
730
1092
  }
731
1093
  return totalSummary
732
1094
 
733
1095
  } catch (error) {
734
- logger.error(`Error occurred: ${error}`);
735
- logger.error(`Error occurred: ${error.stack || error}`);
1096
+ ;
1097
+ logger.error(`Error occurred: ${error.stack} ${error}`);
736
1098
 
737
1099
  }
738
1100
  },
@@ -750,19 +1112,44 @@ const server = {
750
1112
  const subjectApi = await api.Subject()
751
1113
 
752
1114
  const departmentSeq = await AcademicDepartments.findAll()
753
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
754
-
1115
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1116
+
1117
+ const departmentDefault = await AcademicDepartments.findOne({ where: { name: 'AcademicDepartments Default' } });
1118
+
1119
+ let defaultPayload = {
1120
+ code:'Sub Def',
1121
+ name:'Subject Default',
1122
+ units:3,
1123
+ departmentId: departmentDefault?._id??null,
1124
+ subjectType: "LECTURE",
1125
+ modifiedById: userMail._id,
1126
+ createdById: userMail._id
1127
+ };
1128
+
1129
+ let [defaults, createddef] = await Subjects.findOrCreate({
1130
+ where: { name: defaultPayload.name, code: defaultPayload.code},
1131
+ defaults: defaultPayload
1132
+ });
1133
+
755
1134
  let createdCounter = 0
756
1135
  let errorCounter = 0
757
1136
  let uniqueErrors = new Set()
758
1137
 
759
-
760
1138
  const db_schema = schema
761
- // let maxIds = await Campuses.max('_id'); = await Subjects.max('_id'); // Fetch maximum _id directly from the Subjects model
1139
+ // let maxIds = await Campuses.max('_id'); = await Subjects.max('_id'); // Fetch maximum _id directly from the Subjects model
762
1140
  // let maxId = maxIds|| 0;
763
1141
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Subjects__id_seq" RESTART WITH ${maxId + 1}`);
764
1142
 
1143
+ let uCode = new Set()
1144
+ let uName = new Set()
1145
+ let uUnits = new Set()
1146
+ let uDept = new Set()
1147
+
1148
+ let newSubject = []
765
1149
 
1150
+ const exSubj = await Subjects.findAll()
1151
+ const exSubjMap = new Map(exSubj.map(subj => [`[${subj.code}] - ${subj.name} [${subj.units}, ${subj.departmentId}]`, subj]))
1152
+
766
1153
  for (let i = 0; i < studentSubject.length; i++){
767
1154
  try {
768
1155
  let _subject = studentSubject[i]
@@ -771,71 +1158,86 @@ const server = {
771
1158
 
772
1159
  let _subs = studentSubject[i].subjects_enrolled;
773
1160
 
774
-
775
1161
  for (let j = 0; j < _subs.length; j++){
776
1162
 
777
1163
  let subject = _subs[j].subject_code
778
1164
 
779
1165
  let _subjects = subjectApi.find(sub => sub.code === subject)
780
1166
 
781
- // return console.log('_subjects :>> ', _subjects);
782
-
783
-
784
1167
  if (!subject) {
785
- // console.error(`Subject with code ${subjects} not found.`);
786
1168
  continue;
787
1169
  }
788
1170
  if (!_subjects) {
789
- // console.error(`Subject with code ${subjects} not found.`);
790
1171
  continue;
791
1172
  }
792
1173
  let subjectType = "LECTURE"
793
1174
  let modifiedById = userMail._id
794
1175
  let createdById = userMail._id
795
1176
 
796
-
797
-
798
- let [record, created] = await Subjects.findOrCreate({
799
- where:{
1177
+ let code =_subjects?.code
1178
+ let name =_subjects?.name
1179
+ let units =_subjects?.units
1180
+ let departmentId = _department?._id??departmentDefault?._id
1181
+
1182
+ if(uCode.has(code) && uName.has(name) && uUnits.has(units) && uDept.has(departmentId)){
1183
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name} [units: ${units}, departmentId: ${departmentId}]`
1184
+ if(!uniqueErrors.has(errorMsg)){
1185
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1186
+ uniqueErrors.add(errorMsg)
1187
+ errorCounter++
1188
+ }
1189
+ }
1190
+ else if ( exSubjMap.has(`[${code}] - ${name} [${units}, ${departmentId}]`)){
1191
+ const exSubj = exSubjMap.get(`[${code}] - ${name} [${units}, ${departmentId}]`)
1192
+ const errorMsg = `Existing Data Found: [${exSubj.code}] - ${exSubj.name} [units: ${exSubj.units}, departmentId: ${exSubj.departmentId}]`
1193
+ if(!uniqueErrors.has(errorMsg)){
1194
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1195
+ uniqueErrors.add(errorMsg)
1196
+ errorCounter++
1197
+ }
1198
+ }
1199
+ else{
1200
+ uCode.add(code)
1201
+ uName.add(name)
1202
+ uUnits.add(units)
1203
+ uDept.add(departmentId)
1204
+ newSubject.push({
800
1205
  code:_subjects?.code,
801
- name:_subjects?.name,
802
- units:_subjects?.units,
803
- //add null here
804
- departmentId: _department?._id??null,
805
- subjectType,
1206
+ name:_subjects?.name,
1207
+ units:_subjects?.units,
1208
+ departmentId: _department?._id??departmentDefault?._id,
1209
+ subjectType,
806
1210
  modifiedById,
807
- createdById
808
- },
809
- defaults:{
810
-
811
- }
812
- })
813
- if (created){
814
- logger.info(`New subject record created ${createdCounter + 1}/${createdCounter + 1}: [${record.code}], ${record.name} `)
815
- createdCounter++;
1211
+ createdById,
1212
+ // migratedAt,
1213
+ // migratedTable,
1214
+ // referenceId,
1215
+ // isMigrated
1216
+ })
816
1217
  }
817
- else {
818
- const errorMsg = `Record subject already exists: [${record.code}], ${record.name}`;
819
1218
 
820
- if (!uniqueErrors.has(errorMsg)) {
821
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
822
- uniqueErrors.add(errorMsg);
823
- errorCounter++;
824
- }
825
- }
826
1219
  }
827
1220
 
828
1221
 
829
1222
  } catch (error) {
830
- logger.error(`Error occurred: ${error}`);
831
- logger.error(`Error occurred: ${error.stack || error}`);
1223
+ ;
1224
+ logger.error(`Error occurred: ${error.stack} ${error}`);
832
1225
  }
833
1226
  }
834
1227
 
1228
+ if (newSubject.length > 0) {
1229
+ await Subjects.bulkCreate(newSubject)
1230
+ createdCounter += newSubject.length
1231
+
1232
+ newSubject.forEach((subj, index) => {
1233
+ logger.info(`${index + 1}/${index + 1}: New Subject Record Created: [${subj.code}] - ${subj.name} [units: ${subj.units}, departmentId: ${subj.departmentId}]`)
1234
+ });
1235
+ }
1236
+
835
1237
  console.log("");
836
1238
  console.log("########################################################")
837
1239
  console.log("")
838
- logger.info(' Subjects Data Migration Completed');
1240
+ logger.info('Subjects Data Migration Completed');
839
1241
  logger.info(`Total successful Subjects records created: ${createdCounter}/${createdCounter}`);
840
1242
  logger.info(`Total Subjects Error Records: ${errorCounter}/${errorCounter}`);
841
1243
  console.log("")
@@ -850,8 +1252,8 @@ const server = {
850
1252
  return totalSummary
851
1253
 
852
1254
  } catch (error) {
853
- logger.error(`Error occurred: ${error}`);
854
- logger.error(`Error occurred: ${error.stack || error}`);
1255
+ ;
1256
+ logger.error(`Error occurred: ${error.stack} ${error}`);
855
1257
 
856
1258
  }
857
1259
  },
@@ -873,10 +1275,22 @@ const server = {
873
1275
 
874
1276
 
875
1277
  const db_schema = schema
876
- // let maxIds = await Campuses.max('_id'); = await Schedules.max('_id'); // Fetch maximum _id directly from the Schedules model
1278
+ // let maxIds = await Campuses.max('_id'); = await Schedules.max('_id'); // Fetch maximum _id directly from the Schedules model
877
1279
  // let maxId = maxIds|| 0;
878
1280
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Schedules__id_seq" RESTART WITH ${maxId + 1}`);
879
1281
 
1282
+
1283
+ let uName = new Set()
1284
+ let uFrom = new Set()
1285
+ let uTo = new Set()
1286
+ let uDays = new Set()
1287
+
1288
+ let newSchedule = []
1289
+
1290
+ const exSched = await Schedules.findAll()
1291
+ const exSchedMap = new Map(exSched.map(sched => [`${sched.name} - [${sched.from} - ${sched.to}, ${sched.days}]`, sched]))
1292
+
1293
+
880
1294
  for (let i = 0; i < scheduleApi.length; i++){
881
1295
  try {
882
1296
  let _schedule = scheduleApi[i]
@@ -910,8 +1324,6 @@ const server = {
910
1324
  let createdById = userMail._id
911
1325
 
912
1326
 
913
- let from = null
914
- let to = null
915
1327
  let days = null
916
1328
 
917
1329
  if (dayHandler.length > 1) {
@@ -920,59 +1332,82 @@ const server = {
920
1332
  days = dayMappings[dayHandler[0]];
921
1333
  }
922
1334
 
923
-
924
- let [record, created] = await Schedules.findOrCreate({
925
- where:{
1335
+ let name = _schedule?.schedule
1336
+ let from = stFormat??from??null
1337
+ let to = etFormat??to??null
1338
+
1339
+ if(uName.has(name) && uFrom.has(from) && uTo.has(to) && uDays.has(days)){
1340
+ const errorMsg = `Duplicate Payload Found: ${name} - [${from} - ${to}, ${days}]`
1341
+ if(!uniqueErrors.has(errorMsg)){
1342
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1343
+ uniqueErrors.add(errorMsg)
1344
+ errorCounter++
1345
+ }
1346
+ }
1347
+ else if ( exSchedMap.has(`${name} - [${from} - ${to}, ${days}]`)){
1348
+ const exSched = exSchedMap.get(`${name} - [${from} - ${to}, ${days}]`)
1349
+ const errorMsg = `Existing Data Found: ${exSched.name} - [${exSched.from} - ${exSched.to}, ${exSched.days}]`
1350
+ if(!uniqueErrors.has(errorMsg)){
1351
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1352
+ uniqueErrors.add(errorMsg)
1353
+ errorCounter++
1354
+ }
1355
+ }
1356
+ else{
1357
+ uName.add(name)
1358
+ uFrom.add(from)
1359
+ uTo.add(to)
1360
+ uDays.add(days)
1361
+ newSchedule.push({
926
1362
  name: _schedule?.schedule,
927
1363
  from : stFormat??from,
928
1364
  to : etFormat??to,
929
- days
930
- },
931
- defaults:{
1365
+ days,
932
1366
  modifiedById,
933
1367
  createdById
934
- }
935
- })
936
- if (created){
937
- logger.info(`New schedule record created ${createdCounter + 1}/${createdCounter + 1}: [${record.from} - ${record.to}] ${record.name} `)
938
- createdCounter++;
939
- }
940
- else {
941
- const errorMsg = `Record schedule already exists: [${record.from} - ${record.to}] ${record.name}`;
942
1368
 
943
- if (!uniqueErrors.has(errorMsg)) {
944
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
945
- uniqueErrors.add(errorMsg);
946
- errorCounter++;
947
- }
1369
+ // migratedAt,
1370
+ // migratedTable,
1371
+ // referenceId,
1372
+ // isMigrated
1373
+ })
948
1374
  }
949
-
950
1375
  } catch (error) {
951
- logger.error(`Error occurred: ${error}`);
952
- logger.error(`Error occurred: ${error.stack || error}`);
1376
+ ;
1377
+ logger.error(`Error occurred: ${error.stack} ${error}`);
953
1378
  }
954
1379
  }
1380
+
1381
+ if (newSchedule.length > 0) {
1382
+ await Schedules.bulkCreate(newSchedule)
1383
+ createdCounter += newSchedule.length
1384
+
1385
+ newSchedule.forEach((exSched, index) => {
1386
+ logger.info(`${index + 1}/${index + 1}: New Schedule Record Created: ${exSched.name} - [${exSched.from} - ${exSched.to}, ${exSched.days}]`)
1387
+ });
1388
+ }
955
1389
 
956
1390
  console.log("");
957
1391
  console.log("########################################################")
958
1392
  console.log("")
959
- logger.info(' Schedule Data Migration Completed');
1393
+ logger.info('Schedule Data Migration Completed');
960
1394
  logger.info(`Total successful Schedule records created: ${createdCounter}/${createdCounter}`);
961
1395
  logger.info(`Total Schedule Error Records: ${errorCounter}/${errorCounter}`);
1396
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
962
1397
  console.log("")
963
1398
  console.log("########################################################")
964
1399
  console.log("")
965
1400
 
966
1401
  let totalSummary = {
967
- itemLength: scheduleApi.length,
1402
+ itemLength: createdCounter + errorCounter,
968
1403
  error: errorCounter,
969
1404
  success: createdCounter
970
1405
  }
971
1406
  return totalSummary
972
1407
 
973
1408
  } catch (error) {
974
- logger.error(`Error occurred: ${error}`);
975
- logger.error(`Error occurred: ${error.stack || error}`);
1409
+ ;
1410
+ logger.error(`Error occurred: ${error.stack} ${error}`);
976
1411
  }
977
1412
  },
978
1413
 
@@ -992,7 +1427,10 @@ const server = {
992
1427
  const semesterSeq = await Semesters.findAll()
993
1428
  const acadYearSeq = await AcademicYears.findAll()
994
1429
 
995
- const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1430
+ const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1431
+ const campusDefault = await Users.findOne({ where: { name: 'Campus Default' } });
1432
+ const courseDefault = await Users.findOne({ where: { name: 'Course Default' } });
1433
+ const collegeDefault = await Users.findOne({ where: { name: 'Colleges Default' } });
996
1434
 
997
1435
  let createdCounter = 0
998
1436
  let errorCounter = 0
@@ -1000,19 +1438,30 @@ const server = {
1000
1438
 
1001
1439
  const emailDomain = 'default.msc.edu.ph';
1002
1440
 
1003
-
1004
1441
  const db_schema = schema
1005
- // let maxIds = await Campuses.max('_id'); = await Students.max('_id'); // Fetch maximum _id directly from the Students model
1442
+ // let maxIds = await Campuses.max('_id'); = await Students.max('_id'); // Fetch maximum _id directly from the Students model
1006
1443
  // let maxId = maxIds|| 0;
1007
1444
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Students__id_seq" RESTART WITH ${maxId + 1}`);
1008
1445
 
1446
+
1447
+ let uNum = new Set()
1448
+ let uLname = new Set()
1449
+ let uMname = new Set()
1450
+ let uFname = new Set()
1451
+ let uCourse = new Set()
1452
+ let uCampus = new Set()
1453
+
1454
+ let newStudent = []
1455
+
1456
+ const exStudent = await Students.findAll()
1457
+ const exStudentMap = new Map(exStudent.map(student => [`[${student.studentNumber}] - ${student.lastName}, ${student.firstName} ${student.middleName} [${student.courseId}, ${student.campusId}]`, student]))
1458
+
1009
1459
  const {data} = studentApi
1460
+
1010
1461
  for (let i = 0; i < data.length; i++){
1011
1462
  try {
1012
-
1013
1463
  let _student = data[i]
1014
1464
 
1015
-
1016
1465
  let _campus = campusSeq.find(a => a.name === _student?.campus)
1017
1466
  let _course = courseSeq.find(b => b.name === _student?.course)
1018
1467
  let _college = collegeSeq.find(c => c.name === _student?.college)
@@ -1024,14 +1473,8 @@ const server = {
1024
1473
  let modifiedById = userMail._id
1025
1474
  let createdById = userMail._id
1026
1475
 
1027
- let campusDefault = 999999
1028
- let courseDefault = 999999
1029
- let collegeDefault = 999999
1030
-
1031
-
1032
1476
  let fromPrompts = await Picked()
1033
-
1034
-
1477
+
1035
1478
  // let semester = "2nd Semester"
1036
1479
  let semester = fromPrompts.semester
1037
1480
  let yearsFrom = fromPrompts.yearFrom
@@ -1040,67 +1483,88 @@ const server = {
1040
1483
  let _semester = semesterSeq.find(sem => sem.code === semester)
1041
1484
  let _acadYear = acadYearSeq.find(yr => yr.from === parseInt(yearsFrom) && yr.to === parseInt(yearsTo))
1042
1485
 
1043
- // return
1044
- let [record, created] = await Students.findOrCreate({
1045
- where:{
1486
+ let studentNumber = _student?.student_number
1487
+ let firstName = _student?.first_name
1488
+ let lastName = _student?.last_name
1489
+ let middleName = _student?.middle_name
1490
+ let courseId = _course?._id??courseDefault?._id
1491
+ let campusId = _campus?._id??campusDefault?._id
1492
+
1493
+ if(uNum.has(studentNumber) && uLname.has(lastName) && uFname.has(firstName) && uMname.has(middleName) && uCourse.has(courseId) && uCampus.has(campusId)){
1494
+ const errorMsg = `Duplicate Payload Found: [${studentNumber}] - ${lastName}, ${firstName} ${middleName} [${courseId}, ${campusId}]`
1495
+ if(!uniqueErrors.has(errorMsg)){
1496
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1497
+ uniqueErrors.add(errorMsg)
1498
+ errorCounter++
1499
+ }
1500
+ }
1501
+ else if ( exStudentMap.has(`[${studentNumber}] - ${lastName}, ${firstName} ${middleName} [${courseId}, ${campusId}]`)){
1502
+ const exStudent = exStudentMap.get(`[${studentNumber}] - ${lastName}, ${firstName} ${middleName} [${courseId}, ${campusId}]`)
1503
+ const errorMsg = `Existing Data Found:[${exStudent.studentNumber}] - ${exStudent.lastName}, ${exStudent.firstName} ${exStudent.middleName} [${exStudent.courseId}, ${exStudent.campusId}]`
1504
+ if(!uniqueErrors.has(errorMsg)){
1505
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1506
+ uniqueErrors.add(errorMsg)
1507
+ errorCounter++
1508
+ }
1509
+ }
1510
+ else{
1511
+ uNum.add(studentNumber)
1512
+ uLname.add(lastName)
1513
+ uMname.add(middleName)
1514
+ uFname.add(firstName)
1515
+ uCourse.add(courseId)
1516
+ uCampus.add(campusId)
1517
+ newStudent.push({
1046
1518
  studentNumber: _student?.student_number,
1047
1519
  firstName: _student?.first_name,
1048
1520
  lastName: _student?.last_name,
1049
1521
  middleName: _student?.middle_name,
1050
- },
1051
- defaults:{
1052
1522
  email: email,
1053
- courseId: _course?._id??courseDefault,
1054
- campusId: _campus?._id??campusDefault,
1055
- collegeId: _college?._id??collegeDefault,
1523
+ courseId: _course?._id??courseDefault?._id,
1524
+ campusId: _campus?._id??campusDefault?._id,
1525
+ collegeId: _college?._id??collegeDefault?._id,
1056
1526
  admittedYearId: _acadYear?._id ?? null,
1057
1527
  admittedSemId: _semester?._id ?? null,
1058
1528
  modifiedById,
1059
- createdById
1060
- }
1061
- })
1062
- if (created){
1063
- logger.info(`New student record created ${createdCounter + 1}/${createdCounter + 1}: [${record.studentNumber}] ${record.lastName}, ${record.firstName} ${record.middleName} `)
1064
- createdCounter++;
1065
- }
1066
- else {
1067
-
1068
- const errorMsg = `Record student already exists: [${record.studentNumber}] ${record.lastName}, ${record.firstName} ${record.middleName}`;
1069
-
1070
- if (!uniqueErrors.has(errorMsg)) {
1071
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
1072
- uniqueErrors.add(errorMsg);
1073
- errorCounter++;
1074
- }
1075
-
1529
+ createdById,
1530
+ })
1076
1531
  }
1077
1532
 
1078
1533
  } catch (error) {
1079
- logger.error(`Error occurred: ${error}`);
1080
- logger.error(`Error occurred: ${error.stack || error}`);
1534
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1081
1535
  }
1082
1536
  }
1083
1537
 
1538
+ if (newStudent.length > 0) {
1539
+ await Students.bulkCreate(newStudent)
1540
+ createdCounter += newStudent.length
1541
+
1542
+ newStudent.forEach((exStudent, index) => {
1543
+ logger.info(`${index + 1}/${index + 1}: New Student Record Created: [${exStudent.studentNumber}] - ${exStudent.lastName}, ${exStudent.firstName} ${exStudent.middleName} [${exStudent.courseId}, ${exStudent.campusId}]`)
1544
+ });
1545
+ }
1546
+
1084
1547
  console.log("");
1085
1548
  console.log("########################################################")
1086
1549
  console.log("")
1087
- logger.info(' Student Data Migration Completed');
1550
+ logger.info('Student Data Migration Completed');
1088
1551
  logger.info(`Total successful Student records created: ${createdCounter}/${createdCounter}`);
1089
1552
  logger.info(`Total Student Error Records: ${errorCounter}/${errorCounter}`);
1553
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
1090
1554
  console.log("")
1091
1555
  console.log("########################################################")
1092
1556
  console.log("")
1093
1557
 
1094
1558
  let totalSummary = {
1095
- itemLength: data.length,
1559
+ itemLength: createdCounter + errorCounter,
1096
1560
  error: errorCounter,
1097
1561
  success: createdCounter
1098
1562
  }
1099
1563
  return totalSummary
1100
1564
 
1101
1565
  } catch (error) {
1102
- logger.error(`Error occurred: ${error}`);
1103
- logger.error(`Error occurred: ${error.stack || error}`);
1566
+ ;
1567
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1104
1568
 
1105
1569
  }
1106
1570
  },
@@ -1126,9 +1590,8 @@ const server = {
1126
1590
  const acadYearSeq = await AcademicYears.findAll()
1127
1591
  const acadDeptSeq = await AcademicDepartments.findAll()
1128
1592
 
1129
-
1130
1593
  const userMail = await Users.findOne({ where: { email: 'ccci_integrator@gmail.com' } });
1131
-
1594
+
1132
1595
  let createdCounter = 0
1133
1596
  let errorCounter = 0
1134
1597
  let uniqueErrors = new Set()
@@ -1139,7 +1602,21 @@ const server = {
1139
1602
  // let maxId = maxIds|| 0;
1140
1603
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."Sections__id_seq" RESTART WITH ${maxId + 1}`);
1141
1604
 
1142
-
1605
+ let uName = new Set()
1606
+ let uCode = new Set()
1607
+ let uSub = new Set()
1608
+ let uIns = new Set()
1609
+ let uSem = new Set()
1610
+ let uYear = new Set()
1611
+ let uCrs = new Set()
1612
+ let uDept = new Set()
1613
+ let uCam = new Set()
1614
+
1615
+ let newSection = []
1616
+
1617
+ const exSect = await Sections.findAll()
1618
+ const exSectMap = new Map(exSect.map(sect => [`[${sect.code}] - ${sect.name} [${sect.subjectId}, ${sect.instructorId}, ${sect.semesterId}, ${sect.academicYearId}, ${sect.courseId}, ${sect.departmentId}, ${sect.campusId}]`, sect]))
1619
+
1143
1620
  for (let i = 0; i < student.length; i++) {
1144
1621
  try {
1145
1622
 
@@ -1179,27 +1656,60 @@ const server = {
1179
1656
  let code = sections ?? 'CODE'
1180
1657
  code = code.split(/\s+/).map((word) => word.charAt(0).toUpperCase()).join('')
1181
1658
 
1182
- let fromPrompts = await Picked()
1183
- let semester = fromPrompts.semester
1184
- let yearsFrom = fromPrompts.yearFrom
1185
- let yearsTo = fromPrompts.yearTo
1186
- let _semester = semesterSeq.find(sem => sem.code === semester)
1187
- let _acadYear = acadYearSeq.find(yr => yr.from === parseInt(yearsFrom) && yr.to === parseInt(yearsTo))
1659
+ let fromPrompts = await Picked()
1660
+ let semester = fromPrompts.semester
1661
+ let yearsFrom = fromPrompts.yearFrom
1662
+ let yearsTo = fromPrompts.yearTo
1663
+ let _semester = semesterSeq.find(sem => sem.code === semester)
1664
+ let _acadYear = acadYearSeq.find(yr => yr.from === parseInt(yearsFrom) && yr.to === parseInt(yearsTo))
1188
1665
 
1189
1666
  let modifiedById = userMail._id;
1190
1667
  let createdById = userMail._id;
1191
1668
 
1192
- let defaultSub = 99999
1193
- let defaultInst = 99999
1194
-
1195
1669
  let classType = 'SYNCHRONOUS'
1196
-
1197
- let [record, created] = await Sections.findOrCreate({
1198
- where: {
1670
+
1671
+ let name = sections
1672
+ let subjectId = _subjects?._id??null
1673
+ let instructorId = _instructors?._id??null
1674
+ let semesterId = _semester?._id??null
1675
+ let academicYearId = _acadYear?._id??null
1676
+ let courseId = _course?._id??null
1677
+ let departmentId = _insdepartment?._id??null
1678
+ let campusId = _campus?._id??null
1679
+
1680
+
1681
+ if(uCode.has(code) && uName.has(name) && uSub.has(subjectId) && uIns.has(instructorId) && uSem.has(semesterId) && uYear.has(academicYearId)&& uCrs.has(courseId)&& uDept.has(departmentId) && uCam.has(campusId)){
1682
+ const errorMsg = `Duplicate Payload Found: [${code}] - ${name}`
1683
+ if(!uniqueErrors.has(errorMsg)){
1684
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1685
+ uniqueErrors.add(errorMsg)
1686
+ errorCounter++
1687
+ }
1688
+ }
1689
+ else if ( exSectMap.has(`[${code}] - ${name} [${subjectId}, ${instructorId}, ${semesterId}, ${academicYearId}, ${courseId}, ${departmentId}, ${campusId}]`)){
1690
+ const exSect = exSectMap.get(`[${code}] - ${name} [${subjectId}, ${instructorId}, ${semesterId}, ${academicYearId}, ${courseId}, ${departmentId}, ${campusId}]`)
1691
+ const errorMsg = `Existing Data Found:[${exSect.code}] - ${exSect.name}`
1692
+ if(!uniqueErrors.has(errorMsg)){
1693
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1694
+ uniqueErrors.add(errorMsg)
1695
+ errorCounter++
1696
+ }
1697
+ }
1698
+ else{
1699
+ uName.add(name)
1700
+ uCode.add(code)
1701
+ uSub.add(subjectId)
1702
+ uIns.add(instructorId)
1703
+ uSem.add(semesterId)
1704
+ uYear.add(academicYearId)
1705
+ uCrs.add(courseId)
1706
+ uDept.add(departmentId)
1707
+ uCam .add(campusId)
1708
+ newSection.push({
1199
1709
  name: sections,
1200
1710
  code,
1201
- subjectId: _subjects?._id??defaultSub??null,
1202
- instructorId: _instructors?._id??defaultInst??null,
1711
+ subjectId: _subjects?._id??null,
1712
+ instructorId: _instructors?._id??null,
1203
1713
  classType,
1204
1714
  semesterId: _semester?._id??null,
1205
1715
  academicYearId: _acadYear?._id??null,
@@ -1208,60 +1718,46 @@ const server = {
1208
1718
  departmentId: _insdepartment?._id??null,
1209
1719
  modifiedById,
1210
1720
  createdById,
1211
-
1212
- },
1213
- defaults: {
1214
- // classType,
1215
- // semesterId: _semester?._id??null,
1216
- // academicYearId: _acadYear?._id??null,
1217
- // courseId: _course?._id??null,
1218
- // campusId: _campus?._id??null,
1219
- // modifiedById,
1220
- // createdById,
1221
-
1222
- }
1223
- });
1224
-
1225
- if (created) {
1226
- logger.info(`New section record created ${createdCounter + 1}/${createdCounter + 1}: ${record.name} `);
1227
- createdCounter++;
1228
- } else {
1229
-
1230
- const errorMsg = `Record section already exists: ${record.name} `;
1231
-
1232
- if (!uniqueErrors.has(errorMsg)) {
1233
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
1234
- uniqueErrors.add(errorMsg);
1235
- errorCounter++;
1236
- }
1721
+ })
1237
1722
  }
1723
+
1238
1724
  }
1239
1725
  } catch (error) {
1240
- logger.error(`Error occurred: ${error}`);
1241
- logger.error(`Error occurred: ${error.stack || error}`);
1726
+ ;
1727
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1242
1728
  }
1243
1729
  }
1730
+
1731
+ if (newSection.length > 0) {
1732
+ await Sections.bulkCreate(newSection)
1733
+ createdCounter += newSection.length
1734
+
1735
+ newSection.forEach((sect, index) => {
1736
+ logger.info(`${index + 1}/${index + 1}: New Section Record Created: [${sect.code}] - ${sect.name}`)
1737
+ });
1738
+ }
1244
1739
 
1245
1740
  console.log("");
1246
1741
  console.log("########################################################");
1247
1742
  console.log("");
1248
- logger.info(' Section Data Migration Completed');
1743
+ logger.info('Section Data Migration Completed');
1249
1744
  logger.info(`Total successful Section records created: ${createdCounter}/${createdCounter}`);
1250
1745
  logger.info(`Total Section Error Records: ${errorCounter}/${errorCounter}`);
1746
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
1251
1747
  console.log("");
1252
1748
  console.log("########################################################");
1253
1749
  console.log("");
1254
1750
 
1255
1751
  let totalSummary = {
1256
- itemLength: student.length,
1752
+ itemLength: createdCounter + errorCounter,
1257
1753
  error: errorCounter,
1258
1754
  success: createdCounter
1259
1755
  };
1260
1756
  return totalSummary;
1261
1757
 
1262
1758
  } catch (error) {
1263
- logger.error(`Error occurred: ${error}`);
1264
- logger.error(`Error occurred: ${error.stack || error}`);
1759
+ ;
1760
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1265
1761
  }
1266
1762
  },
1267
1763
 
@@ -1297,6 +1793,21 @@ const server = {
1297
1793
  // let maxId = maxIds|| 0;
1298
1794
  // await db.sequelize.query(`ALTER SEQUENCE ${db_schema}."EnrolledStudents__id_seq" RESTART WITH ${maxId + 1}`);
1299
1795
 
1796
+
1797
+ let uStud = new Set()
1798
+ let uCrs = new Set()
1799
+ let uIns = new Set()
1800
+ let uSec = new Set()
1801
+ let uCam = new Set()
1802
+ let uYear = new Set()
1803
+ let uSem = new Set()
1804
+ let uGrade = new Set()
1805
+
1806
+ let newEnroll = []
1807
+
1808
+ const exEnroll = await EnrolledStudents.findAll()
1809
+ const exEnrollMap = new Map(exEnroll.map(student => [`[${student.studentId}] - [${student.courseId}, ${student.instructorId}, ${student.sectionId}, ${student.campusId}, ${student.academicYearId}, ${student.academicYearId}, ${student.semesterId}, ${student.finalGrade}]`, student]))
1810
+
1300
1811
 
1301
1812
  for (let i = 0; i < studentApi.length; i++){
1302
1813
  try {
@@ -1350,7 +1861,6 @@ const server = {
1350
1861
  continue;
1351
1862
  }
1352
1863
 
1353
-
1354
1864
  let totalPoints = 100
1355
1865
  let finalG = fGrade
1356
1866
  let gradePoints = ((-4.0 / totalPoints) * parseFloat (finalG) + 5.0).toFixed(2)
@@ -1363,9 +1873,42 @@ const server = {
1363
1873
  }
1364
1874
  let remarks = rmarks?.toUpperCase()??null
1365
1875
 
1366
- // return
1367
- let [record, created] = await EnrolledStudents.findOrCreate({
1368
- where:{
1876
+ let studentId = student?._id
1877
+ let courseId = course?._id
1878
+ let instructorId = _instructor?._id??null
1879
+ let sectionId = _section?._id??null
1880
+ let campusId = campus?._id
1881
+ let academicYearId = _acadYear?._id
1882
+ let semesterId = _semester?._id
1883
+ let finalGrade = gradePoints
1884
+
1885
+ if(uStud.has(studentId) && uCrs.has(courseId) && uIns.has(instructorId) && uSec.has(sectionId) && uCam.has(campusId) && uYear.has(academicYearId) && uSem.has(semesterId) && uGrade.has(finalGrade)){
1886
+ const errorMsg = `Duplicate Payload Found: [${studentId}] - [${courseId}, ${instructorId}, ${sectionId}, ${campusId}, ${academicYearId}, ${academicYearId}, ${semesterId}, ${finalGrade}]`
1887
+ if(!uniqueErrors.has(errorMsg)){
1888
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1889
+ uniqueErrors.add(errorMsg)
1890
+ errorCounter++
1891
+ }
1892
+ }
1893
+ else if ( exEnrollMap.has(`[${studentId}] - [${courseId}, ${instructorId}, ${sectionId}, ${campusId}, ${academicYearId}, ${academicYearId}, ${semesterId}, ${finalGrade}]`)){
1894
+ const exEnroll = exEnrollMap.get(`[${studentId}] - [${courseId}, ${instructorId}, ${sectionId}, ${campusId}, ${academicYearId}, ${academicYearId}, ${semesterId}, ${finalGrade}]`)
1895
+ const errorMsg = `Existing Data Found: [${exEnroll.exEnrollId}] - [${exEnroll.courseId}, ${exEnroll.instructorId}, ${exEnroll.sectionId}, ${exEnroll.campusId}, ${exEnroll.academicYearId}, ${exEnroll.academicYearId}, ${exEnroll.semesterId}, ${exEnroll.finalGrade}]`
1896
+ if(!uniqueErrors.has(errorMsg)){
1897
+ logger.error(`${errorCounter + 1}/${errorCounter + 1}: ${errorMsg}`)
1898
+ uniqueErrors.add(errorMsg)
1899
+ errorCounter++
1900
+ }
1901
+ }
1902
+ else{
1903
+ uStud.add(studentId)
1904
+ uCrs.add(courseId)
1905
+ uIns.add(instructorId)
1906
+ uSec.add(sectionId)
1907
+ uCam.add(campusId)
1908
+ uYear.add(academicYearId)
1909
+ uSem.add(semesterId)
1910
+ uGrade.add(finalGrade)
1911
+ newEnroll.push({
1369
1912
  studentId: student?._id,
1370
1913
  courseId: course?._id,
1371
1914
  instructorId: _instructor?._id??null,
@@ -1378,52 +1921,45 @@ const server = {
1378
1921
  remarks,
1379
1922
  createdById,
1380
1923
  modifiedById,
1381
- },
1382
- default:{
1383
-
1384
- }
1385
- })
1386
-
1387
- if (created) {
1388
- logger.info(`New enrolled student record created ${createdCounter + 1}/${createdCounter + 1}: studentId = [${record.studentId}], sectionId = [${record.sectionId}], instructorId = [${record.instructorId}]`);
1389
- createdCounter++;
1390
- } else {
1391
-
1392
- const errorMsg = `Record enrolled student already exists: studentId = [${record.studentId}], sectionId = [${record.sectionId}], instructorId = [${record.instructorId}]`;
1393
-
1394
- if (!uniqueErrors.has(errorMsg)) {
1395
- logger.error(`${errorCounter + 1}/${errorCounter + 1} ${errorMsg}`);
1396
- uniqueErrors.add(errorMsg);
1397
- errorCounter++;
1398
- }
1924
+ })
1399
1925
  }
1400
1926
  }
1401
1927
  } catch (error) {
1402
- logger.error(`Error occurred: ${error}`);
1403
- logger.error(`Error occurred: ${error.stack || error}`);
1928
+ ;
1929
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1404
1930
  }
1405
1931
  }
1406
1932
 
1933
+ if (newEnroll.length > 0) {
1934
+ await Sections.bulkCreate(newEnroll)
1935
+ createdCounter += newEnroll.length
1936
+
1937
+ newEnroll.forEach((es, index) => {
1938
+ logger.info(`${index + 1}/${index + 1}: New Section Record Created: [${es.studentId}] - [${es.courseId}, ${es.instructorId}, ${es.sectionId}, ${es.campusId}, ${es.academicYearId}, ${es.academicYearId}, ${es.semesterId}, ${es.finalGrade}]`)
1939
+ });
1940
+ }
1941
+
1407
1942
  console.log("");
1408
1943
  console.log("########################################################")
1409
1944
  console.log("")
1410
- logger.info(' Enrolled Student Data Migration Completed');
1945
+ logger.info('Enrolled Student Data Migration Completed');
1411
1946
  logger.info(`Total successful Enrolled Student records created: ${createdCounter}/${createdCounter}`);
1412
1947
  logger.info(`Total Enrolled Student Error Records: ${errorCounter}/${errorCounter}`);
1948
+ logger.info(`Total records: ${createdCounter + errorCounter}`);
1413
1949
  console.log("")
1414
1950
  console.log("########################################################")
1415
1951
  console.log("")
1416
1952
 
1417
1953
  let totalSummary = {
1418
- itemLength: studentApi.length,
1954
+ itemLength: createdCounter + errorCounter,
1419
1955
  error: errorCounter,
1420
1956
  success: createdCounter
1421
1957
  }
1422
1958
  return totalSummary
1423
1959
 
1424
1960
  } catch (error) {
1425
- logger.error(`Error occurred: ${error}`);
1426
- logger.error(`Error occurred: ${error.stack || error}`);
1961
+ ;
1962
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1427
1963
 
1428
1964
  }
1429
1965
  },
@@ -1439,7 +1975,7 @@ async function runServerFunctions() {
1439
1975
  }
1440
1976
  }
1441
1977
  } catch (error) {
1442
- logger.error(`Error occurred: ${error.stack || error}`);
1978
+ logger.error(`Error occurred: ${error.stack} ${error}`);
1443
1979
  }
1444
1980
  console.log("");
1445
1981
  console.log("########################################################");