fix: allow deleting users by reassigning their records to admin first
Deleting users with patients/appointments/claims was blocked by FK constraints. Now reassigns those records to the requesting admin before deletion, and cleans up user-specific data (backups, cloud files). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -137,6 +137,22 @@ router.delete("/:id", async (req: Request, res: Response):Promise<any> => {
|
||||
const id = parseInt(idParam);
|
||||
if (isNaN(id)) return res.status(400).send("Invalid user ID");
|
||||
|
||||
if (id === req.user!.id) return res.status(400).json({ error: "Cannot delete your own account" });
|
||||
|
||||
const adminId = req.user!.id;
|
||||
|
||||
// Reassign all records owned by this user to the requesting admin
|
||||
// before deletion to satisfy foreign key constraints.
|
||||
const { prisma } = await import("@repo/db/client");
|
||||
await prisma.$transaction([
|
||||
prisma.patient.updateMany({ where: { userId: id }, data: { userId: adminId } }),
|
||||
prisma.appointment.updateMany({ where: { userId: id }, data: { userId: adminId } }),
|
||||
prisma.claim.updateMany({ where: { userId: id }, data: { userId: adminId } }),
|
||||
prisma.backupDestination.deleteMany({ where: { userId: id } }),
|
||||
prisma.cloudFile.deleteMany({ where: { userId: id } }),
|
||||
prisma.cloudFolder.deleteMany({ where: { userId: id } }),
|
||||
]);
|
||||
|
||||
const success = await storage.deleteUser(id);
|
||||
if (!success) return res.status(404).send("User not found");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user