Skip to content

Commit 98c45eb

Browse files
Merge pull request #212 from UtkarshUmap/reject-endorsement
Implements Reject functionality for Endorsement Requests.
2 parents 641729c + bf915e7 commit 98c45eb

5 files changed

Lines changed: 370 additions & 172 deletions

File tree

backend/routes/achievements.js

Lines changed: 73 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4,50 +4,89 @@ const { Achievement } = require("../models/schema"); // Update path as needed
44
const { v4: uuidv4 } = require("uuid");
55
const isAuthenticated = require("../middlewares/isAuthenticated");
66
const authorizeRole = require("../middlewares/authorizeRole");
7-
const {ROLE_GROUPS} = require("../utils/roles");
7+
const { ROLE_GROUPS } = require("../utils/roles");
88

99
// GET unverified achievements by type (achievements which are pending to verify fetched by admins only)
10-
router.get("/unendorsed/:type",isAuthenticated, authorizeRole(ROLE_GROUPS.ADMIN), async (req, res) => {
11-
const { type } = req.params;
10+
router.get(
11+
"/unendorsed/:type",
12+
isAuthenticated,
13+
authorizeRole(ROLE_GROUPS.ADMIN),
14+
async (req, res) => {
15+
const { type } = req.params;
1216

13-
try {
14-
const unverifiedAchievements = await Achievement.find({
15-
type,
16-
verified: false,
17-
})
18-
.populate("user_id", "personal_info.name username user_id")
19-
.populate("event_id", "title description ");
17+
try {
18+
const unverifiedAchievements = await Achievement.find({
19+
type,
20+
verified: false,
21+
})
22+
.populate("user_id", "personal_info.name username user_id")
23+
.populate("event_id", "title description ");
2024

21-
res.json(unverifiedAchievements);
22-
} catch (err) {
23-
console.error(err);
24-
res
25-
.status(500)
26-
.json({ message: "Failed to fetch unverified achievements." });
27-
}
28-
});
25+
res.json(unverifiedAchievements);
26+
} catch (err) {
27+
console.error(err);
28+
res
29+
.status(500)
30+
.json({ message: "Failed to fetch unverified achievements." });
31+
}
32+
},
33+
);
2934

3035
// PATCH verify achievement by ID (achievements can be verified by admins only)
31-
router.patch("/verify/:id",isAuthenticated, authorizeRole(ROLE_GROUPS.ADMIN), async (req, res) => {
32-
const { id } = req.params;
33-
const { verified_by } = req.body; // Assuming you send the verifier's ID in the request body
34-
try {
35-
const achievement = await Achievement.findById(id);
36+
router.patch(
37+
"/verify/:id",
38+
isAuthenticated,
39+
authorizeRole(ROLE_GROUPS.ADMIN),
40+
async (req, res) => {
41+
const { id } = req.params;
42+
const { verified_by } = req.body; // Assuming you send the verifier's ID in the request body
43+
try {
44+
const achievement = await Achievement.findById(id);
45+
46+
if (!achievement) {
47+
return res.status(404).json({ message: "Achievement not found." });
48+
}
3649

37-
if (!achievement) {
38-
return res.status(404).json({ message: "Achievement not found." });
50+
achievement.verified = true;
51+
achievement.verified_by = verified_by;
52+
await achievement.save();
53+
54+
res.json({ message: "Achievement verified successfully.", achievement });
55+
} catch (err) {
56+
console.error(err);
57+
res.status(500).json({ message: "Failed to verify achievement." });
3958
}
59+
},
60+
);
4061

41-
achievement.verified = true;
42-
achievement.verified_by = verified_by;
43-
await achievement.save();
62+
// REJECT (delete) achievement by ID
63+
router.post(
64+
"/reject/:id",
65+
isAuthenticated,
66+
authorizeRole(ROLE_GROUPS.ADMIN),
67+
async (req, res) => {
68+
const { id } = req.params;
4469

45-
res.json({ message: "Achievement verified successfully.", achievement });
46-
} catch (err) {
47-
console.error(err);
48-
res.status(500).json({ message: "Failed to verify achievement." });
49-
}
50-
});
70+
try {
71+
const deletedAchievement = await Achievement.findByIdAndDelete(id);
72+
73+
if (!deletedAchievement) {
74+
return res.status(404).json({
75+
message: "Achievement not found.",
76+
});
77+
}
78+
79+
res.json({
80+
message: "Achievement rejected and deleted successfully.",
81+
});
82+
} catch (err) {
83+
console.error("Failed to reject achievement:", err);
84+
res.status(500).json({
85+
message: "Failed to reject achievement.",
86+
});
87+
}
88+
},
89+
);
5190

5291
//add achievement (achievements can be added by all the users (students -> their own ahieve, admins -> council achieve + student achieve))
5392
router.post("/add", isAuthenticated, async (req, res) => {

backend/routes/skillsRoutes.js

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,35 @@ router.post(
5353
},
5454
);
5555

56+
// REJECT (delete) a user skill
57+
router.post(
58+
"/user-skills/reject/:id",
59+
isAuthenticated,
60+
authorizeRole(ROLE_GROUPS.ADMIN),
61+
async (req, res) => {
62+
const skillId = req.params.id;
63+
64+
try {
65+
const deletedSkill = await UserSkill.findByIdAndDelete(skillId);
66+
67+
if (!deletedSkill) {
68+
return res.status(404).json({
69+
message: "User skill not found",
70+
});
71+
}
72+
73+
res.json({
74+
message: "User skill rejected and deleted successfully",
75+
});
76+
} catch (err) {
77+
console.error("Error rejecting user skill:", err);
78+
res.status(500).json({
79+
message: "Error rejecting user skill",
80+
});
81+
}
82+
},
83+
);
84+
5685
// GET all unendorsed skills by type
5786
router.get("/unendorsed/:type", isAuthenticated, async (req, res) => {
5887
const skillType = req.params.type;
@@ -92,6 +121,35 @@ router.post(
92121
},
93122
);
94123

124+
// REJECT (delete) a skill
125+
router.post(
126+
"/reject/:id",
127+
isAuthenticated,
128+
authorizeRole(ROLE_GROUPS.ADMIN),
129+
async (req, res) => {
130+
const skillId = req.params.id;
131+
132+
try {
133+
const deletedSkill = await Skill.findByIdAndDelete(skillId);
134+
135+
if (!deletedSkill) {
136+
return res.status(404).json({
137+
message: "Skill not found",
138+
});
139+
}
140+
141+
res.json({
142+
message: "Skill rejected and deleted successfully",
143+
});
144+
} catch (err) {
145+
console.error("Error rejecting skill:", err);
146+
res.status(500).json({
147+
message: "Failed to reject skill",
148+
});
149+
}
150+
},
151+
);
152+
95153
//get all endorsed skills
96154
router.get("/get-skills", isAuthenticated, async (req, res) => {
97155
try {
@@ -165,7 +223,7 @@ router.post("/create-user-skill", isAuthenticated, async (req, res) => {
165223
router.get("/top-skills", isAuthenticated, async (req, res) => {
166224
try {
167225
const topSkills = await UserSkill.aggregate([
168-
{$match:{is_endorsed: true}},
226+
{ $match: { is_endorsed: true } },
169227
{ $group: { _id: "$skill_id", totalUsers: { $sum: 1 } } },
170228
{ $sort: { totalUsers: -1 } },
171229
{ $limit: 5 },

0 commit comments

Comments
 (0)