|
| 1 | +import { faker } from "@faker-js/faker"; // eslint-disable-line import/no-extraneous-dependencies |
| 2 | +import Infrastructure from "#models/infrastructure"; |
| 3 | +import Accreditation from "#models/accreditation"; |
| 4 | +import Organization from "#models/organization"; |
| 5 | +import Department from "#models/department"; |
| 6 | +import Topics from "#models/topic"; |
| 7 | +import Module from "#models/module"; |
| 8 | +import Tutorial from "#models/tutorial"; |
| 9 | +import Practical from "#models/practical"; |
| 10 | +import Semester from "#models/semester"; |
| 11 | +import Course from "#models/course"; |
| 12 | +import Faculty from "#models/faculty"; |
| 13 | +import Student from "#models/student"; |
| 14 | +import Attendance from "#models/attendance"; |
| 15 | +import Notification from "#models/notification"; |
| 16 | +import User from "#models/user"; |
| 17 | +import Group from "#models/group"; |
| 18 | +import ActivityBlueprint from "#models/activityBlueprint"; |
| 19 | +import Activity from "#models/activity"; |
| 20 | +import Exam from "#models/exam"; |
| 21 | +import Paper from "#models/paper"; |
| 22 | +import Coursework from "#models/coursework"; |
| 23 | +import Timetable from "#models/timetable"; |
| 24 | +import generateOrganizations from "#mockDB/orgMock"; |
| 25 | +import ACCREDS from "#mockDB/accredMock"; |
| 26 | +import TOPICS from "#mockDB/topicMock"; |
| 27 | +import generateDepartments from "#mockDB/deptMock"; |
| 28 | +import generateModules from "#mockDB/moduleMock"; |
| 29 | +import generateInfrastructures from "#mockDB/infraMock"; |
| 30 | +import generatePracticals from "#mockDB/pracMock"; |
| 31 | +import generateTutorials from "#mockDB/tutMock"; |
| 32 | +import generateSemesters from "#mockDB/semMock"; |
| 33 | +import generateCourses from "#mockDB/courseMock"; |
| 34 | +import generateFaculty from "#mockDB/facultyMock"; |
| 35 | +import generateStudents from "#mockDB/studentMock"; |
| 36 | +import generateAttendance from "#mockDB/attendanceMock"; |
| 37 | +import generateNotifications from "#mockDB/notificationMock"; |
| 38 | +import generateUsers from "#mockDB/userMock"; // eslint-disable-line no-unused-vars |
| 39 | +import generateGroups from "#mockDB/groupMock"; |
| 40 | +import generateActivityBP from "#mockDB/activityBPMock"; |
| 41 | +import generateActivity from "#mockDB/activityMock"; |
| 42 | +import generateExams from "#mockDB/examMock"; |
| 43 | +import generatePaper from "#mockDB/paperMock"; |
| 44 | +import generateCoursework from "#mockDB/courseworkMock"; |
| 45 | +import generateTimetables from "#mockDB/timetableMock"; |
| 46 | +/* eslint-disable no-underscore-dangle */ |
| 47 | +const createdAccreds = await Accreditation.createMultiple(ACCREDS); |
| 48 | + |
| 49 | +const parentOrg = await Organization.create({ |
| 50 | + startDate: faker.date.past({ years: 10 }), |
| 51 | + name: "Thakur Education", |
| 52 | + accreditations: [ |
| 53 | + createdAccreds[faker.number.int({ min: 0, max: createdAccreds.length - 1 })] |
| 54 | + ._id, |
| 55 | + createdAccreds[faker.number.int({ min: 0, max: createdAccreds.length - 1 })] |
| 56 | + ._id, |
| 57 | + ], |
| 58 | +}); |
| 59 | + |
| 60 | +const ORGS = generateOrganizations(parentOrg._id, createdAccreds); |
| 61 | + |
| 62 | +const createdOrgs = await Organization.createMultiple(ORGS); |
| 63 | + |
| 64 | +const tcetObject = createdOrgs.filter( |
| 65 | + (obj) => obj.name === "Thakur College of Engineering & Technology", |
| 66 | +)[0]; |
| 67 | + |
| 68 | +const INFRA = generateInfrastructures(tcetObject._id); |
| 69 | + |
| 70 | +const createdInfras = await Infrastructure.createMultiple(INFRA); |
| 71 | + |
| 72 | +const filteredInfrastructures = createdInfras.filter((infrastructure) => { |
| 73 | + const allowedTypes = ["LAB", "CLASSROOM", "COMPUTER LAB"]; |
| 74 | + return allowedTypes.includes(infrastructure.type); |
| 75 | +}); |
| 76 | + |
| 77 | +const DEPTS = generateDepartments( |
| 78 | + tcetObject._id, |
| 79 | + createdAccreds.map((createdAccred) => createdAccred._id), |
| 80 | + filteredInfrastructures.map((createdInfra) => createdInfra._id), |
| 81 | +); |
| 82 | + |
| 83 | +const createdDepts = await Department.createMultiple(DEPTS); |
| 84 | + |
| 85 | +const createdTopics = await Topics.createMultiple(TOPICS); |
| 86 | + |
| 87 | +const MODULES = generateModules( |
| 88 | + createdTopics.map((createdTopic) => createdTopic._id), |
| 89 | +); |
| 90 | + |
| 91 | +const createdModules = await Module.createMultiple(MODULES); |
| 92 | + |
| 93 | +const PRACS = generatePracticals(); |
| 94 | + |
| 95 | +const createdPracs = await Practical.createMultiple(PRACS); |
| 96 | + |
| 97 | +const TUTS = generateTutorials(); |
| 98 | + |
| 99 | +const createdTuts = await Tutorial.createMultiple(TUTS); |
| 100 | + |
| 101 | +const SEMS = generateSemesters(); |
| 102 | + |
| 103 | +const createdSems = await Semester.createMultiple(SEMS); |
| 104 | + |
| 105 | +const COURSES = generateCourses( |
| 106 | + createdSems.map((createdSem) => createdSem._id), |
| 107 | + createdModules.map((createdModule) => createdModule._id), |
| 108 | + createdPracs.map((createdPrac) => createdPrac._id), |
| 109 | + createdTuts.map((createdTut) => createdTut._id), |
| 110 | + createdDepts.map((createdDept) => createdDept._id), |
| 111 | +); |
| 112 | + |
| 113 | +const createdCourses = await Course.createMultiple(COURSES); |
| 114 | + |
| 115 | +const FACULTY = generateFaculty( |
| 116 | + createdDepts.map((createdDept) => createdDept._id), |
| 117 | + createdCourses.map((createdCourse) => createdCourse._id), |
| 118 | +); |
| 119 | + |
| 120 | +const createdFaculty = await Faculty.createMultiple(FACULTY); |
| 121 | + |
| 122 | +const STUDENTS = generateStudents( |
| 123 | + createdDepts.map((createdDept) => createdDept._id), |
| 124 | + createdCourses.map((createdCourse) => createdCourse._id), |
| 125 | +); |
| 126 | + |
| 127 | +const createdStudents = await Student.createMultiple(STUDENTS); |
| 128 | + |
| 129 | +const studentCourseList = createdStudents.map((student) => { |
| 130 | + const studentId = student._id.toString(); |
| 131 | + const coursesOpted = student.coursesOpted.map((courseId) => |
| 132 | + courseId.toString(), |
| 133 | + ); |
| 134 | + return { studentId, coursesOpted }; |
| 135 | +}); |
| 136 | + |
| 137 | +const ATTENDANCE = generateAttendance(studentCourseList, 100); |
| 138 | + |
| 139 | +const createdAttendance = await Attendance.createMultiple(ATTENDANCE); // eslint-disable-line no-unused-vars |
| 140 | + |
| 141 | +const USERS = generateUsers( |
| 142 | + // TODO this takes forever bruhh |
| 143 | + createdStudents.map((createdStudent) => createdStudent.ERPID), |
| 144 | + createdFaculty.map((createdFac) => createdFac.ERPID), |
| 145 | + 10, |
| 146 | +); |
| 147 | + |
| 148 | +const createdUsers = await User.createMultiple(USERS); |
| 149 | + |
| 150 | +// const createdUsers = await User.read(); // use this after you initialized Users at least once, or wait for years every time |
| 151 | + |
| 152 | +const NOTIFS = generateNotifications( |
| 153 | + createdUsers // remove data from each of these if you are initializing users for the first time |
| 154 | + .filter((user) => user.userType === "STUDENT") |
| 155 | + .map((student) => student._id), |
| 156 | + createdUsers |
| 157 | + .filter((user) => user.userType === "FACULTY") |
| 158 | + .map((faculty) => faculty._id), |
| 159 | + createdUsers |
| 160 | + .filter((user) => user.userType === "ADMIN") |
| 161 | + .map((admin) => admin._id), |
| 162 | + 10, |
| 163 | +); |
| 164 | + |
| 165 | +const createdNotifications = await Notification.createMultiple(NOTIFS); // eslint-disable-line no-unused-vars |
| 166 | + |
| 167 | +const GROUPS = generateGroups( |
| 168 | + createdUsers |
| 169 | + .filter((user) => user.userType === "STUDENT") |
| 170 | + .map((student) => student._id), |
| 171 | +); |
| 172 | + |
| 173 | +const createdGroups = await Group.createMultiple(GROUPS); |
| 174 | + |
| 175 | +const ACTIVITYBP = generateActivityBP( |
| 176 | + createdInfras.map((createdInfra) => createdInfra._id), |
| 177 | + createdCourses.map((createdCourse) => createdCourse._id), |
| 178 | + createdFaculty.map((faculty) => faculty._id), |
| 179 | + createdGroups.map((createdGroup) => createdGroup._id), |
| 180 | +); |
| 181 | + |
| 182 | +const createdActivityBP = await ActivityBlueprint.createMultiple(ACTIVITYBP); |
| 183 | + |
| 184 | +const ACTIVITY = generateActivity( |
| 185 | + createdActivityBP.map((activityBP) => activityBP._id), |
| 186 | + createdCourses.map((createdCourse) => createdCourse._id), |
| 187 | + createdFaculty.map((faculty) => faculty._id), |
| 188 | + createdGroups.map((createdGroup) => createdGroup._id), |
| 189 | + createdTuts.map((createdTut) => createdTut._id), |
| 190 | + createdPracs.map((createdPrac) => createdPrac._id), |
| 191 | + createdTopics.map((createdTopic) => createdTopic._id), |
| 192 | + createdStudents.map((createdStudent) => createdStudent._id), |
| 193 | + 1000, |
| 194 | +); |
| 195 | + |
| 196 | +const createdActivity = await Activity.createMultiple(ACTIVITY); |
| 197 | + |
| 198 | +const EXAMS = generateExams( |
| 199 | + createdInfras.map((createdInfra) => createdInfra._id), |
| 200 | + createdCourses.map((createdCourse) => createdCourse._id), |
| 201 | + createdFaculty.map((faculty) => faculty._id), |
| 202 | +); |
| 203 | + |
| 204 | +const createdExams = await Exam.createMultiple(EXAMS); |
| 205 | + |
| 206 | +const PAPERS = generatePaper( |
| 207 | + createdStudents.map((createdStudent) => createdStudent._id), |
| 208 | + createdExams.map((createdExam) => createdExam._id), |
| 209 | + createdFaculty.map((faculty) => faculty._id), |
| 210 | +); |
| 211 | + |
| 212 | +const createdPapers = await Paper.createMultiple(PAPERS); // eslint-disable-line no-unused-vars |
| 213 | + |
| 214 | +const COURSEWORK = generateCoursework( |
| 215 | + createdStudents.map((createdStudent) => createdStudent._id), |
| 216 | + createdCourses.map((createdCourse) => createdCourse._id), |
| 217 | + createdTuts.map((createdTut) => createdTut._id), |
| 218 | + createdPracs.map((createdPrac) => createdPrac._id), |
| 219 | + createdActivity.map((activity) => activity._id), |
| 220 | +); |
| 221 | + |
| 222 | +const createdCoursework = await Coursework.createMultiple(COURSEWORK); // eslint-disable-line no-unused-vars |
| 223 | + |
| 224 | +const TIMETABLE = generateTimetables( |
| 225 | + createdActivityBP.map((activityBP) => activityBP._id), |
| 226 | + createdGroups.map((createdGroup) => createdGroup._id), |
| 227 | + createdFaculty.map((faculty) => faculty._id), |
| 228 | +); |
| 229 | + |
| 230 | +const createdTimetables = await Timetable.createMultiple(TIMETABLE); // eslint-disable-line no-unused-vars |
| 231 | + |
| 232 | +process.exit(0); |
0 commit comments