summary refs log tree commit diff
path: root/api/src/routes/guilds/#guild_id/delete.ts
diff options
context:
space:
mode:
Diffstat (limited to 'api/src/routes/guilds/#guild_id/delete.ts')
-rw-r--r--api/src/routes/guilds/#guild_id/delete.ts25
1 files changed, 14 insertions, 11 deletions
diff --git a/api/src/routes/guilds/#guild_id/delete.ts b/api/src/routes/guilds/#guild_id/delete.ts

index 043260e9..bbbd1fa4 100644 --- a/api/src/routes/guilds/#guild_id/delete.ts +++ b/api/src/routes/guilds/#guild_id/delete.ts
@@ -12,24 +12,27 @@ router.post("/", async (req: Request, res: Response) => { const guild = await Guild.findOneOrFail({ where: { id: guild_id }, select: ["owner_id"] }); if (guild.owner_id !== req.user_id) throw new HTTPError("You are not the owner of this guild", 401); - await emitEvent({ - event: "GUILD_DELETE", - data: { - id: guild_id - }, - guild_id: guild_id - } as GuildDeleteEvent); + // do not put everything into promise all, because of "QueryFailedError: SQLITE_CONSTRAINT: FOREIGN KEY constraint failed" + + await Message.delete({ guild_id }); // messages must be deleted before channel await Promise.all([ - Guild.delete({ id: guild_id }), Role.delete({ guild_id }), Channel.delete({ guild_id }), Emoji.delete({ guild_id }), - Invite.delete({ guild_id }), - Message.delete({ guild_id }), - Member.delete({ guild_id }) + Member.delete({ guild_id }), + emitEvent({ + event: "GUILD_DELETE", + data: { + id: guild_id + }, + guild_id: guild_id + } as GuildDeleteEvent) ]); + await Invite.delete({ guild_id }); // invite must be deleted after channel + await Guild.delete({ id: guild_id }); // guild must be deleted after everything else + return res.sendStatus(204); });