fix: add toggle action update controller #38
@@ -340,7 +340,7 @@ export const createDoctor = async (req, res) => {
|
|||||||
//update doctors
|
//update doctors
|
||||||
export const updateDoctor = async (req, res) => {
|
export const updateDoctor = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const {doctorId} = req.params;
|
const {doctorId, action} = req.params;
|
||||||
const {
|
const {
|
||||||
name,
|
name,
|
||||||
designation,
|
designation,
|
||||||
@@ -359,6 +359,33 @@ export const updateDoctor = async (req, res) => {
|
|||||||
tags,
|
tags,
|
||||||
specializations,
|
specializations,
|
||||||
} = req.body;
|
} = req.body;
|
||||||
|
if (!doctorId) {
|
||||||
|
return res.status(400).json({
|
||||||
|
success: false,
|
||||||
|
message: "Doctor ID is required",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
const doctor = await prisma.doctor.findUnique({where: {doctorId}});
|
||||||
|
if (!doctor)
|
||||||
|
return res
|
||||||
|
.status(404)
|
||||||
|
.json({success: false, message: "Doctor not found"});
|
||||||
|
if (action === "toggleStatus") {
|
||||||
|
await prisma.doctor.update({
|
||||||
|
where: {id: doctor.id},
|
||||||
|
data: {
|
||||||
|
isActive: !doctor.isActive,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
return res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
message: `Doctor has been ${
|
||||||
|
doctor.isActive ? "deactivated" : "activated"
|
||||||
|
} successfully`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const messages = [];
|
const messages = [];
|
||||||
if (!doctorId) messages.push("Doctor ID is required");
|
if (!doctorId) messages.push("Doctor ID is required");
|
||||||
if (!name?.trim()) messages.push("Doctor name is required");
|
if (!name?.trim()) messages.push("Doctor name is required");
|
||||||
@@ -375,11 +402,6 @@ export const updateDoctor = async (req, res) => {
|
|||||||
message: messages.join(", "),
|
message: messages.join(", "),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const doctor = await prisma.doctor.findUnique({where: {doctorId}});
|
|
||||||
if (!doctor)
|
|
||||||
return res
|
|
||||||
.status(404)
|
|
||||||
.json({success: false, message: "Doctor not found"});
|
|
||||||
|
|
||||||
await prisma.doctor.update({
|
await prisma.doctor.update({
|
||||||
where: {id: doctor.id},
|
where: {id: doctor.id},
|
||||||
@@ -396,74 +418,7 @@ export const updateDoctor = async (req, res) => {
|
|||||||
globalSortOrder !== undefined ? Number(globalSortOrder) : undefined,
|
globalSortOrder !== undefined ? Number(globalSortOrder) : undefined,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
const existingDepartments = await prisma.doctorDepartment.findMany({
|
|
||||||
where: {
|
|
||||||
doctorId: doctor.id,
|
|
||||||
},
|
|
||||||
include: {
|
|
||||||
timing: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
for (const dep of departments) {
|
|
||||||
const department = await prisma.department.findUnique({
|
|
||||||
where: {departmentId: dep.departmentId},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!department) continue;
|
|
||||||
|
|
||||||
const existing = existingDepartments.find(
|
|
||||||
(d) => d.departmentId === department.id,
|
|
||||||
);
|
|
||||||
|
|
||||||
const newSortOrder =
|
|
||||||
dep.sortOrder !== undefined ? Number(dep.sortOrder) : 0;
|
|
||||||
|
|
||||||
const isSameDepartment = existing && existing.sortOrder === newSortOrder;
|
|
||||||
|
|
||||||
const isSameTiming =
|
|
||||||
JSON.stringify(existing?.timing || {}) ===
|
|
||||||
JSON.stringify(dep.timing || {});
|
|
||||||
|
|
||||||
if (isSameDepartment && isSameTiming) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
let doctorDepartment = existing;
|
|
||||||
|
|
||||||
if (!existing) {
|
|
||||||
doctorDepartment = await prisma.doctorDepartment.create({
|
|
||||||
data: {
|
|
||||||
doctorId: doctor.id,
|
|
||||||
departmentId: department.id,
|
|
||||||
sortOrder: newSortOrder,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
} else if (existing.sortOrder !== newSortOrder) {
|
|
||||||
doctorDepartment = await prisma.doctorDepartment.update({
|
|
||||||
where: {id: existing.id},
|
|
||||||
data: {
|
|
||||||
sortOrder: newSortOrder,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dep.timing) {
|
|
||||||
if (existing?.timing) {
|
|
||||||
await prisma.doctorTiming.update({
|
|
||||||
where: {id: existing.timing.id},
|
|
||||||
data: dep.timing,
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
await prisma.doctorTiming.create({
|
|
||||||
data: {
|
|
||||||
doctorDepartmentId: doctorDepartment.id,
|
|
||||||
...dep.timing,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (doctor.seoId) {
|
if (doctor.seoId) {
|
||||||
await prisma.seo.update({
|
await prisma.seo.update({
|
||||||
where: {
|
where: {
|
||||||
@@ -498,9 +453,66 @@ export const updateDoctor = async (req, res) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
const hasTimingData = departments?.some(
|
// Update Departments & Timings
|
||||||
(dep) => dep.timing && Object.keys(dep.timing).length > 0,
|
if (Array.isArray(departments)) {
|
||||||
);
|
const oldRelations = await prisma.doctorDepartment.findMany({
|
||||||
|
where: {
|
||||||
|
doctorId: doctor.id,
|
||||||
|
},
|
||||||
|
include: {
|
||||||
|
timing: true,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Delete old timings
|
||||||
|
for (const rel of oldRelations) {
|
||||||
|
if (rel.timing) {
|
||||||
|
await prisma.doctorTiming.deleteMany({
|
||||||
|
where: {
|
||||||
|
doctorDepartmentId: rel.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete old departments
|
||||||
|
await prisma.doctorDepartment.deleteMany({
|
||||||
|
where: {
|
||||||
|
doctorId: doctor.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
// Recreate departments + timings
|
||||||
|
for (const dep of departments) {
|
||||||
|
const department = await prisma.department.findUnique({
|
||||||
|
where: {
|
||||||
|
departmentId: dep.departmentId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!department) continue;
|
||||||
|
|
||||||
|
const doctorDepartment = await prisma.doctorDepartment.create({
|
||||||
|
data: {
|
||||||
|
doctorId: doctor.id,
|
||||||
|
departmentId: department.id,
|
||||||
|
sortOrder: dep.sortOrder !== undefined ? Number(dep.sortOrder) : 0,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
if (dep.timing && Object.keys(dep.timing).length > 0) {
|
||||||
|
const {id, doctorDepartmentId, createdAt, updatedAt, ...cleanTiming} =
|
||||||
|
dep.timing;
|
||||||
|
|
||||||
|
await prisma.doctorTiming.create({
|
||||||
|
data: {
|
||||||
|
doctorDepartmentId: doctorDepartment.id,
|
||||||
|
...cleanTiming,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Update Specializations
|
// Update Specializations
|
||||||
if (Array.isArray(specializations)) {
|
if (Array.isArray(specializations)) {
|
||||||
@@ -523,45 +535,6 @@ export const updateDoctor = async (req, res) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (departments && Array.isArray(departments) && hasTimingData) {
|
|
||||||
const oldRelations = await prisma.doctorDepartment.findMany({
|
|
||||||
where: {doctorId: doctor.id},
|
|
||||||
});
|
|
||||||
|
|
||||||
for (const rel of oldRelations) {
|
|
||||||
await prisma.doctorTiming.deleteMany({
|
|
||||||
where: {doctorDepartmentId: rel.id},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
await prisma.doctorDepartment.deleteMany({
|
|
||||||
where: {doctorId: doctor.id},
|
|
||||||
});
|
|
||||||
|
|
||||||
for (const dep of departments) {
|
|
||||||
const targetDept = await prisma.department.findUnique({
|
|
||||||
where: {departmentId: dep.departmentId},
|
|
||||||
});
|
|
||||||
if (!targetDept) continue;
|
|
||||||
|
|
||||||
const newDD = await prisma.doctorDepartment.create({
|
|
||||||
data: {
|
|
||||||
doctorId: doctor.id,
|
|
||||||
departmentId: targetDept.id,
|
|
||||||
sortOrder: dep.sortOrder !== undefined ? Number(dep.sortOrder) : 0,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (dep.timing) {
|
|
||||||
const {id, doctorDepartmentId, createdAt, updatedAt, ...cleanTiming} =
|
|
||||||
dep.timing;
|
|
||||||
await prisma.doctorTiming.create({
|
|
||||||
data: {doctorDepartmentId: newDD.id, ...cleanTiming},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
res
|
res
|
||||||
.status(200)
|
.status(200)
|
||||||
.json({success: true, message: "Doctor updated successfully"});
|
.json({success: true, message: "Doctor updated successfully"});
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ router.get("/getTimings/:doctorId", getDoctorTimingById);
|
|||||||
router.get("/:doctorId", getDoctorByDoctorId);
|
router.get("/:doctorId", getDoctorByDoctorId);
|
||||||
|
|
||||||
router.post("/", jwtAuthMiddleware, createDoctor);
|
router.post("/", jwtAuthMiddleware, createDoctor);
|
||||||
router.patch("/:doctorId", jwtAuthMiddleware, updateDoctor);
|
router.patch("/:doctorId/:action", jwtAuthMiddleware, updateDoctor);
|
||||||
router.delete("/:doctorId", jwtAuthMiddleware, deleteDoctor);
|
router.delete("/:doctorId", jwtAuthMiddleware, deleteDoctor);
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
|||||||
@@ -53,9 +53,10 @@ export const createDoctorApi = async (data: Doctor) => {
|
|||||||
export const updateDoctorApi = async (
|
export const updateDoctorApi = async (
|
||||||
doctorId: string,
|
doctorId: string,
|
||||||
data: Partial<Doctor>,
|
data: Partial<Doctor>,
|
||||||
|
action: "toggleStatus" | "updateDetails" = "updateDetails",
|
||||||
) => {
|
) => {
|
||||||
try {
|
try {
|
||||||
const res = await apiClient.patch(`/doctors/${doctorId}`, data);
|
const res = await apiClient.patch(`/doctors/${doctorId}/${action}`, data);
|
||||||
|
|
||||||
toast.success("Doctor updated successfully");
|
toast.success("Doctor updated successfully");
|
||||||
|
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ export default function DoctorPage() {
|
|||||||
isActive: newStatus,
|
isActive: newStatus,
|
||||||
};
|
};
|
||||||
|
|
||||||
await updateDoctorApi(doc.doctorId, payload);
|
await updateDoctorApi(doc.doctorId, payload, "toggleStatus");
|
||||||
|
|
||||||
fetchAll();
|
fetchAll();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user