Skip to content

Commit 641e092

Browse files
Merge branch 'development' into validation-for-timetable
2 parents 2ef73e0 + aabfee3 commit 641e092

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+2140
-180
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

.github/workflows/dockerhub.yml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
name: Dockerhub
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: read
11+
12+
jobs:
13+
test:
14+
name: Uploading Img
15+
timeout-minutes: 30
16+
runs-on: ubuntu-latest
17+
steps:
18+
- name: Checkout
19+
uses: actions/checkout@v4
20+
- name: Building Docker Image
21+
run: docker build -t ${{ secrets.username }}/erp-backend:prod .
22+
- name: DockerHub Login
23+
run: docker login -u ${{ secrets.username }} -p ${{ secrets.pass }}
24+
- name: Uploading Image to DockerHub
25+
run: docker push ${{ secrets.username }}/erp-backend:prod

.gitignore

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

132132
# ingore genrated APIdocs
133-
apidoc
133+
apidoc
134+
135+
# data generated by mongo replicas
136+
data/

app.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import performarouter from "#routes/performance";
3131
import notificationRouter from "#routes/notification";
3232
import topicRouter from "#routes/topic";
3333
import courseRouter from "#routes/course";
34+
import activityBlueprintRouter from "#routes/activityBlueprint";
3435

3536
const app = express();
3637
const currDirName = dirname(fileURLToPath(import.meta.url));
@@ -76,5 +77,6 @@ app.use("/performance", performarouter);
7677
app.use("/notification", notificationRouter);
7778
app.use("/topic", topicRouter);
7879
app.use("/course", courseRouter);
80+
app.use("/activityBlueprint", activityBlueprintRouter);
7981

8082
export default app;

controller/activity.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ async function addActivity(req, res) {
1010
const {
1111
activityBlueprint,
1212
startTime,
13-
duration,
1413
course,
1514
faculty,
1615
type,
@@ -22,7 +21,6 @@ async function addActivity(req, res) {
2221
const newActivity = await createActivity(
2322
activityBlueprint,
2423
startTime,
25-
duration,
2624
course,
2725
faculty,
2826
type,

controller/activityBlueprint.js

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
import {
2+
createActivityBP,
3+
updateActivityBlueprintById,
4+
deleteActivityBlueprintById,
5+
activityBlueprintList,
6+
} from "#services/activityBlueprint";
7+
import { logger } from "#util";
8+
9+
async function addActivityBP(req, res) {
10+
const {
11+
number,
12+
academicYear,
13+
day,
14+
startTime,
15+
duration,
16+
infra,
17+
course,
18+
faculty,
19+
type,
20+
group,
21+
} = req.body;
22+
try {
23+
const newActivityBP = await createActivityBP(
24+
number,
25+
academicYear,
26+
day,
27+
startTime,
28+
duration,
29+
infra,
30+
course,
31+
faculty,
32+
type,
33+
group,
34+
);
35+
return res.json({
36+
res: `added activity ${newActivityBP.id}`,
37+
id: newActivityBP.id,
38+
});
39+
} catch (error) {
40+
logger.error("Error while inserting", error);
41+
res.status(500);
42+
return res.json({ err: "Error while inserting in DB" });
43+
}
44+
}
45+
46+
async function updateActivityBP(req, res) {
47+
const { id } = req.params;
48+
const { ...data } = req.body;
49+
try {
50+
await updateActivityBlueprintById(id, data);
51+
return res.json({ res: `updated activity with id ${id}` });
52+
} catch (error) {
53+
logger.error("Error while updating", error);
54+
res.status(500);
55+
return res.json({ err: "Error while updating in DB" });
56+
}
57+
}
58+
59+
async function getActivityBP(req, res) {
60+
try {
61+
const filter = req.body;
62+
const { limit, page } = req.query;
63+
const activitylist = await activityBlueprintList(filter, limit, page);
64+
return res.json({ res: activitylist });
65+
} catch (error) {
66+
logger.error("Error while fetching", error);
67+
res.status(500);
68+
return res.json({ err: "Error while fetching the data" });
69+
}
70+
}
71+
72+
async function deleteActivityBP(res, req) {
73+
const { id } = req.params;
74+
try {
75+
await deleteActivityBlueprintById(id);
76+
return res.json({ res: `Deleted activity with ID ${id}` });
77+
} catch (error) {
78+
logger.error("Error while deleting", error);
79+
return res.status(500).json({ error: "Error while deleting from DB" });
80+
}
81+
}
82+
83+
export default {
84+
addActivityBP,
85+
deleteActivityBP,
86+
getActivityBP,
87+
updateActivityBP,
88+
};

controller/course.js

Lines changed: 52 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ import {
55
updateCourseById,
66
} from "#services/course";
77
import { logger } from "#util";
8+
import { isEntityIdValid } from "#middleware/entityIdValidation";
9+
import Semester from "#models/semester";
10+
import Department from "#models/department";
11+
import Module from "#models/module";
12+
import Practical from "#models/practical";
13+
import Tutorial from "#models/tutorial";
14+
import Assignment from "#models/assignment";
815

916
async function addCourse(req, res) {
1017
const {
@@ -30,31 +37,52 @@ async function addCourse(req, res) {
3037
reccTextbooks,
3138
refBooks,
3239
} = req.body;
40+
41+
const isSemesterValid = await isEntityIdValid(semester, Semester);
42+
const isDepartmentValid = await isEntityIdValid(department, Department);
43+
const isModuleValid = await isEntityIdValid(modules, Module);
44+
const isPracticalValid = await isEntityIdValid(practicals, Practical);
45+
const isTutorialValid = await isEntityIdValid(tutorials, Tutorial);
46+
const isAssignmentValid = await isEntityIdValid(assignments, Assignment);
47+
3348
try {
34-
const newCourse = await createCourse(
35-
name,
36-
code,
37-
theoryHours,
38-
department,
39-
tutorialHours,
40-
practicalHours,
41-
ISAMarks,
42-
ESEMarks,
43-
tutorialMarks,
44-
practicalMarks,
45-
semester,
46-
subType,
47-
prerequisites,
48-
objective,
49-
outcomes,
50-
modules,
51-
practicals,
52-
tutorials,
53-
assignments,
54-
reccTextbooks,
55-
refBooks,
56-
);
57-
res.json({ res: `added course ${newCourse.ERPID}` });
49+
if (
50+
!isSemesterValid ||
51+
!isDepartmentValid ||
52+
!isModuleValid ||
53+
!isPracticalValid ||
54+
!isTutorialValid ||
55+
!isAssignmentValid
56+
) {
57+
res.status(400).json({
58+
error: "Invalid ID(s)",
59+
});
60+
} else {
61+
const newCourse = await createCourse(
62+
name,
63+
code,
64+
theoryHours,
65+
department,
66+
tutorialHours,
67+
practicalHours,
68+
ISAMarks,
69+
ESEMarks,
70+
tutorialMarks,
71+
practicalMarks,
72+
semester,
73+
subType,
74+
prerequisites,
75+
objective,
76+
outcomes,
77+
modules,
78+
practicals,
79+
tutorials,
80+
assignments,
81+
reccTextbooks,
82+
refBooks,
83+
);
84+
res.json({ res: `added course ${newCourse.ERPID}` });
85+
}
5886
} catch (error) {
5987
logger.error("Error while inserting", error);
6088
res.status(500);

controller/group.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,20 @@ import {
55
updateGroupById,
66
} from "#services/group";
77
import { logger } from "#util";
8+
import { isEntityIdValid } from "#middleware/entityIdValidation";
9+
import Student from '#models/student';
810

911
async function addGroup(req, res) {
1012
const { title, student } = req.body;
13+
const isStudentValid = await isEntityIdValid(student, Student);
1114
try {
15+
if(isStudentValid){
1216
const group = await createGroup(title, student);
1317
res.json({ res: `added group ${group.id}`, id: group.id });
18+
}
19+
else{
20+
res.status(400).json({err: "Invalid Id"});
21+
}
1422
} catch (error) {
1523
logger.error("Error while inserting", error);
1624
res.status(500);

controller/module.js

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import {
55
deleteModuleById,
66
} from "#services/module";
77
import { logger } from "#util";
8+
import { isEntityIdValid } from "#middleware/entityIdValidation";
9+
import Topic from "#models/topic";
810

911
async function showModule(req, res) {
1012
try {
@@ -21,15 +23,20 @@ async function showModule(req, res) {
2123

2224
async function addModule(req, res) {
2325
const { no, name, contents, hrsPerModule, cognitiveLevels } = req.body;
26+
const isTopicValid = await isEntityIdValid(contents, Topic);
2427
try {
25-
const newModule = await addNewModule(
26-
no,
27-
name,
28-
contents,
29-
hrsPerModule,
30-
cognitiveLevels,
31-
);
32-
res.json({ res: `added module ${newModule.name}` });
28+
if (isTopicValid) {
29+
const newModule = await addNewModule(
30+
no,
31+
name,
32+
contents,
33+
hrsPerModule,
34+
cognitiveLevels,
35+
);
36+
res.json({ res: `added module ${newModule.name} ${newModule.id}` });
37+
} else {
38+
res.status(400).json({ err: "Invalid name" , err: "Invalid id"});
39+
}
3340
} catch (error) {
3441
logger.error("Error while inserting", error);
3542
res.status(500);

controller/student.js

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,33 @@ import {
55
updateStudentById,
66
} from "#services/student";
77
import { logger } from "#util";
8+
import { isEntityIdValid } from "#middleware/entityIdValidation";
9+
import Department from "#models/department";
10+
import Course from "#models/course";
811

912
async function addStudent(req, res) {
1013
const { ERPID, name, joiningYear, branch, division, rollNo, coursesOpted } =
1114
req.body;
1215
try {
13-
const newStudent = await createStudent(
14-
ERPID,
15-
name,
16-
joiningYear,
17-
branch,
18-
division,
19-
rollNo,
20-
coursesOpted,
21-
);
22-
res.json({ res: `added user ${newStudent.id}`, id: newStudent.id });
16+
const isBranchValid = await isEntityIdValid(branch, Department);
17+
const isCourseValid = await isEntityIdValid(coursesOpted, Course);
18+
if (isBranchValid && isCourseValid) {
19+
const newStudent = await createStudent(
20+
ERPID,
21+
name,
22+
joiningYear,
23+
branch,
24+
division,
25+
rollNo,
26+
coursesOpted,
27+
);
28+
res.json({ res: `added user ${newStudent.id}`, id: newStudent.id });
29+
} else {
30+
var error = "";
31+
if (!isBranchValid) error.concat('Invalid branch');
32+
if (!isCourseValid) error.concat(' Invalid course opted');
33+
res.status(400).json({ err: error });
34+
}
2335
} catch (error) {
2436
logger.error("Error while inserting", error);
2537
res.status(500);

0 commit comments

Comments
 (0)