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

96 lines
2.1 KiB
JavaScript

import prisma from "../../utils/prisma";
export default defineEventHandler(async (event) => {
try {
// Get user ID from route
const id = parseInt(event.context.params.id);
if (isNaN(id)) {
return {
statusCode: 400,
message: "Invalid user ID"
};
}
// Check if user exists
const existingUser = await prisma.user.findUnique({
where: {
userID: id
},
include: {
userrole: {
select: {
userRoleID: true
}
}
}
});
if (!existingUser) {
return {
statusCode: 404,
message: "User not found"
};
}
// Check if user has any roles assigned
if (existingUser.userrole && existingUser.userrole.length > 0) {
// Delete all associated user roles first
await prisma.userrole.deleteMany({
where: {
userRoleUserID: id
}
});
}
// Create a sanitized copy of user data for audit log
const sanitizedUser = {
...existingUser,
userPassword: "[REDACTED]",
userSecretKey: "[REDACTED]"
};
// Delete user
await prisma.user.delete({
where: {
userID: id
}
});
// Create audit log
await prisma.audit.create({
data: {
auditIP: getRequestIP(event),
auditURL: getRequestURL(event),
auditURLMethod: 'DELETE',
auditAction: 'DELETE_USER',
auditDetails: JSON.stringify(sanitizedUser),
auditUserID: null,
auditUsername: null
}
});
return {
statusCode: 200,
message: "User deleted successfully"
};
} catch (error) {
console.error("Error deleting user:", 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;
}