summary refs log tree commit diff
path: root/api/src/routes/channels/#channel_id/pins.ts
diff options
context:
space:
mode:
Diffstat (limited to 'api/src/routes/channels/#channel_id/pins.ts')
-rw-r--r--api/src/routes/channels/#channel_id/pins.ts76
1 files changed, 41 insertions, 35 deletions
diff --git a/api/src/routes/channels/#channel_id/pins.ts b/api/src/routes/channels/#channel_id/pins.ts
index 3ed42ab4..d83e36ed 100644
--- a/api/src/routes/channels/#channel_id/pins.ts
+++ b/api/src/routes/channels/#channel_id/pins.ts
@@ -1,4 +1,4 @@
-import { Channel, ChannelPinsUpdateEvent, Config, emitEvent, getPermission, Message, MessageUpdateEvent, toObject } from "@fosscord/util";
+import { Channel, ChannelPinsUpdateEvent, Config, emitEvent, getPermission, Message, MessageUpdateEvent } from "@fosscord/util";
 import { Router, Request, Response } from "express";
 import { HTTPError } from "lambert-server";
 
@@ -6,35 +6,36 @@ const router: Router = Router();
 
 router.put("/:message_id", async (req: Request, res: Response) => {
 	const { channel_id, message_id } = req.params;
-	const channel = await Channel.findOneOrFail({ id: channel_id });
-	const permission = await getPermission(req.user_id, channel.guild_id, channel_id);
+
+	const message = await Message.findOneOrFail({ id: message_id });
+	const permission = await getPermission(req.user_id, message.guild_id, channel_id);
 	permission.hasThrow("VIEW_CHANNEL");
 
 	// * in dm channels anyone can pin messages -> only check for guilds
-	if (channel.guild_id) permission.hasThrow("MANAGE_MESSAGES");
+	if (message.guild_id) permission.hasThrow("MANAGE_MESSAGES");
 
-	const pinned_count = await Messagecount({ channel_id, pinned: true });
+	const pinned_count = await Message.count({ channel_id, pinned: true });
 	const { maxPins } = Config.get().limits.channel;
 	if (pinned_count >= maxPins) throw new HTTPError("Max pin count reached: " + maxPins);
 
-	await Message.update({ id: message_id }, { pinned: true });
-	const message = await Message.findOneOrFail({ id: message_id });
-
-	await emitEvent({
-		event: "MESSAGE_UPDATE",
-		channel_id,
-		data: message
-	} as MessageUpdateEvent);
+	await Promise.all([
+		Message.update({ id: message_id }, { pinned: true }),
+		emitEvent({
+			event: "MESSAGE_UPDATE",
+			channel_id,
+			data: message
+		} as MessageUpdateEvent),
 
-	await emitEvent({
-		event: "CHANNEL_PINS_UPDATE",
-		channel_id,
-		data: {
+		emitEvent({
+			event: "CHANNEL_PINS_UPDATE",
 			channel_id,
-			guild_id: channel.guild_id,
-			last_pin_timestamp: undefined
-		}
-	} as ChannelPinsUpdateEvent);
+			data: {
+				channel_id,
+				guild_id: message.guild_id,
+				last_pin_timestamp: undefined
+			}
+		} as ChannelPinsUpdateEvent)
+	]);
 
 	res.sendStatus(204);
 });
@@ -48,23 +49,28 @@ router.delete("/:message_id", async (req: Request, res: Response) => {
 	permission.hasThrow("VIEW_CHANNEL");
 	if (channel.guild_id) permission.hasThrow("MANAGE_MESSAGES");
 
-	const message = await Message.findOneOrFailAndUpdate({ id: message_id }, { pinned: false }, { new: true });
+	const message = await Message.findOneOrFail({ id: message_id });
+	message.pinned = false;
 
-	await emitEvent({
-		event: "MESSAGE_UPDATE",
-		channel_id,
-		data: message
-	} as MessageUpdateEvent);
+	await Promise.all([
+		message.save(),
+
+		emitEvent({
+			event: "MESSAGE_UPDATE",
+			channel_id,
+			data: message
+		} as MessageUpdateEvent),
 
-	await emitEvent({
-		event: "CHANNEL_PINS_UPDATE",
-		channel_id,
-		data: {
+		emitEvent({
+			event: "CHANNEL_PINS_UPDATE",
 			channel_id,
-			guild_id: channel.guild_id,
-			last_pin_timestamp: undefined
-		}
-	} as ChannelPinsUpdateEvent);
+			data: {
+				channel_id,
+				guild_id: channel.guild_id,
+				last_pin_timestamp: undefined
+			}
+		} as ChannelPinsUpdateEvent)
+	]);
 
 	res.sendStatus(204);
 });