feat: implement sorting and visibility changes

This commit is contained in:
Kailasdevdas
2026-05-11 00:04:22 +05:30
parent 9aaf1879a8
commit 1717507555
12 changed files with 335 additions and 112 deletions
+20 -6
View File
@@ -4,8 +4,11 @@ import prisma from "../prisma/client.js";
export const getAllCareers = async (req, res) => {
try {
const { admin } = req.query;
const careers = await prisma.career.findMany({
orderBy: {createdAt: "desc"},
where: admin === "true" ? {} : { isActive: true },
orderBy: [{ sortOrder: "asc" }, { createdAt: "desc" }],
});
const response = careers.map((c) => ({
@@ -17,6 +20,8 @@ export const getAllCareers = async (req, res) => {
email: c.email,
number: c.number,
status: c.status,
isActive: c.isActive,
sortOrder: c.sortOrder,
}));
return res.status(200).json({
@@ -44,6 +49,8 @@ export const createCareer = async (req, res) => {
email,
number,
status,
isActive,
sortOrder,
} = req.body;
if (!post || !designation) {
@@ -62,6 +69,8 @@ export const createCareer = async (req, res) => {
email,
number,
status,
isActive: isActive !== undefined ? isActive : true,
sortOrder: sortOrder !== undefined ? Number(sortOrder) : 0,
},
});
@@ -83,11 +92,16 @@ export const createCareer = async (req, res) => {
export const updateCareer = async (req, res) => {
try {
const {id} = req.params;
const { id } = req.params;
const updateData = { ...req.body };
if (updateData.sortOrder !== undefined) {
updateData.sortOrder = Number(updateData.sortOrder);
}
const career = await prisma.career.update({
where: {id: Number(id)},
data: req.body,
where: { id: Number(id) },
data: updateData,
});
return res.status(200).json({
@@ -108,10 +122,10 @@ export const updateCareer = async (req, res) => {
export const deleteCareer = async (req, res) => {
try {
const {id} = req.params;
const { id } = req.params;
await prisma.career.delete({
where: {id: Number(id)},
where: { id: Number(id) },
});
return res.status(200).json({
@@ -2,8 +2,11 @@ import prisma from "../prisma/client.js";
export const getAllDepartments = async (req, res) => {
try {
const {admin} = req.query;
const departments = await prisma.department.findMany({
orderBy: {name: "asc"},
where: admin === "true" ? {} : {isActive: true},
orderBy: [{sortOrder: "asc"}, {name: "asc"}],
});
const response = departments.map((dep) => ({
@@ -15,6 +18,8 @@ export const getAllDepartments = async (req, res) => {
para3: dep.para3 ?? "",
facilities: dep.facilities ?? "",
services: dep.services ?? "",
isActive: dep.isActive,
sortOrder: dep.sortOrder,
}));
return res.status(200).json({
@@ -44,13 +49,14 @@ export const getDepartmentByName = async (req, res) => {
const department = await prisma.department.findFirst({
where: {
name: name,
isActive: true,
},
});
if (!department) {
return res.status(404).json({
success: false,
message: "Department not found",
message: "Department not found or inactive",
});
}
@@ -63,6 +69,8 @@ export const getDepartmentByName = async (req, res) => {
para3: department.para3 ?? "",
facilities: department.facilities ?? "",
services: department.services ?? "",
isActive: department.isActive,
sortOrder: department.sortOrder,
};
return res.status(200).json({
@@ -89,6 +97,8 @@ export async function createDepartment(req, res) {
para3,
facilities,
services,
isActive,
sortOrder,
} = req.body;
if (!departmentId || !name) {
@@ -107,6 +117,8 @@ export async function createDepartment(req, res) {
para3,
facilities,
services,
isActive: isActive !== undefined ? isActive : true,
sortOrder: sortOrder !== undefined ? Number(sortOrder) : 0,
},
});
@@ -118,7 +130,7 @@ export async function createDepartment(req, res) {
if (error.code === "P2002") {
return res.status(409).json({error: "Department already exists"});
}
console.error(error);
res.status(500).json({error: "Failed to create department"});
}
}
@@ -126,20 +138,15 @@ export async function createDepartment(req, res) {
export const updateDepartment = async (req, res) => {
try {
const {departmentId} = req.params;
const updateData = {...req.body};
const {name, image, para1, para2, para3, facilities, services} = req.body;
if (updateData.sortOrder !== undefined) {
updateData.sortOrder = Number(updateData.sortOrder);
}
const department = await prisma.department.update({
where: {departmentId},
data: {
name,
image,
para1,
para2,
para3,
facilities,
services,
},
data: updateData,
});
return res.status(200).json({
+43 -22
View File
@@ -4,7 +4,10 @@ import prisma from "../prisma/client.js";
export const getAllDoctors = async (req, res) => {
try {
const {admin} = req.query;
const doctors = await prisma.doctor.findMany({
where: admin === "true" ? {} : {isActive: true},
include: {
departments: {
include: {
@@ -13,7 +16,7 @@ export const getAllDoctors = async (req, res) => {
},
},
},
orderBy: {name: "asc"},
orderBy: [{globalSortOrder: "asc"}, {name: "asc"}],
});
const formatted = doctors.map((doc, index) => ({
@@ -24,10 +27,10 @@ export const getAllDoctors = async (req, res) => {
designation: doc.designation,
workingStatus: doc.workingStatus,
qualification: doc.qualification,
isActive: doc.isActive,
globalSortOrder: doc.globalSortOrder,
departments: doc.departments.map((d) => {
const t = d.timing || {};
const timingArray = [
t.monday && `Monday ${t.monday}`,
t.tuesday && `Tuesday ${t.tuesday}`,
@@ -43,6 +46,7 @@ export const getAllDoctors = async (req, res) => {
departmentId: d.department.departmentId,
departmentName: d.department.name,
timing: timingArray.join(" & "),
deptSortOrder: d.sortOrder,
};
}),
}));
@@ -135,17 +139,23 @@ export const getDoctorsByDepartmentId = async (req, res) => {
});
}
const doctors = await prisma.doctorDepartment.findMany({
where: {departmentId: department.id},
const doctorsInDept = await prisma.doctorDepartment.findMany({
where: {
departmentId: department.id,
doctor: {isActive: true},
},
include: {
doctor: true,
},
orderBy: {sortOrder: "asc"},
});
const result = doctors.map((d) => ({
const result = doctorsInDept.map((d) => ({
GG_ID: d.doctor.doctorId,
Name: d.doctor.name,
image: d.doctor.image ?? "",
designation: d.doctor.designation,
hierarchyOrder: d.sortOrder,
}));
res.status(200).json({
@@ -171,6 +181,8 @@ export const createDoctor = async (req, res) => {
designation,
workingStatus,
qualification,
isActive,
globalSortOrder,
departments,
} = req.body;
@@ -182,6 +194,9 @@ export const createDoctor = async (req, res) => {
designation,
workingStatus,
qualification,
isActive: isActive !== undefined ? isActive : true,
globalSortOrder:
globalSortOrder !== undefined ? Number(globalSortOrder) : 0,
},
});
@@ -196,6 +211,7 @@ export const createDoctor = async (req, res) => {
data: {
doctorId: doctor.id,
departmentId: department.id,
sortOrder: dep.sortOrder !== undefined ? Number(dep.sortOrder) : 0,
},
});
@@ -232,22 +248,29 @@ export const updateDoctor = async (req, res) => {
image,
workingStatus,
qualification,
isActive,
globalSortOrder,
departments,
} = req.body;
const doctor = await prisma.doctor.findUnique({
where: {doctorId},
});
if (!doctor) {
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({
where: {id: doctor.id},
data: {name, designation, image, workingStatus, qualification},
data: {
name,
designation,
image,
workingStatus,
qualification,
isActive,
globalSortOrder:
globalSortOrder !== undefined ? Number(globalSortOrder) : undefined,
},
});
const oldRelations = await prisma.doctorDepartment.findMany({
@@ -265,16 +288,16 @@ export const updateDoctor = async (req, res) => {
});
for (const dep of departments) {
const department = await prisma.department.findUnique({
const targetDept = await prisma.department.findUnique({
where: {departmentId: dep.departmentId},
});
if (!targetDept) continue;
if (!department) continue;
const doctorDepartment = await prisma.doctorDepartment.create({
const newDD = await prisma.doctorDepartment.create({
data: {
doctorId: doctor.id,
departmentId: department.id,
departmentId: targetDept.id,
sortOrder: dep.sortOrder !== undefined ? Number(dep.sortOrder) : 0,
},
});
@@ -283,10 +306,7 @@ export const updateDoctor = async (req, res) => {
dep.timing;
await prisma.doctorTiming.create({
data: {
doctorDepartmentId: doctorDepartment.id,
...cleanTiming,
},
data: {doctorDepartmentId: newDD.id, ...cleanTiming},
});
}
}
@@ -421,6 +441,7 @@ export const getDoctorTimingById = async (req, res) => {
departments: doctor.departments.map((d) => ({
departmentId: d.department.departmentId,
departmentName: d.department.name,
deptSortOrder: d.sortOrder,
timing: d.timing || {},
})),
};