diff --git a/assets/openapi.json b/assets/openapi.json index 75f7f590..1805c9a3 100644 Binary files a/assets/openapi.json and b/assets/openapi.json differ diff --git a/assets/schemas.json b/assets/schemas.json index ad620bfe..a60d85e4 100644 Binary files a/assets/schemas.json and b/assets/schemas.json differ diff --git a/src/api/routes/users/#user_id/delete.ts b/src/api/routes/users/#user_id/delete.ts index 1a9d879c..dbb18e29 100644 --- a/src/api/routes/users/#user_id/delete.ts +++ b/src/api/routes/users/#user_id/delete.ts @@ -17,12 +17,7 @@ */ import { route } from "@spacebar/api"; -import { - emitEvent, - Member, - User, - UserDeleteEvent, -} from "@spacebar/util"; +import { emitEvent, Member, User, UserDeleteEvent } from "@spacebar/util"; import { Request, Response, Router } from "express"; import { PrivateUserProjection } from "@spacebar/schemas"; @@ -47,10 +42,8 @@ router.post( where: { id: req.params.user_id }, select: [...PrivateUserProjection, "data"], }); - await Promise.all([ - Member.delete({ id: req.params.user_id }), - User.delete({ id: req.params.user_id }), - ]); + const members = await Member.find({ where: { id: req.params.user_id } }); + await Promise.all([...members.map((member) => Member.removeFromGuild(member.id, member.guild_id)), User.delete({ id: req.params.user_id })]); // TODO: respect intents as USER_DELETE has potential to cause privacy issues await emitEvent({ diff --git a/src/api/routes/users/@me/delete.ts b/src/api/routes/users/@me/delete.ts index ac5e31e0..43861181 100644 --- a/src/api/routes/users/@me/delete.ts +++ b/src/api/routes/users/@me/delete.ts @@ -46,10 +46,7 @@ router.post( if (user.data.hash) { // guest accounts can delete accounts without password - correctpass = await bcrypt.compare( - req.body.password, - user.data.hash, - ); + correctpass = await bcrypt.compare(req.body.password, user.data.hash); if (!correctpass) { throw new HTTPError(req.t("auth:login.INVALID_PASSWORD")); } @@ -58,10 +55,8 @@ router.post( // TODO: decrement guild member count if (correctpass) { - await Promise.all([ - User.delete({ id: req.user_id }), - Member.delete({ id: req.user_id }), - ]); + const members = await Member.find({ where: { id: req.user_id } }); + await Promise.all([User.delete({ id: req.user_id }), ...members.map((member) => Member.removeFromGuild(member.id, member.guild_id))]); res.sendStatus(204); } else { diff --git a/src/api/routes/users/@me/guilds.ts b/src/api/routes/users/@me/guilds.ts index 701e6604..641180f3 100644 --- a/src/api/routes/users/@me/guilds.ts +++ b/src/api/routes/users/@me/guilds.ts @@ -77,7 +77,7 @@ router.delete( } await Promise.all([ - Member.delete({ id: req.user_id, guild_id: guild_id }), + Member.removeFromGuild(req.user_id, guild_id), emitEvent({ event: "GUILD_DELETE", data: { diff --git a/src/util/entities/Member.ts b/src/util/entities/Member.ts index a3b35702..7fc214c8 100644 --- a/src/util/entities/Member.ts +++ b/src/util/entities/Member.ts @@ -178,7 +178,7 @@ export class Member extends BaseClassWithoutId { id: user_id, guild_id, }), - Guild.decrement({ id: guild_id }, "member_count", -1), + Guild.decrement({ id: guild_id }, "member_count", 1), emitEvent({ event: "GUILD_DELETE",