Skip to content

Commit db46c3f

Browse files
committed
fix: doctor api response; validation logic mix in mongoose and express
1 parent a02d428 commit db46c3f

12 files changed

Lines changed: 31 additions & 29 deletions

src/controllers/doctor.controller.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import doctorService from '../services/doctor.service.js';
22

3-
const createDoctor = async (req, res) => {
3+
const createDoctor = async (req, res, next) => {
44
try {
55
const doctor = await doctorService.createDoctor(req.body);
66
res.status(201).json(doctor);
77
} catch (err) {
8-
res.status(400).json({ message: err.message });
8+
next(err)
99
}
1010
};
1111

src/models/User.js

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ const workingDaySchema = new mongoose.Schema({
3131
}
3232
}, { _id: false });
3333

34-
workingDaySchema.pre('validate', function(next) {
34+
workingDaySchema.pre('validate', function() {
3535

3636
if (!this.isAvailable && this.slots.length > 0) {
37-
return next(new Error("Slots cannot exist when doctor is unavailable"));
37+
return new Error("Slots cannot exist when doctor is unavailable");
3838
}
3939

4040
const sorted = [...this.slots].sort((a, b) =>
@@ -44,15 +44,13 @@ workingDaySchema.pre('validate', function(next) {
4444
for (let i = 0; i < sorted.length; i++) {
4545

4646
if (sorted[i].startTime >= sorted[i].endTime) {
47-
return next(new Error("Start time must be before end time"));
47+
return new Error("Start time must be before end time");
4848
}
4949

5050
if (i > 0 && sorted[i - 1].endTime > sorted[i].startTime) {
51-
return next(new Error("Overlapping time slots detected"));
51+
return new Error("Overlapping time slots detected");
5252
}
5353
}
54-
55-
next();
5654
});
5755

5856
const DEFAULT_WORKING_HOURS = [
@@ -115,29 +113,24 @@ const userSchema = new mongoose.Schema({
115113
}, { timestamps: true });
116114

117115

118-
userSchema.pre('validate', function(next) {
116+
userSchema.pre('validate', function() {
119117

120118
if (this.role === 'doctor' && this.workingHours) {
121119
const days = this.workingHours.map(d => d.day);
122120
const uniqueDays = new Set(days);
123121

124122
if (days.length !== uniqueDays.size) {
125-
return next(new Error("Duplicate days are not allowed"));
123+
return new Error("Duplicate days are not allowed");
126124
}
127125
}
128-
129-
next();
130126
});
131127

132-
userSchema.pre('save', function(next) {
128+
userSchema.pre('save', function() {
133129

134130
if (this.role === 'doctor' && (!this.workingHours || this.workingHours.length === 0)) {
135131
this.workingHours = DEFAULT_WORKING_HOURS;
136132
}
137-
138-
next();
139133
});
140134

141-
142135
const User = mongoose.models.User || mongoose.model('User', userSchema);
143136
export default User;

src/models/patient.js

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,19 @@ email:{
99
},
1010
phno:{
1111
type: String,
12-
required:true,
12+
required: true,
1313
match:/^[0-9]{10}$/
1414
},
15-
age:{type:Number, required:true},
15+
age:{
16+
type:Number,
17+
required: true,
18+
min: [0, "Age cannot be negative"],
19+
max: [150, "Age cannot exceed 150"],
20+
validate: {
21+
validator: Number.isInteger,
22+
message: "Age must be a whole number"
23+
}
24+
},
1625
gender: {
1726
type:String,
1827
enum:['male','female','other'],

src/routes/adminroutes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import express from 'express';
22
import * as adminController from '../controllers/admincontroller.js';
3-
import { protect, authorize } from '../middleware/authmiddleware.js';
3+
import { protect, authorize } from '../middleware/authMiddleware.js';
44
const router = express.Router();
55

66
router.post('/login', adminController.login);

src/routes/appointment.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import express from 'express';
2-
import { protect, authorize } from '../middleware/authmiddleware.js';
2+
import { protect, authorize } from '../middleware/authMiddleware.js';
33
import * as appointmentController from '../controllers/aptcontrol.js';
44

55
const router = express.Router();

src/routes/billing.routes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import express from 'express';
2-
import { protect, authorize } from '../middleware/authmiddleware.js';
2+
import { protect, authorize } from '../middleware/authMiddleware.js';
33
import * as billingController from '../controllers/billing.controller.js';
44

55
const router = express.Router();

src/routes/dashboard.routes.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import express from "express";
2-
import { protect, authorize } from "../middleware/authmiddleware.js";
2+
import { protect, authorize } from "../middleware/authMiddleware.js";
33
import { getAdminDashboardSummary } from '../controllers/dashboard.controller.js';
44

55
const router = express.Router();

src/routes/dept.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import express from 'express';
2-
import { protect, authorize } from '../middleware/authmiddleware.js';
2+
import { protect, authorize } from '../middleware/authMiddleware.js';
33
import * as departmentController from '../controllers/department.js';
44

55
const router = express.Router();

src/routes/doctor.routes.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import express from 'express';
2-
import { protect, authorize } from '../middleware/authmiddleware.js';
2+
import { protect, authorize } from '../middleware/authMiddleware.js';
33
import * as doctorController from '../controllers/doctor.controller.js';
44

55
const router = express.Router();
66

7-
router.post('/', protect, authorize('admin'), doctorController.createDoctor);
7+
router.post('/', protect, authorize(['admin']), doctorController.createDoctor);
88

99
router.get('/', protect, authorize('admin', 'doctor'), doctorController.getDoctors);
1010

src/routes/patient.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import express from 'express';
2-
import { protect, authorize } from '../middleware/authmiddleware.js';
2+
import { protect, authorize } from '../middleware/authMiddleware.js';
33
import * as patientController from '../controllers/patient.js';
44

55
const router = express.Router();
66

77

88
router.get('/', protect, authorize('admin', 'doctor'), patientController.getPatients);
99

10-
router.post('/patient', protect, authorize('admin', 'doctor'), patientController.createPatient);
10+
router.post('/', protect, authorize('admin', 'doctor'), patientController.createPatient);
1111

1212
router.put('/:id', protect, authorize('admin', 'doctor'), patientController.updatePatient);
1313

0 commit comments

Comments
 (0)