Skip to content

Commit e3175fc

Browse files
committed
fix: 800-900 ms latency issue
1 parent 220b490 commit e3175fc

6 files changed

Lines changed: 73 additions & 63 deletions

File tree

server.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,4 @@ connectDB();
77
const PORT = process.env.PORT || 5000;
88

99
app.listen(PORT, () => {
10-
console.log(`Server running on port ${PORT}`);
1110
});

src/config/db.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ const connectDB = async () => {
1010
}
1111
};
1212

13-
export default connectDB;
13+
export default connectDB;

src/middleware/authmiddleware.js

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,47 @@
11
import jwt from 'jsonwebtoken';
22
import User from '../models/User.js';
33

4-
const protect = async (req, res, next) => {
4+
const protect = (req, res, next) => {
55
let token;
66

7-
if (req.headers.authorization && req.headers.authorization.startsWith("Bearer")) {
7+
if (
8+
req.headers.authorization &&
9+
req.headers.authorization.startsWith("Bearer")
10+
) {
811
try {
912
token = req.headers.authorization.split(" ")[1];
10-
console.log('Received Token:', token);
13+
1114
const decoded = jwt.verify(token, process.env.JWT_SECRET);
12-
console.log('Decoded Token:', decoded);
1315

14-
req.user = await User.findById(decoded.id).select("-password");
15-
if (!req.user) {
16-
console.log('User not found for ID:', decoded.id);
17-
return res.status(401).json({ message: "User not found" });
18-
}
19-
console.log('Authenticated User:', req.user);
20-
next();
16+
req.user = {
17+
id: decoded.id,
18+
role: decoded.role,
19+
email: decoded.email,
20+
};
21+
22+
return next();
2123
} catch (error) {
22-
console.log('Token Verification Error:', error.message);
23-
if (error.name === 'TokenExpiredError') {
24+
if (error.name === "TokenExpiredError") {
2425
return res.status(401).json({ message: "Token has expired" });
2526
}
2627
return res.status(401).json({ message: "Not authorized, token failed" });
2728
}
2829
}
2930

30-
if (!token) {
31-
console.log('No token provided in headers');
32-
return res.status(401).json({ message: "Not authorized, no token" });
33-
}
31+
return res.status(401).json({ message: "Not authorized, no token" });
3432
};
3533

34+
3635
const authorize = (...roles) => {
3736
return (req, res, next) => {
38-
if (!req.user) {
39-
return res.status(500).json({ message: "User not authenticated" });
40-
}
4137
if (!roles.includes(req.user.role)) {
42-
console.log('Unauthorized role:', req.user.role, 'Required roles:', roles);
43-
return res.status(403).json({ message: "You do not have permission to perform this action" });
38+
return res
39+
.status(403)
40+
.json({ message: "You do not have permission to perform this action" });
4441
}
4542
next();
4643
};
4744
};
4845

46+
4947
export { protect, authorize };

src/models/appointment.js

Lines changed: 52 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,56 @@
11
import mongoose from 'mongoose';
22

3-
const appointmentSchema = new mongoose.Schema({
4-
patient: {
5-
type: mongoose.Schema.Types.ObjectId,
6-
ref: 'Patient',
7-
required: true
3+
const appointmentSchema = new mongoose.Schema(
4+
{
5+
patient: {
6+
type: mongoose.Schema.Types.ObjectId,
7+
ref: 'Patient',
8+
required: true,
9+
index: true
10+
},
11+
dept: {
12+
type: mongoose.Schema.Types.ObjectId,
13+
ref: 'Department',
14+
required: true,
15+
index: true
16+
},
17+
doctor: {
18+
type: mongoose.Schema.Types.ObjectId,
19+
ref: 'User',
20+
required: true,
21+
index: true
22+
},
23+
status: {
24+
type: String,
25+
enum: ['Scheduled', 'Completed', 'Cancelled'],
26+
default: 'Scheduled',
27+
index: true
28+
},
29+
date: {
30+
type: Date,
31+
required: true,
32+
index: true
33+
},
34+
time: {
35+
type: String,
36+
required: true,
37+
match: /^([01]\d|2[0-3]):([0-5]\d)$/
38+
},
39+
rsv: {
40+
type: String,
41+
required: true,
42+
trim: true,
43+
index: true
44+
},
45+
notes: {
46+
type: String,
47+
trim: true
48+
}
849
},
9-
dept: {
10-
type: mongoose.Schema.Types.ObjectId,
11-
ref: 'Department',
12-
required: true
13-
},
14-
doctor: {
15-
type: mongoose.Schema.Types.ObjectId,
16-
ref: 'User',
17-
required: true
18-
},
19-
status: {
20-
type: String,
21-
required: true,
22-
enum: ['Scheduled', 'Completed', 'Cancelled']
23-
},
24-
date: {
25-
type: Date,
26-
required: true
27-
},
28-
time: {
29-
type: String,
30-
required: true
31-
},
32-
rsv: {
33-
type: String,
34-
required: true
35-
},
36-
notes: {
37-
type: String
38-
}
39-
});
50+
{ timestamps: true, strict: true }
51+
);
52+
53+
appointmentSchema.index({ doctor: 1, date: 1 });
54+
appointmentSchema.index({ doctor: 1, date: 1, time: 1 }, { unique: true });
4055

41-
const Appointment = mongoose.model('Appointment', appointmentSchema);
42-
export default Appointment;
56+
export default mongoose.model('Appointment', appointmentSchema);

src/routes/auth.routes.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
router.post('/signup', async (req, res) => {
1818
try {
19-
console.log('Received body:', req.body);
2019
const { email, password, role } = req.body;
2120
const hashedPassword = await bcrypt.hash(password, 10);
2221
const user = new User({ email, password: hashedPassword, role });

{

Whitespace-only changes.

0 commit comments

Comments
 (0)