EDMS/server/api/department/[id].delete.js
2025-05-31 16:58:30 +08:00

102 lines
2.3 KiB
JavaScript

import prisma from "../../utils/prisma";
export default defineEventHandler(async (event) => {
try {
// Get department ID from route
const id = parseInt(event.context.params.id);
if (isNaN(id)) {
return {
statusCode: 400,
message: "Invalid department ID"
};
}
// Check if department exists and get related entities
const existingDept = await prisma.department.findUnique({
where: {
dp_id: id
},
include: {
cabinets: {
select: {
cb_id: true
}
},
users: {
select: {
su_id: true
}
}
}
});
if (!existingDept) {
return {
statusCode: 404,
message: "Department not found"
};
}
// Check if department has related cabinets
if (existingDept.cabinets.length > 0) {
return {
statusCode: 409,
message: "Cannot delete department with existing cabinets. Remove all cabinets first.",
cabinetCount: existingDept.cabinets.length
};
}
// Check if department has related users
if (existingDept.users.length > 0) {
return {
statusCode: 409,
message: "Cannot delete department with existing users. Reassign or remove all users first.",
userCount: existingDept.users.length
};
}
// Delete department
const department = await prisma.department.delete({
where: {
dp_id: id
}
});
// Create audit log
await prisma.audit.create({
data: {
auditIP: getRequestIP(event),
auditURL: getRequestURL(event),
auditURLMethod: 'DELETE',
auditAction: 'DELETE_DEPARTMENT',
auditDetails: JSON.stringify(existingDept),
auditUserID: null,
auditUsername: null
}
});
return {
statusCode: 200,
message: "Department deleted successfully"
};
} catch (error) {
console.error("Error deleting department:", error);
return {
statusCode: 500,
message: "Internal server error",
error: error.message
};
}
});
// Helper functions
function getRequestIP(event) {
return event.node.req.headers['x-forwarded-for'] ||
event.node.req.connection.remoteAddress;
}
function getRequestURL(event) {
return event.node.req.url;
}