Skip to content

Commit 3c3d075

Browse files
authored
Merge pull request #130 from manipalutsav/testing
2 parents fc8781d + 916c737 commit 3c3d075

File tree

7 files changed

+119
-10
lines changed

7 files changed

+119
-10
lines changed

src/app.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ const practiceSlot = require("./routes/practiceSlot");
7171
const notifications = require("./routes/notifications");
7272
const settings = require("./routes/settings");
7373
const slotting = require("./routes/slotting");
74+
const feedback = require("./routes/feedback");
7475

7576
app.use("/colleges", collegesRouter);
7677
app.use("/events", eventsRouter);
@@ -88,7 +89,7 @@ app.use("/practiceSlots", practiceSlot);
8889
app.use("/notifications", notifications);
8990
app.use("/settings", settings);
9091
app.use("/slotting", slotting);
91-
92+
app.use("/feedback", feedback)
9293

9394
// Error handlers
9495
app.use(handle404);

src/controllers/feedback.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
const Feedback = require("../models/Feedback");
2+
3+
exports.create = async(req, res) => {
4+
try{
5+
const {rating, comment, signature, judge, event} = req.body;
6+
if(!rating || !comment, !signature || !judge || !event){
7+
return res.status(400).json({
8+
status: 400,
9+
message: "Rating, comment, signature, judge id and event id are required ⁉️",
10+
});
11+
}
12+
const feedback = await Feedback({
13+
rating,
14+
comment,
15+
signature,
16+
judge,
17+
event
18+
})
19+
const result = await feedback.save();
20+
return res.status(200).json({
21+
status: 200,
22+
message: "Success",
23+
data: result
24+
});
25+
}catch(e){
26+
return res.status(501).json({
27+
status: 501,
28+
message: "Internal Server Error ❌",
29+
});
30+
}
31+
}
32+
33+
exports.getFeedbackForAnEvent = async(req, res) => {
34+
try{
35+
const {event} = req.body;
36+
if(!event){
37+
return res.status(400).json({
38+
status: 400,
39+
message: "Event id is required ⁉️",
40+
});
41+
}
42+
const feedback = await Feedback.find({ event }).populate("judge", "name");
43+
if(!feedback){
44+
return res.status(404).json({
45+
status: 404,
46+
message: "No feedback found for the event 🚫",
47+
});
48+
}
49+
return res.status(200).json({
50+
status: 200,
51+
message: "Success",
52+
data: feedback
53+
});
54+
}catch(e){
55+
return res.status(501).json({
56+
status: 501,
57+
message: "Internal Server Error ❌",
58+
});
59+
}
60+
}

src/controllers/judges.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
"use strict";
2-
2+
const ObjectId = require("mongodb").ObjectId;
33
const JudgeModel = require("../models/Judge");
44
const JudgeScoreModel = require("../models/JudgeScore");
5-
5+
const FeedbackModel = require("../models/Feedback");
66
const getAll = async (req, res) => {
77
try {
88
let judges = await JudgeModel.find();
@@ -89,16 +89,17 @@ const create = async (req, res) => {
8989
}
9090
};
9191
/**
92-
* Deletes a judge by ID and removes all associated judge score records.
92+
* Deletes a judge by ID and removes all associated judge score records and feedback.
9393
*
9494
* This function:
9595
* 1. Extracts the judge ID from the request parameters.
9696
* 2. Checks if the judge exists in the database.
9797
* 3. If the judge does not exist, returns a 404 error response.
9898
* 4. Deletes all `JudgeScore` records linked to the specified judge.
99-
* 5. Deletes the judge record from the database.
100-
* 6. Returns a success response if the operation is completed successfully.
101-
* 7. Handles any errors by returning a 500 Internal Server Error response.
99+
* 5. Deletes all `Feedback` records linked to the specified judge.
100+
* 6. Deletes the judge record from the database.
101+
* 7. Returns a success response if the operation is completed successfully.
102+
* 8. Handles any errors by returning a 500 Internal Server Error response.
102103
*
103104
* @param {Object} req - Express request object containing the judge ID in `req.params.id`.
104105
* @param {Object} res - Express response object for sending JSON responses.
@@ -122,6 +123,7 @@ const deleteJudgeById = async (req, res) => {
122123

123124
// Delete the judge
124125
await JudgeModel.findByIdAndDelete(judge_id);
126+
await FeedbackModel.deleteOne({judge: ObjectId((judge_id))});
125127

126128
return res.json({
127129
status: 200,

src/controllers/settings.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ const get = async (req, res) => {
3232
data: settings[setting],
3333
});
3434
}
35-
3635
return res.json({
3736
status: 404,
3837
message: "No setting found with the given name",
@@ -70,8 +69,9 @@ const getAll = async (req, res) => {
7069
};
7170

7271
const updateSettings = async (req, res) => {
73-
let { title, editTeamEnabled } = req.body;
74-
if( title === null || editTeamEnabled === null) {
72+
73+
let { title, editTeamEnabled, downloadCertificateEnabled } = req.body;
74+
if( title === null || editTeamEnabled === null || downloadCertificateEnabled === null) {
7575
return res.status(404).json({
7676
status: 400,
7777
message: "Bad request",
@@ -85,10 +85,12 @@ const updateSettings = async (req, res) => {
8585
setting = await SettingModel.create({
8686
title: title,
8787
editTeamEnabled: editTeamEnabled,
88+
downloadCertificateEnabled: downloadCertificateEnabled,
8889
});
8990
}else{
9091
setting.title = title;
9192
setting.editTeamEnabled = editTeamEnabled;
93+
setting.downloadCertificateEnabled = downloadCertificateEnabled;
9294
await setting.save();
9395
}
9496

src/models/Feedback.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const mongoose = require("mongoose");
2+
3+
const schema = {
4+
rating:{
5+
type: Number,
6+
required: true
7+
},
8+
comment: {
9+
type: String
10+
},
11+
signature: {
12+
type: String,
13+
required: true
14+
},
15+
judge: {
16+
type: mongoose.Schema.Types.ObjectId,
17+
ref: "Judge",
18+
required: true
19+
},
20+
event: {
21+
type: mongoose.Schema.Types.ObjectId,
22+
ref: "Event",
23+
required: true
24+
}
25+
};
26+
27+
const options = {
28+
autoCreate: true,
29+
};
30+
31+
const feedbackSchema = new mongoose.Schema(schema, options);
32+
33+
module.exports = mongoose.model("Feedback", feedbackSchema);

src/models/Setting.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ const schema = {
1010
type: Boolean,
1111
required: true,
1212
},
13+
downloadCertificateEnabled:{
14+
type: Boolean,
15+
required: true,
16+
}
1317
};
1418

1519
const options = {

src/routes/feedback.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const router = require("express").Router();
2+
const { create, getFeedbackForAnEvent } = require("../controllers/feedback");
3+
4+
router.post("/", create);
5+
router.post("/getFeedback", getFeedbackForAnEvent);
6+
7+
module.exports = router;

0 commit comments

Comments
 (0)