summary refs log tree commit diff
path: root/src/api/routes/users/#id/delete.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/routes/users/#id/delete.ts')
-rw-r--r--src/api/routes/users/#id/delete.ts39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/api/routes/users/#id/delete.ts b/src/api/routes/users/#id/delete.ts
new file mode 100644
index 00000000..2c08635b
--- /dev/null
+++ b/src/api/routes/users/#id/delete.ts
@@ -0,0 +1,39 @@
+import { route } from "@fosscord/api";
+import {
+	emitEvent,
+	Member,
+	PrivateUserProjection,
+	User,
+	UserDeleteEvent,
+	UserDeleteSchema,
+} from "@fosscord/util";
+import { Request, Response, Router } from "express";
+
+const router = Router();
+
+router.post(
+	"/",
+	route({ right: "MANAGE_USERS" }),
+	async (req: Request, res: Response) => {
+		
+		let user = await User.findOneOrFail({
+			where: { id: req.params.id },
+			select: [...PrivateUserProjection, "data"],
+		});
+		await Promise.all([
+			Member.delete({ id: req.params.id }),
+			User.delete({ id: req.params.id }),
+		]);
+
+		// TODO: respect intents as USER_DELETE has potential to cause privacy issues
+		await emitEvent({
+			event: "USER_DELETE",
+			user_id: req.user_id,
+			data: { user_id: req.params.id },
+		} as UserDeleteEvent);
+
+		res.sendStatus(204);
+	},
+);
+
+export default router;