diff --git a/api/src/routes/channels/#channel_id/pins.ts b/api/src/routes/channels/#channel_id/pins.ts
index 0dd81bd3..96a3fdbf 100644
--- a/api/src/routes/channels/#channel_id/pins.ts
+++ b/api/src/routes/channels/#channel_id/pins.ts
@@ -1,13 +1,4 @@
-import {
- ChannelModel,
- ChannelPinsUpdateEvent,
- Config,
- emitEvent,
- getPermission,
- MessageModel,
- 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";
@@ -15,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 ChannelModel.findOne({ id: channel_id }).exec();
- 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 MessageModel.count({ channel_id, pinned: true }).exec();
+ const pinned_count = await Message.count({ channel: { id: channel_id }, pinned: true });
const { maxPins } = Config.get().limits.channel;
if (pinned_count >= maxPins) throw new HTTPError("Max pin count reached: " + maxPins);
- await MessageModel.updateOne({ id: message_id }, { pinned: true }).exec();
- const message = toObject(await MessageModel.findOne({ id: message_id }).exec());
-
- 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);
});
@@ -51,29 +43,34 @@ router.put("/:message_id", async (req: Request, res: Response) => {
router.delete("/:message_id", async (req: Request, res: Response) => {
const { channel_id, message_id } = req.params;
- const channel = await ChannelModel.findOne({ id: channel_id }).exec();
+ const channel = await Channel.findOneOrFail({ id: channel_id });
const permission = await getPermission(req.user_id, channel.guild_id, channel_id);
permission.hasThrow("VIEW_CHANNEL");
if (channel.guild_id) permission.hasThrow("MANAGE_MESSAGES");
- const message = toObject(await MessageModel.findOneAndUpdate({ id: message_id }, { pinned: false }, { new: true }).exec());
+ const message = await Message.findOneOrFail({ id: message_id });
+ message.pinned = false;
+
+ await Promise.all([
+ message.save(),
- await emitEvent({
- event: "MESSAGE_UPDATE",
- channel_id,
- data: message
- } as MessageUpdateEvent);
+ 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);
});
@@ -81,13 +78,13 @@ router.delete("/:message_id", async (req: Request, res: Response) => {
router.get("/", async (req: Request, res: Response) => {
const { channel_id } = req.params;
- const channel = await ChannelModel.findOne({ id: channel_id }).exec();
+ const channel = await Channel.findOneOrFail({ id: channel_id });
const permission = await getPermission(req.user_id, channel.guild_id, channel_id);
permission.hasThrow("VIEW_CHANNEL");
- let pins = await MessageModel.find({ channel_id: channel_id, pinned: true }).exec();
+ let pins = await Message.find({ channel_id: channel_id, pinned: true });
- res.send(toObject(pins));
+ res.send(pins);
});
export default router;
|