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);
});
|