Skip to content

Commit

Permalink
Merge branch 'development' into validation-for-timetable
Browse files Browse the repository at this point in the history
  • Loading branch information
TejasNair9977 authored Nov 8, 2023
2 parents 2ef73e0 + aabfee3 commit 641e092
Show file tree
Hide file tree
Showing 50 changed files with 2,140 additions and 180 deletions.
10 changes: 10 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
PORT=4000
TOKEN_SECRET=mysecret
ENVIRONMENT=local
DB_URL=mongodb://mongo1:30001,mongo2:30002,mongo3:30003/?replicaSet=my-replica-set
EMAIL_HOST=
EMAIL_PORT=
EMAIL_USER=
EMAIL_PASS=

# get email stuff from mailtrap
25 changes: 25 additions & 0 deletions .github/workflows/dockerhub.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: Dockerhub

on:
push:
branches:
- main
workflow_dispatch:

permissions:
contents: read

jobs:
test:
name: Uploading Img
timeout-minutes: 30
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Building Docker Image
run: docker build -t ${{ secrets.username }}/erp-backend:prod .
- name: DockerHub Login
run: docker login -u ${{ secrets.username }} -p ${{ secrets.pass }}
- name: Uploading Image to DockerHub
run: docker push ${{ secrets.username }}/erp-backend:prod
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -130,4 +130,7 @@ dist
.pnp.*

# ingore genrated APIdocs
apidoc
apidoc

# data generated by mongo replicas
data/
2 changes: 2 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import performarouter from "#routes/performance";
import notificationRouter from "#routes/notification";
import topicRouter from "#routes/topic";
import courseRouter from "#routes/course";
import activityBlueprintRouter from "#routes/activityBlueprint";

const app = express();
const currDirName = dirname(fileURLToPath(import.meta.url));
Expand Down Expand Up @@ -76,5 +77,6 @@ app.use("/performance", performarouter);
app.use("/notification", notificationRouter);
app.use("/topic", topicRouter);
app.use("/course", courseRouter);
app.use("/activityBlueprint", activityBlueprintRouter);

export default app;
2 changes: 0 additions & 2 deletions controller/activity.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ async function addActivity(req, res) {
const {
activityBlueprint,
startTime,
duration,
course,
faculty,
type,
Expand All @@ -22,7 +21,6 @@ async function addActivity(req, res) {
const newActivity = await createActivity(
activityBlueprint,
startTime,
duration,
course,
faculty,
type,
Expand Down
88 changes: 88 additions & 0 deletions controller/activityBlueprint.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import {
createActivityBP,
updateActivityBlueprintById,
deleteActivityBlueprintById,
activityBlueprintList,
} from "#services/activityBlueprint";
import { logger } from "#util";

async function addActivityBP(req, res) {
const {
number,
academicYear,
day,
startTime,
duration,
infra,
course,
faculty,
type,
group,
} = req.body;
try {
const newActivityBP = await createActivityBP(
number,
academicYear,
day,
startTime,
duration,
infra,
course,
faculty,
type,
group,
);
return res.json({
res: `added activity ${newActivityBP.id}`,
id: newActivityBP.id,
});
} catch (error) {
logger.error("Error while inserting", error);
res.status(500);
return res.json({ err: "Error while inserting in DB" });
}
}

async function updateActivityBP(req, res) {
const { id } = req.params;
const { ...data } = req.body;
try {
await updateActivityBlueprintById(id, data);
return res.json({ res: `updated activity with id ${id}` });
} catch (error) {
logger.error("Error while updating", error);
res.status(500);
return res.json({ err: "Error while updating in DB" });
}
}

async function getActivityBP(req, res) {
try {
const filter = req.body;
const { limit, page } = req.query;
const activitylist = await activityBlueprintList(filter, limit, page);
return res.json({ res: activitylist });
} catch (error) {
logger.error("Error while fetching", error);
res.status(500);
return res.json({ err: "Error while fetching the data" });
}
}

async function deleteActivityBP(res, req) {
const { id } = req.params;
try {
await deleteActivityBlueprintById(id);
return res.json({ res: `Deleted activity with ID ${id}` });
} catch (error) {
logger.error("Error while deleting", error);
return res.status(500).json({ error: "Error while deleting from DB" });
}
}

export default {
addActivityBP,
deleteActivityBP,
getActivityBP,
updateActivityBP,
};
76 changes: 52 additions & 24 deletions controller/course.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ import {
updateCourseById,
} from "#services/course";
import { logger } from "#util";
import { isEntityIdValid } from "#middleware/entityIdValidation";
import Semester from "#models/semester";
import Department from "#models/department";
import Module from "#models/module";
import Practical from "#models/practical";
import Tutorial from "#models/tutorial";
import Assignment from "#models/assignment";

async function addCourse(req, res) {
const {
Expand All @@ -30,31 +37,52 @@ async function addCourse(req, res) {
reccTextbooks,
refBooks,
} = req.body;

const isSemesterValid = await isEntityIdValid(semester, Semester);
const isDepartmentValid = await isEntityIdValid(department, Department);
const isModuleValid = await isEntityIdValid(modules, Module);
const isPracticalValid = await isEntityIdValid(practicals, Practical);
const isTutorialValid = await isEntityIdValid(tutorials, Tutorial);
const isAssignmentValid = await isEntityIdValid(assignments, Assignment);

try {
const newCourse = await createCourse(
name,
code,
theoryHours,
department,
tutorialHours,
practicalHours,
ISAMarks,
ESEMarks,
tutorialMarks,
practicalMarks,
semester,
subType,
prerequisites,
objective,
outcomes,
modules,
practicals,
tutorials,
assignments,
reccTextbooks,
refBooks,
);
res.json({ res: `added course ${newCourse.ERPID}` });
if (
!isSemesterValid ||
!isDepartmentValid ||
!isModuleValid ||
!isPracticalValid ||
!isTutorialValid ||
!isAssignmentValid
) {
res.status(400).json({
error: "Invalid ID(s)",
});
} else {
const newCourse = await createCourse(
name,
code,
theoryHours,
department,
tutorialHours,
practicalHours,
ISAMarks,
ESEMarks,
tutorialMarks,
practicalMarks,
semester,
subType,
prerequisites,
objective,
outcomes,
modules,
practicals,
tutorials,
assignments,
reccTextbooks,
refBooks,
);
res.json({ res: `added course ${newCourse.ERPID}` });
}
} catch (error) {
logger.error("Error while inserting", error);
res.status(500);
Expand Down
8 changes: 8 additions & 0 deletions controller/group.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,20 @@ import {
updateGroupById,
} from "#services/group";
import { logger } from "#util";
import { isEntityIdValid } from "#middleware/entityIdValidation";
import Student from '#models/student';

async function addGroup(req, res) {
const { title, student } = req.body;
const isStudentValid = await isEntityIdValid(student, Student);
try {
if(isStudentValid){
const group = await createGroup(title, student);
res.json({ res: `added group ${group.id}`, id: group.id });
}
else{
res.status(400).json({err: "Invalid Id"});
}
} catch (error) {
logger.error("Error while inserting", error);
res.status(500);
Expand Down
23 changes: 15 additions & 8 deletions controller/module.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import {
deleteModuleById,
} from "#services/module";
import { logger } from "#util";
import { isEntityIdValid } from "#middleware/entityIdValidation";
import Topic from "#models/topic";

async function showModule(req, res) {
try {
Expand All @@ -21,15 +23,20 @@ async function showModule(req, res) {

async function addModule(req, res) {
const { no, name, contents, hrsPerModule, cognitiveLevels } = req.body;
const isTopicValid = await isEntityIdValid(contents, Topic);
try {
const newModule = await addNewModule(
no,
name,
contents,
hrsPerModule,
cognitiveLevels,
);
res.json({ res: `added module ${newModule.name}` });
if (isTopicValid) {
const newModule = await addNewModule(
no,
name,
contents,
hrsPerModule,
cognitiveLevels,
);
res.json({ res: `added module ${newModule.name} ${newModule.id}` });
} else {
res.status(400).json({ err: "Invalid name" , err: "Invalid id"});
}
} catch (error) {
logger.error("Error while inserting", error);
res.status(500);
Expand Down
32 changes: 22 additions & 10 deletions controller/student.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,33 @@ import {
updateStudentById,
} from "#services/student";
import { logger } from "#util";
import { isEntityIdValid } from "#middleware/entityIdValidation";
import Department from "#models/department";
import Course from "#models/course";

async function addStudent(req, res) {
const { ERPID, name, joiningYear, branch, division, rollNo, coursesOpted } =
req.body;
try {
const newStudent = await createStudent(
ERPID,
name,
joiningYear,
branch,
division,
rollNo,
coursesOpted,
);
res.json({ res: `added user ${newStudent.id}`, id: newStudent.id });
const isBranchValid = await isEntityIdValid(branch, Department);
const isCourseValid = await isEntityIdValid(coursesOpted, Course);
if (isBranchValid && isCourseValid) {
const newStudent = await createStudent(
ERPID,
name,
joiningYear,
branch,
division,
rollNo,
coursesOpted,
);
res.json({ res: `added user ${newStudent.id}`, id: newStudent.id });
} else {
var error = "";
if (!isBranchValid) error.concat('Invalid branch');
if (!isCourseValid) error.concat(' Invalid course opted');
res.status(400).json({ err: error });
}
} catch (error) {
logger.error("Error while inserting", error);
res.status(500);
Expand Down
Loading

0 comments on commit 641e092

Please sign in to comment.