mirror of
https://github.com/spacebarchat/server.git
synced 2026-04-15 04:55:41 +00:00
Merge pull request #382 from fosscord/auto-delete-relations
Auto delete relations
This commit is contained in:
@@ -1,6 +1,15 @@
|
||||
import { Channel, ChannelDeleteEvent, ChannelPermissionOverwriteType, ChannelType, ChannelUpdateEvent, emitEvent, Recipient } from "@fosscord/util";
|
||||
import {
|
||||
Channel,
|
||||
ChannelDeleteEvent,
|
||||
ChannelPermissionOverwriteType,
|
||||
ChannelType,
|
||||
ChannelUpdateEvent,
|
||||
emitEvent,
|
||||
Recipient,
|
||||
handleFile
|
||||
} from "@fosscord/util";
|
||||
import { Request, Response, Router } from "express";
|
||||
import { handleFile, route } from "@fosscord/api";
|
||||
import { route } from "@fosscord/api";
|
||||
|
||||
const router: Router = Router();
|
||||
// TODO: delete channel
|
||||
@@ -20,15 +29,14 @@ router.delete("/", route({ permission: "MANAGE_CHANNELS" }), async (req: Request
|
||||
const channel = await Channel.findOneOrFail({ where: { id: channel_id }, relations: ["recipients"] });
|
||||
|
||||
if (channel.type === ChannelType.DM) {
|
||||
const recipient = await Recipient.findOneOrFail({ where: { channel_id: channel_id, user_id: req.user_id } })
|
||||
recipient.closed = true
|
||||
const recipient = await Recipient.findOneOrFail({ where: { channel_id: channel_id, user_id: req.user_id } });
|
||||
recipient.closed = true;
|
||||
await Promise.all([
|
||||
recipient.save(),
|
||||
emitEvent({ event: "CHANNEL_DELETE", data: channel, user_id: req.user_id } as ChannelDeleteEvent)
|
||||
]);
|
||||
|
||||
} else if (channel.type === ChannelType.GROUP_DM) {
|
||||
await Channel.removeRecipientFromChannel(channel, req.user_id)
|
||||
await Channel.removeRecipientFromChannel(channel, req.user_id);
|
||||
} else {
|
||||
await Promise.all([
|
||||
Channel.delete({ id: channel_id }),
|
||||
|
||||
@@ -3,7 +3,6 @@ import { Router, Response, Request } from "express";
|
||||
import { route } from "@fosscord/api";
|
||||
import { handleMessage, postHandleMessage } from "@fosscord/api";
|
||||
import { MessageCreateSchema } from "../index";
|
||||
import { deleteMessageAttachments } from "@fosscord/api/util/Attachments";
|
||||
|
||||
const router = Router();
|
||||
// TODO: message content/embed string length limit
|
||||
@@ -34,7 +33,6 @@ router.patch("/", route({ body: "MessageCreateSchema", permission: "SEND_MESSAGE
|
||||
});
|
||||
|
||||
await Promise.all([
|
||||
await deleteMessageAttachments(message_id, new_message.attachments), //This delete all the attachments not in the array
|
||||
new_message!.save(),
|
||||
await emitEvent({
|
||||
event: "MESSAGE_UPDATE",
|
||||
@@ -60,7 +58,6 @@ router.delete("/", route({}), async (req: Request, res: Response) => {
|
||||
permission.hasThrow("MANAGE_MESSAGES");
|
||||
}
|
||||
|
||||
await deleteMessageAttachments(message_id);
|
||||
await Message.delete({ id: message_id });
|
||||
|
||||
await emitEvent({
|
||||
|
||||
@@ -13,15 +13,8 @@ router.post("/", route({}), 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);
|
||||
|
||||
// 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([
|
||||
Role.delete({ guild_id }),
|
||||
Channel.delete({ guild_id }),
|
||||
Emoji.delete({ guild_id }),
|
||||
Member.delete({ guild_id }),
|
||||
Guild.delete({ id: guild_id }), // this will also delete all guild related data
|
||||
emitEvent({
|
||||
event: "GUILD_DELETE",
|
||||
data: {
|
||||
@@ -31,9 +24,6 @@ router.post("/", route({}), async (req: Request, res: Response) => {
|
||||
} 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);
|
||||
});
|
||||
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
import { Attachment } from "@fosscord/util";
|
||||
import { deleteFile } from "@fosscord/api";
|
||||
import { URL } from "url";
|
||||
|
||||
export async function deleteMessageAttachments(messageId: string, keep?: Attachment[]) {
|
||||
let attachments = await Attachment.find({ message_id: messageId });
|
||||
if (keep)
|
||||
attachments = attachments.filter(x => !keep.map(k => k.id).includes(x.id));
|
||||
await Promise.all(attachments.map(a => a.remove()));
|
||||
|
||||
attachments.forEach(a => deleteFile((new URL(a.url)).pathname)); //We don't need to await since this is done on the cdn
|
||||
}
|
||||
@@ -1,5 +1,4 @@
|
||||
export * from "./Base64";
|
||||
export * from "./cdn";
|
||||
export * from "./FieldError";
|
||||
export * from "./ipAddress";
|
||||
export * from "./Message";
|
||||
|
||||
Reference in New Issue
Block a user