Skip to content

Commit 9f18967

Browse files
authored
Merge pull request #14 from BishoySedra/copilot/fix-2ef38c84-6b7f-4b54-a16c-468dbf315cc4
Refactor codebase for improved professionalism and maintainability
2 parents b441561 + 259c5f4 commit 9f18967

File tree

16 files changed

+460
-233
lines changed

16 files changed

+460
-233
lines changed

src/controllers/auth.js

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
import * as userService from "../services/auth.js";
22

3-
// user will give username, email, password
3+
/**
4+
* Register a new user
5+
* @param {Object} req - Express request object
6+
* @param {Object} res - Express response object
7+
* @param {Function} next - Express next middleware function
8+
*/
49
export const register = async (req, res, next) => {
510
try {
6-
// get the domain name and the protocol from the request
11+
// Get domain and protocol for verification link
712
const protocol = req.protocol;
813
const domain = req.get("host");
914
const imageBuffer = req.file ? req.file.buffer : null;
@@ -20,9 +25,16 @@ export const register = async (req, res, next) => {
2025
}
2126
};
2227

28+
/**
29+
* Authenticate user login
30+
* @param {Object} req - Express request object
31+
* @param {Object} res - Express response object
32+
* @param {Function} next - Express next middleware function
33+
*/
2334
export const login = async (req, res, next) => {
2435
try {
2536
const token = await userService.loginService(req.body);
37+
2638
return res.json({
2739
body: token,
2840
status: 200,
@@ -33,15 +45,18 @@ export const login = async (req, res, next) => {
3345
}
3446
};
3547

48+
/**
49+
* Verify user email address
50+
* @param {Object} req - Express request object
51+
* @param {Object} res - Express response object
52+
* @param {Function} next - Express next middleware function
53+
*/
3654
export const verifyEmail = async (req, res, next) => {
3755
try {
3856
const email = req.params.email;
3957
await userService.verifyEmailService(email);
40-
// return res.json({
41-
// status: 200,
42-
// message: "Email verified successfully!",
43-
// });
44-
// return html response that email is verified
58+
59+
// Return HTML response for user-friendly email verification
4560
return res.send("<h1>Email verified successfully!</h1>");
4661
} catch (error) {
4762
next(error);

src/controllers/friend.js

Lines changed: 110 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,100 +1,148 @@
11
import * as FriendService from "../services/friend.js";
22
import { authorize } from "../middlewares/validator/authorize.js";
33

4-
// // search friend by email
5-
// export const searchFriendByEmail = (req, res, next) => {
6-
// try {
7-
// const foundFriend = FriendService.searchFriendByEmail(
8-
// req.params.email
9-
// );
10-
11-
// res.send({ message: "Friend found", body: foundFriend, status: 200 });
12-
// } catch (error) {
13-
// next(error)
14-
// }
15-
// };
16-
17-
// send friend request
4+
/**
5+
* Send a friend request from sender to receiver
6+
* @param {Object} req - Express request object
7+
* @param {Object} res - Express response object
8+
* @param {Function} next - Express next middleware function
9+
*/
1810
export const sendFriendRequest = async (req, res, next) => {
1911
try {
20-
let senderEmail = req.params.sender
21-
let receiverEmail = req.params.receiver
22-
await FriendService.validateEmails(senderEmail,receiverEmail)
23-
await authorize(req,res,next,senderEmail)
24-
await FriendService.sendFriendRequest(senderEmail,receiverEmail);
12+
const senderEmail = req.params.sender;
13+
const receiverEmail = req.params.receiver;
2514

26-
return res.send({ message: "Friend request sent succesfully!", status: 200, body: null });
15+
await FriendService.validateEmails(senderEmail, receiverEmail);
16+
await authorize(req, res, next, senderEmail);
17+
await FriendService.sendFriendRequest(senderEmail, receiverEmail);
18+
19+
return res.send({
20+
message: "Friend request sent successfully!",
21+
status: 200,
22+
body: null
23+
});
2724
} catch (error) {
28-
next(error)
25+
next(error);
2926
}
3027
};
3128

32-
// respond to friend request
29+
/**
30+
* Respond to a friend request (accept or reject)
31+
* @param {Object} req - Express request object
32+
* @param {Object} res - Express response object
33+
* @param {Function} next - Express next middleware function
34+
*/
3335
export const respondToFriendRequest = async (req, res, next) => {
3436
try {
35-
let senderEmail = req.params.sender
36-
let receiverEmail = req.params.receiver
37-
await FriendService.validateEmails(senderEmail,receiverEmail)
38-
await authorize(req,res,next,receiverEmail)
39-
let message = await FriendService.respondToFriendRequest(senderEmail,receiverEmail,req.body.status);
37+
const senderEmail = req.params.sender;
38+
const receiverEmail = req.params.receiver;
39+
40+
await FriendService.validateEmails(senderEmail, receiverEmail);
41+
await authorize(req, res, next, receiverEmail);
42+
43+
const message = await FriendService.respondToFriendRequest(
44+
senderEmail,
45+
receiverEmail,
46+
req.body.status
47+
);
48+
4049
return res.send({ message, status: 200, body: null });
4150
} catch (error) {
42-
next(error)
51+
next(error);
4352
}
4453
};
4554

46-
// get all friends of a user
55+
/**
56+
* Get all friends of a user
57+
* @param {Object} req - Express request object
58+
* @param {Object} res - Express response object
59+
* @param {Function} next - Express next middleware function
60+
*/
4761
export const getAllFriends = async (req, res, next) => {
4862
try {
49-
let email = req.params.email
50-
await authorize(req,res,next,email)
51-
const friends = await FriendService.getAllFriends(req.params.email);
52-
return res.send({ message: "Friends of user retreived succesfully!", status: 200, body: friends });
63+
const email = req.params.email;
64+
65+
await authorize(req, res, next, email);
66+
const friends = await FriendService.getAllFriends(email);
67+
68+
return res.send({
69+
message: "Friends of user retrieved successfully!",
70+
status: 200,
71+
body: friends
72+
});
5373
} catch (error) {
54-
next(error)
74+
next(error);
5575
}
5676
};
5777

58-
export const getAllFriendRequests = async (req,res,next) => {
59-
try{
60-
let email = req.params.email
61-
await authorize(req,res,next,email)
62-
const friendRequests = await FriendService.getAllFriendRequests(email)
63-
return res.send({ message: "Friend requests retreived succesfully!", status: 200, body: friendRequests });
64-
}catch(error){
65-
next(error)
78+
/**
79+
* Get all pending friend requests for a user
80+
* @param {Object} req - Express request object
81+
* @param {Object} res - Express response object
82+
* @param {Function} next - Express next middleware function
83+
*/
84+
export const getAllFriendRequests = async (req, res, next) => {
85+
try {
86+
const email = req.params.email;
87+
88+
await authorize(req, res, next, email);
89+
const friendRequests = await FriendService.getAllFriendRequests(email);
90+
91+
return res.send({
92+
message: "Friend requests retrieved successfully!",
93+
status: 200,
94+
body: friendRequests
95+
});
96+
} catch (error) {
97+
next(error);
6698
}
67-
}
99+
};
68100

69-
export const unfriend = async (req,res,next) => {
70-
try{
71-
let email = req.params.email
72-
let friendEmail = req.params.friendEmail
73-
await authorize(req,res,next,email)
74-
await FriendService.unfriend(email,friendEmail)
101+
/**
102+
* Remove a friend relationship between two users
103+
* @param {Object} req - Express request object
104+
* @param {Object} res - Express response object
105+
* @param {Function} next - Express next middleware function
106+
*/
107+
export const unfriend = async (req, res, next) => {
108+
try {
109+
const email = req.params.email;
110+
const friendEmail = req.params.friendEmail;
111+
112+
await authorize(req, res, next, email);
113+
await FriendService.unfriend(email, friendEmail);
114+
75115
return res.json({
76116
body: null,
77117
status: 200,
78118
message: "Unfriended successfully",
79119
});
80-
}catch(error){
81-
next(error)
120+
} catch (error) {
121+
next(error);
82122
}
83-
}
123+
};
84124

85-
export const cancelFriendRequest = async (req,res,next) => {
86-
try{
87-
let senderEmail = req.params.sender
88-
let receiverEmail = req.params.receiver
89-
await FriendService.validateEmails(senderEmail,receiverEmail)
90-
await authorize(req,res,next,senderEmail)
91-
await FriendService.cancelFriendRequest(senderEmail,receiverEmail)
125+
/**
126+
* Cancel a pending friend request
127+
* @param {Object} req - Express request object
128+
* @param {Object} res - Express response object
129+
* @param {Function} next - Express next middleware function
130+
*/
131+
export const cancelFriendRequest = async (req, res, next) => {
132+
try {
133+
const senderEmail = req.params.sender;
134+
const receiverEmail = req.params.receiver;
135+
136+
await FriendService.validateEmails(senderEmail, receiverEmail);
137+
await authorize(req, res, next, senderEmail);
138+
await FriendService.cancelFriendRequest(senderEmail, receiverEmail);
139+
92140
return res.json({
93141
body: null,
94142
status: 200,
95143
message: "Friend request cancelled successfully",
96144
});
97-
}catch(error){
98-
next(error)
145+
} catch (error) {
146+
next(error);
99147
}
100-
}
148+
};

src/helpers/enviroment.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
import { Command } from "commander";
22

3-
3+
/**
4+
* Configure and validate environment variable
5+
* @returns {string} The validated environment variable (dev|test|prod)
6+
*/
47
export const configureEnvironmentVariable = () => {
8+
// If running in Jest test environment, default to 'test'
9+
if (process.env.NODE_ENV === 'test' || process.env.JEST_WORKER_ID) {
10+
return 'test';
11+
}
12+
513
// Create a new Commander program
614
const program = new Command();
715

@@ -20,5 +28,5 @@ export const configureEnvironmentVariable = () => {
2028
process.exit(1);
2129
}
2230

23-
return environment
24-
}
31+
return environment;
32+
};

0 commit comments

Comments
 (0)