lms-sync 1.0.14 → 1.0.15

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