Skip to content

Commit 6233d2b

Browse files
committed
added mocks for even more models
1 parent 0b2046e commit 6233d2b

File tree

15 files changed

+559
-21
lines changed

15 files changed

+559
-21
lines changed

.env.example

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
PORT=4000
2+
TOKEN_SECRET=mysecret
3+
ENVIRONMENT=local
4+
DB_URL=mongodb://mongo1:30001,mongo2:30002,mongo3:30003/?replicaSet=my-replica-set
5+
EMAIL_HOST=
6+
EMAIL_PORT=
7+
EMAIL_USER=
8+
EMAIL_PASS=
9+
10+
# get email stuff from mailtrap

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,4 +130,5 @@ dist
130130
.pnp.*
131131

132132
# ingore genrated APIdocs
133-
apidoc
133+
apidoc
134+
data/

misc/initDB.js

Lines changed: 64 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ import Tutorial from "#models/tutorial";
99
import Practical from "#models/practical";
1010
import Semester from "#models/semester";
1111
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";
1217
import generateOrganizations from "#mockDB/orgMock";
1318
import ACCREDS from "#mockDB/accredMock";
1419
import TOPICS from "#mockDB/topicMock";
@@ -19,6 +24,11 @@ import generatePracticals from "#mockDB/pracMock";
1924
import generateTutorials from "#mockDB/tutMock";
2025
import generateSemesters from "#mockDB/semMock";
2126
import generateCourses from "#mockDB/courseMock";
27+
import generateFaculty from "#mockDB/facultyMock";
28+
import generateStudents from "#mockDB/studentMock";
29+
import generateAttendance from "#mockDB/attendanceMock";
30+
import generateNotifications from "#mockDB/notificationMock";
31+
import generateUsers from "#mockDB/userMock"; // eslint-disable-line no-unused-vars
2232
/* eslint-disable no-underscore-dangle */
2333
const createdAccreds = await Accreditation.createMultiple(ACCREDS);
2434

@@ -86,6 +96,59 @@ const COURSES = generateCourses(
8696
createdDepts.map((createdDept) => createdDept._id),
8797
);
8898

89-
const createdCourses = await Course.createMultiple(COURSES); // eslint-disable-line no-unused-vars
99+
const createdCourses = await Course.createMultiple(COURSES);
100+
101+
const FACULTY = generateFaculty(
102+
createdDepts.map((createdDept) => createdDept._id),
103+
createdCourses.map((createdCourse) => createdCourse._id),
104+
);
105+
106+
const createdFaculty = await Faculty.createMultiple(FACULTY);
107+
108+
const STUDENTS = generateStudents(
109+
createdDepts.map((createdDept) => createdDept._id),
110+
createdCourses.map((createdCourse) => createdCourse._id),
111+
);
112+
113+
const createdStudents = await Student.createMultiple(STUDENTS);
114+
115+
const studentCourseList = createdStudents.map((student) => {
116+
const studentId = student._id.toString();
117+
const coursesOpted = student.coursesOpted.map((courseId) =>
118+
courseId.toString(),
119+
);
120+
return { studentId, coursesOpted };
121+
});
122+
123+
const ATTENDANCE = generateAttendance(studentCourseList);
124+
125+
const createdAttendance = await Attendance.createMultiple(ATTENDANCE);
126+
127+
// const USERS = generateUsers( // TODO this takes forever bruhh
128+
// createdStudents.map((createdStudent) => createdStudent.ERPID),
129+
// createdFaculty.map((createdFaculty) => createdFaculty.ERPID),
130+
// )
131+
132+
// const createdUsers = await User.createMultiple(USERS)
133+
134+
const createdUsers = await User.read(); // use this after you initialized Users at least once, or wait for years every time
135+
136+
const NOTIFS = generateNotifications(
137+
createdUsers.data
138+
.filter((user) => user.userType === "STUDENT")
139+
.map((student) => student._id),
140+
createdUsers.data
141+
.filter((user) => user.userType === "FACULTY")
142+
.map((faculty) => faculty._id),
143+
createdUsers.data
144+
.filter((user) => user.userType === "ADMIN")
145+
.map((admin) => admin._id),
146+
);
147+
148+
const createdNotifications = await Notification.createMultiple(NOTIFS);
149+
150+
console.log(createdNotifications);
151+
console.log(createdAttendance);
152+
console.log(createdFaculty);
90153

91154
process.exit(0);

misc/mockDB/attendanceMock.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { faker } from "@faker-js/faker"; // eslint-disable-line import/no-extraneous-dependencies
2+
3+
const createRandomAttendance = (studentId, courseId) => {
4+
const monthlyAttendedInt = faker.number.int({ min: 0, max: 25 });
5+
return {
6+
student: studentId,
7+
course: courseId,
8+
monthlyAttended: monthlyAttendedInt,
9+
monthlyOccured: faker.number.int({ min: 25, max: 27 }),
10+
cumulativeAttended:
11+
monthlyAttendedInt + faker.number.int({ min: 0, max: 150 }),
12+
cumulativeOccured:
13+
monthlyAttendedInt + faker.number.int({ min: 150, max: 175 }),
14+
};
15+
};
16+
17+
const generateAttendance = (studentCourseList) => {
18+
const attendance = [];
19+
for (let i = 0, j = 0; i < studentCourseList.length; j += 1) {
20+
attendance.push(
21+
createRandomAttendance(
22+
studentCourseList[i].studentId,
23+
studentCourseList[i].coursesOpted[j],
24+
),
25+
);
26+
if (j >= 6) {
27+
i += 1;
28+
j = 0;
29+
}
30+
}
31+
return attendance;
32+
};
33+
34+
export default generateAttendance;

misc/mockDB/facultyMock.js

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
import { faker } from "@faker-js/faker"; // eslint-disable-line import/no-extraneous-dependencies
2+
3+
function getRandomLetter() {
4+
const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
5+
const randomIndex = Math.floor(Math.random() * alphabet.length);
6+
return alphabet[randomIndex];
7+
}
8+
9+
function randomDate(start, end) {
10+
return new Date(
11+
start.getTime() + Math.random() * (end.getTime() - start.getTime()),
12+
);
13+
}
14+
15+
// Function to generate random 4-digit number
16+
function getRandomNumber() {
17+
return Math.floor(1000 + Math.random() * 9000);
18+
}
19+
20+
const generatedIDs = [];
21+
22+
const createRandomFaculty = (departmentId, createdCourses) => {
23+
let id;
24+
do {
25+
const letter = getRandomLetter();
26+
const number = getRandomNumber();
27+
id = `F${letter}${number}`;
28+
} while (generatedIDs.includes(id));
29+
generatedIDs.push(id);
30+
const doj = faker.date.past({ years: 5 });
31+
return {
32+
ERPID: id,
33+
dateOfJoining: doj,
34+
dateOfLeaving: faker.datatype.boolean({ probability: 0.4 })
35+
? randomDate(doj, new Date())
36+
: null,
37+
profileLink: faker.internet.url(),
38+
qualifications: [
39+
faker.lorem.word(),
40+
faker.lorem.word(),
41+
faker.lorem.word(),
42+
],
43+
totalExperience: faker.number.int({ min: 1, max: 20 }),
44+
achievements: [
45+
faker.lorem.words(),
46+
faker.lorem.words(),
47+
faker.lorem.words(),
48+
],
49+
areaOfSpecialization: [
50+
faker.lorem.word(),
51+
faker.lorem.word(),
52+
faker.lorem.word(),
53+
],
54+
papersPublishedPG: faker.number.int({ min: 0, max: 50 }),
55+
papersPublishedUG: faker.number.int({ min: 0, max: 50 }),
56+
department: departmentId,
57+
preferredSubjects: createdCourses,
58+
designation: faker.helpers.arrayElements(
59+
[
60+
"HOD",
61+
"Assistant Professor",
62+
"Associate Professor",
63+
"Activity Head",
64+
"Professor",
65+
"Director",
66+
"T&P Officer",
67+
"R&D Activity Head",
68+
],
69+
{ min: 1, max: 3 },
70+
),
71+
natureOfAssociation: faker.helpers.arrayElement([
72+
"Regular",
73+
"Contract",
74+
"Adjunct",
75+
]),
76+
additionalResponsibilities: faker.lorem.words(),
77+
};
78+
};
79+
80+
const generateFaculty = (createdDepts, createdCourses) => {
81+
const faculty = [];
82+
let selectedCourses;
83+
for (let i = 0, j = 1; i < createdDepts.length; j += 1) {
84+
selectedCourses = faker.helpers.arrayElements(createdCourses, {
85+
min: 4,
86+
max: 8,
87+
});
88+
faculty.push(createRandomFaculty(createdDepts[i], selectedCourses));
89+
if (j > 30) {
90+
i += 1;
91+
j = 0;
92+
}
93+
}
94+
return faculty;
95+
};
96+
97+
export default generateFaculty;

misc/mockDB/notificationMock.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { faker } from "@faker-js/faker"; // eslint-disable-line import/no-extraneous-dependencies
2+
3+
const generateNotifications = (studentIds, facultyIds, adminIds) => {
4+
const notifications = [];
5+
const notificationTypes = ["Student", "Faculty"];
6+
7+
for (let i = 0; i < 300; i += 1) {
8+
const notification = {
9+
data: faker.lorem.lines({ min: 3, max: 7 }),
10+
title: faker.lorem.sentence(),
11+
from: faker.helpers.arrayElement([...facultyIds, ...adminIds]),
12+
type: faker.helpers.arrayElement(notificationTypes),
13+
filter: [],
14+
};
15+
16+
if (notification.type === "Student") {
17+
notification.filter = faker.helpers.arrayElements(studentIds, {
18+
min: 5,
19+
max: 100,
20+
});
21+
} else {
22+
notification.filter = faker.helpers.arrayElements(
23+
[...facultyIds, ...adminIds],
24+
{ min: 5, max: 100 },
25+
);
26+
}
27+
notifications.push(notification);
28+
}
29+
30+
return notifications;
31+
};
32+
33+
export default generateNotifications;

misc/mockDB/studentMock.js

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import { faker } from "@faker-js/faker"; // eslint-disable-line import/no-extraneous-dependencies
2+
3+
const departmentAbbrev = [
4+
"ME",
5+
"CE",
6+
"CS",
7+
"IT",
8+
"ETE",
9+
"ECS",
10+
"AIDS",
11+
"IOT",
12+
"AIML",
13+
"CSS",
14+
"MEMM",
15+
"AIDS",
16+
"SD",
17+
"AGD",
18+
"DA",
19+
];
20+
21+
function generateRandomYear() {
22+
const currentYear = new Date().getFullYear();
23+
const availableYears = Array.from(
24+
{ length: 4 },
25+
(_, index) => currentYear - index,
26+
);
27+
const randomIndex = Math.floor(Math.random() * availableYears.length);
28+
return availableYears[randomIndex].toString().slice(-2);
29+
}
30+
31+
function generateRandomThreeDigitNumber() {
32+
return Math.floor(100 + Math.random() * 900);
33+
}
34+
35+
function generateStudentID(i) {
36+
const departmentInitials = departmentAbbrev[i];
37+
const year = generateRandomYear();
38+
const randomThreeDigitNumber = generateRandomThreeDigitNumber();
39+
return `S${departmentInitials}${year}${randomThreeDigitNumber}`;
40+
}
41+
42+
const generatedIDs = [];
43+
44+
const createRandomStudent = (department, createdCourses, k, j, i) => {
45+
let id;
46+
let divisionLetter;
47+
do id = generateStudentID(i);
48+
while (generatedIDs.includes(id));
49+
generatedIDs.push(id);
50+
if (j >= 120) divisionLetter = "C";
51+
else if (j >= 60) divisionLetter = "B";
52+
else divisionLetter = "A";
53+
return {
54+
ERPID: id,
55+
name: faker.person.fullName(),
56+
joiningYear: new Date().getFullYear() - k,
57+
branch: department,
58+
division: divisionLetter,
59+
rollNo: (j % 60) + 1,
60+
coursesOpted: createdCourses,
61+
};
62+
};
63+
64+
const generateStudents = (createdDepts, createdCourses) => {
65+
const students = [];
66+
let selectedCourses;
67+
for (let i = 0, j = 0, k = 0; k < 4; j += 1) {
68+
selectedCourses = faker.helpers.arrayElements(createdCourses, 7);
69+
students.push(
70+
createRandomStudent(createdDepts[i], selectedCourses, k, j, i),
71+
);
72+
if (j >= 179) {
73+
i += 1;
74+
j = -1;
75+
}
76+
if (i === createdDepts.length) {
77+
i = 0;
78+
k += 1;
79+
}
80+
}
81+
return students;
82+
};
83+
84+
export default generateStudents;

0 commit comments

Comments
 (0)