summary refs log tree commit diff
path: root/api/src/routes/guilds
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-09-02 21:31:44 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-09-02 21:31:44 +0200
commit11af8531cce8cc5080f068b1677634c6027a7d72 (patch)
tree41523c621addea9984320967ec71ecadb826061d /api/src/routes/guilds
parentMerge branch 'master' of https://github.com/fosscord/fosscord-api (diff)
downloadserver-11af8531cce8cc5080f068b1677634c6027a7d72.tar.xz
:bug: fix entity missing an id (replace .insert with new Entity().save)
Diffstat (limited to 'api/src/routes/guilds')
-rw-r--r--api/src/routes/guilds/#guild_id/delete.ts25
-rw-r--r--api/src/routes/guilds/#guild_id/roles.ts2
-rw-r--r--api/src/routes/guilds/index.ts8
3 files changed, 19 insertions, 16 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);
 });
 
diff --git a/api/src/routes/guilds/#guild_id/roles.ts b/api/src/routes/guilds/#guild_id/roles.ts
index c3dd92dc..20ab0779 100644
--- a/api/src/routes/guilds/#guild_id/roles.ts
+++ b/api/src/routes/guilds/#guild_id/roles.ts
@@ -53,7 +53,7 @@ router.post("/", check(RoleModifySchema), async (req: Request, res: Response) =>
 	};
 
 	await Promise.all([
-		Role.insert(role),
+		new Role(role).save(),
 		emitEvent({
 			event: "GUILD_ROLE_CREATE",
 			guild_id,
diff --git a/api/src/routes/guilds/index.ts b/api/src/routes/guilds/index.ts
index 92525317..a87f926c 100644
--- a/api/src/routes/guilds/index.ts
+++ b/api/src/routes/guilds/index.ts
@@ -21,7 +21,7 @@ router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) =
 	const guild_id = Snowflake.generate();
 
 	const [guild, role] = await Promise.all([
-		Guild.insert({
+		new Guild({
 			name: body.name,
 			region: Config.get().regions.default,
 			owner_id: req.user_id,
@@ -48,8 +48,8 @@ router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) =
 				welcome_channels: []
 			},
 			widget_enabled: false
-		}),
-		Role.insert({
+		}).save(),
+		new Role({
 			id: guild_id,
 			guild_id: guild_id,
 			color: 0,
@@ -59,7 +59,7 @@ router.post("/", check(GuildCreateSchema), async (req: Request, res: Response) =
 			name: "@everyone",
 			permissions: String("2251804225"),
 			position: 0
-		})
+		}).save()
 	]);
 
 	if (!body.channels || !body.channels.length) body.channels = [{ id: "01", type: 0, name: "general" }];