diff --git a/backend/src/controllers/doctor.controller.js b/backend/src/controllers/doctor.controller.js index 52e619d..750d3d7 100644 --- a/backend/src/controllers/doctor.controller.js +++ b/backend/src/controllers/doctor.controller.js @@ -273,42 +273,47 @@ export const updateDoctor = async (req, res) => { }, }); - const oldRelations = await prisma.doctorDepartment.findMany({ - where: {doctorId: doctor.id}, - }); + const hasTimingData = departments?.some( + (dep) => dep.timing && Object.keys(dep.timing).length > 0, + ); - 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 (departments && Array.isArray(departments) && hasTimingData) { + const oldRelations = await prisma.doctorDepartment.findMany({ + where: {doctorId: doctor.id}, }); - if (dep.timing) { - const {id, doctorDepartmentId, createdAt, updatedAt, ...cleanTiming} = - dep.timing; - - await prisma.doctorTiming.create({ - data: {doctorDepartmentId: newDD.id, ...cleanTiming}, + 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 diff --git a/frontend/src/api/doctor.ts b/frontend/src/api/doctor.ts index 7e1b1df..d7ae82f 100644 --- a/frontend/src/api/doctor.ts +++ b/frontend/src/api/doctor.ts @@ -8,8 +8,10 @@ export interface Doctor { designation?: string; workingStatus?: string; qualification?: string; + isActive: boolean; + globalSortOrder: number; - departments: { + departments?: { departmentId: string; timing?: { monday?: string; diff --git a/frontend/src/pages/Doctor.tsx b/frontend/src/pages/Doctor.tsx index 34db16f..74621c7 100644 --- a/frontend/src/pages/Doctor.tsx +++ b/frontend/src/pages/Doctor.tsx @@ -158,8 +158,14 @@ export default function DoctorPage() { const handleToggleStatus = async (doc: any) => { try { - const updatedDoc = { ...doc, isActive: !doc.isActive }; - await updateDoctorApi(doc.doctorId, updatedDoc); + const newStatus = !doc.isActive; + + const payload = { + isActive: newStatus, + }; + + await updateDoctorApi(doc.doctorId, payload); + fetchAll(); } catch (err) { console.error("Failed to update status", err);