Skip to content

Commit 77a0e78

Browse files
committed
fix(users-controller):
1 parent 3fb774f commit 77a0e78

3 files changed

Lines changed: 21 additions & 106 deletions

File tree

src/app.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ const express = require("express");
33
const cookieParser = require("cookie-parser");
44
const globalErrorHandler = require("./error/middleware");
55
const { authorizeFromToken } = require("./auth/middleware");
6+
const CustomError = require("./error/utils/customError");
67

78
const app = express();
89

@@ -22,7 +23,7 @@ app.use("/api/v1/notifications", require("./notification/routes"));
2223
app.use("/api/v1/products", require("./product/routes"));
2324
app.use("/api/v1/upload", require("./upload/routes"));
2425

25-
// app.use("/api/v1/users", require("./user/routes"));
26+
app.use("/api/v1/users", require("./user/routes"));
2627
app.use("/api/v1/orders", require("./order/routes"));
2728
app.use("/api/v1/payments", require("./payment/routes"));
2829
app.use("/api/v1/referrals", require("./referral/routes"));

src/user/controller.js

Lines changed: 15 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
const User = require("./model");
22
const asyncErrorHandler = require("../utils/asyncErrorHandler");
3+
const CustomError = require("../error/utils/customError");
34

45
// Get all users
56
const getUsers = asyncErrorHandler(async (req, res) => {
67
const users = await User.find();
78
if (!users) {
8-
return res.status(404).json({
9-
success: false,
10-
message: "No users found",
11-
});
9+
throw new CustomError("No users found", 404);
1210
}
1311

1412
res.status(200).json({
@@ -38,62 +36,17 @@ const getUserById = asyncErrorHandler(async (req, res) => {
3836

3937
// Update user by ID
4038
const updateUser = asyncErrorHandler(async (req, res) => {
41-
const { id } = req.params;
42-
const { operation } = req.body;
39+
const user = await User.findByIdAndUpdate(req.params.id, req.body, {
40+
new: true,
41+
});
4342

44-
const user = await User.findById(id);
4543
if (!user) throw new CustomError("User not found", 404);
4644

47-
switch (operation) {
48-
case "UPDATE_PROFILE":
49-
Object.assign(user, req.body);
50-
await user.save();
51-
return res.status(200).json({
52-
success: true,
53-
message: "Profile updated successfully",
54-
user,
55-
});
56-
57-
case "UPDATE_PASSWORD":
58-
const { currentPassword, newPassword } = req.body;
59-
// Check current password
60-
const isMatch = await bcrypt.compare(currentPassword, user.password);
61-
if (!isMatch) throw new CustomError("Current password is incorrect", 401);
62-
63-
// Hash new password
64-
user.password = await bcrypt.hash(newPassword, 12);
65-
await user.save();
66-
return res.status(200).json({
67-
success: true,
68-
message: "Password updated successfully",
69-
});
70-
71-
case "UPDATE_ROLE":
72-
// Middleware already ensures req.user.role === 'ADMIN'
73-
// middleware already ensures req.role esists
74-
75-
user.role = role;
76-
await user.save();
77-
78-
// Generate a new JWT since the user's role changed
79-
const newToken = signJwtToken(user._id, user.username, user.role);
80-
81-
// Send new token in cookie
82-
res.cookie("jwt-token", newToken, {
83-
httpOnly: true,
84-
secure: process.env.NODE_ENV === "production",
85-
maxAge: 24 * 60 * 60 * 1000, // 1 day
86-
});
87-
88-
return res.status(200).json({
89-
success: true,
90-
message: "Role updated successfully",
91-
data: { _id: user._id, role: user.role },
92-
});
93-
94-
default:
95-
throw new CustomError("Invalid operation", 400);
96-
}
45+
res.status(200).json({
46+
success: true,
47+
message: "User updated successfully!",
48+
user,
49+
});
9750
});
9851

9952
// Delete user by ID
@@ -103,39 +56,15 @@ const deleteUser = asyncErrorHandler(async (req, res, next) => {
10356

10457
if (!deletedUser) throw new CustomError("User not found", 404);
10558

106-
// Extract cart and preferences from deleted user
107-
const {
108-
cart = [],
109-
preferences = { theme: "light" },
110-
settings = {},
111-
} = deletedUser;
112-
113-
// Clear auth cookies (JWT + session)
114-
res.clearCookie("jwt-token", {
115-
httpOnly: true,
116-
secure: process.env.NODE_ENV === "production",
117-
});
118-
119-
// Initialize guest session using user's previous data
120-
req.session.guest = true;
121-
req.session.cart = cart;
122-
req.session.preferences = preferences;
123-
req.session.settings = settings;
124-
req.session.consent = {
125-
necessary: true,
126-
preferences: true,
127-
settings: true,
128-
analytics: false,
129-
marketing: false,
130-
};
59+
// res.clearCookie("access-token", {
60+
// httpOnly: true,
61+
// secure: process.env.NODE_ENV === "production",
62+
// });
13163

13264
// Respond
13365
res.status(200).json({
13466
success: true,
135-
message: "Account deleted. Guest session initialized.",
136-
sessionId: req.sessionID,
137-
cart: req.session.cart,
138-
preferences: req.session.preferences,
67+
message: "Account deleted successfully!",
13968
});
14069
});
14170

src/user/routes.js

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,13 @@ const {
55
getUsers,
66
deleteUser,
77
} = require("./controller");
8-
const {
9-
protect,
10-
restrictToOwner,
11-
sanitizeUserUpdate,
12-
} = require("../auth/middleware");
13-
14-
const { validateUpdateUser } = require("./validator");
158

169
router.get("/", getUsers);
1710

18-
router.get("/:id", protect, restrictToOwner, getUserById);
19-
// PATCH /users/:id → Update own user data (sanitize forbidden fields)
20-
router.patch(
21-
"/:id",
22-
protect,
23-
restrictToOwner,
24-
sanitizeUserUpdate,
25-
validateUpdateUser,
26-
updateUser,
27-
);
11+
router.get("/:id", getUserById);
12+
13+
router.patch("/:id", updateUser);
2814

29-
// DELETE /users/:id → Delete own account
30-
router.delete("/:id", protect, restrictToOwner, deleteUser);
15+
router.delete("/:id", deleteUser);
3116

3217
module.exports = router;

0 commit comments

Comments
 (0)