diff --git a/backend/src/controllers/doctor.controller.js b/backend/src/controllers/doctor.controller.js index 717279d..5ea3048 100644 --- a/backend/src/controllers/doctor.controller.js +++ b/backend/src/controllers/doctor.controller.js @@ -365,6 +365,15 @@ export const updateDoctor = async (req, res) => { 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}, @@ -372,21 +381,56 @@ export const updateDoctor = async (req, res) => { if (!department) continue; - const doctorDepartment = await prisma.doctorDepartment.create({ - data: { - doctorId: doctor.id, - departmentId: department.id, - sortOrder: dep.sortOrder !== undefined ? Number(dep.sortOrder) : 0, - }, - }); + const existing = existingDepartments.find( + (d) => d.departmentId === department.id, + ); - if (dep.timing) { - await prisma.doctorTiming.create({ + 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: { - doctorDepartmentId: doctorDepartment.id, - ...dep.timing, + 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) {