update delete behavior when have thread and beautify code
This commit is contained in:
@@ -2,11 +2,11 @@ import statusCode from "../utils/statusCodes";
|
||||
import { Response } from "express";
|
||||
import { getMessageUid, getUserOfMailbox } from "../db/utils/mail";
|
||||
import emailManager from "../mails/EmailManager";
|
||||
import { deleteMessage } from "../db/message/updateMessage-db";
|
||||
import logger from "../system/Logger";
|
||||
import { deleteRoom, getRoomNbMessage, getRoomOnMessageId } from "../db/Room-db";
|
||||
import Message from "../mails/message/Message";
|
||||
import Room from "../mails/room/Room";
|
||||
|
||||
export default class Message {
|
||||
export default class MessageAbl {
|
||||
static async addFlag(body, res: Response) {
|
||||
const { mailboxId, messageId, flag } = body;
|
||||
const uid = (await getMessageUid(messageId))[0]?.uid;
|
||||
@@ -57,77 +57,83 @@ export default class Message {
|
||||
|
||||
static deleteRemoteOnly = async (body, res: Response) => {
|
||||
const { mailboxId, messageId } = body;
|
||||
const uid = (await getMessageUid(messageId))[0]?.uid;
|
||||
if (!uid) {
|
||||
const message = new Message().setMessageId(messageId);
|
||||
|
||||
try {
|
||||
await message.useUid();
|
||||
} catch (error) {
|
||||
logger.err(error);
|
||||
res.status(statusCode.NOT_FOUND).send({ error: "Message uid not found." });
|
||||
return;
|
||||
}
|
||||
|
||||
const user = (await getUserOfMailbox(mailboxId))[0]?.user;
|
||||
if (!user) {
|
||||
try {
|
||||
await message.useMailbox(mailboxId);
|
||||
} catch (error) {
|
||||
res.status(statusCode.NOT_FOUND).send({ error: "Not account for this mailbox." });
|
||||
return;
|
||||
}
|
||||
const mailbox = emailManager.getImap(user).getMailbox(mailboxId);
|
||||
|
||||
// add flag for deletion
|
||||
mailbox
|
||||
.addFlag(uid.toString(), ["\\Deleted"])
|
||||
.then(() => {
|
||||
// move message to trash
|
||||
mailbox.moveToTrash(uid.toString(), (err) => {
|
||||
if (err) {
|
||||
logger.err(err);
|
||||
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
||||
} else {
|
||||
res.status(statusCode.OK).send();
|
||||
}
|
||||
});
|
||||
})
|
||||
.catch((err) => {
|
||||
logger.log(err);
|
||||
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
||||
try {
|
||||
await message.mailbox.addFlag(message.uid.toString(), ["\\Deleted"]);
|
||||
await message.mailbox.moveToTrash(message.uid.toString(), (err) => {
|
||||
throw err;
|
||||
});
|
||||
} catch (err) {
|
||||
logger.log(err);
|
||||
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
||||
return;
|
||||
}
|
||||
|
||||
res.status(statusCode.OK).send();
|
||||
};
|
||||
|
||||
static async deleteEverywhere(body, res: Response) {
|
||||
static deleteEverywhere = async (body, res: Response) => {
|
||||
const { mailboxId, messageId } = body;
|
||||
const uid = (await getMessageUid(messageId))[0]?.uid;
|
||||
if (!uid) {
|
||||
const message = new Message().setMessageId(messageId);
|
||||
await message.useFlags();
|
||||
|
||||
try {
|
||||
await message.useUid();
|
||||
} catch (error) {
|
||||
logger.err(error);
|
||||
res.status(statusCode.NOT_FOUND).send({ error: "Message uid not found." });
|
||||
return;
|
||||
}
|
||||
|
||||
const user = (await getUserOfMailbox(mailboxId))[0]?.user;
|
||||
if (!user) {
|
||||
res.status(statusCode.NOT_FOUND).send({ error: "Not account for this mailbox." });
|
||||
return;
|
||||
// if message not deleted remotly, delete it
|
||||
if (!message.isDeleted) {
|
||||
try {
|
||||
await message.useMailbox(mailboxId);
|
||||
} catch (error) {
|
||||
res.status(statusCode.NOT_FOUND).send({ error: "Not account for this mailbox." });
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
await message.mailbox.addFlag(message.uid.toString(), ["\\Deleted"]);
|
||||
await message.mailbox.moveToTrash(message.uid.toString(), (err) => {
|
||||
throw err;
|
||||
});
|
||||
} catch (err) {
|
||||
logger.log(err);
|
||||
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
const roomId = (await getRoomOnMessageId(messageId))[0]?.room_id;
|
||||
|
||||
emailManager
|
||||
.getImap(user)
|
||||
.getMailbox(mailboxId)
|
||||
.removeFlag(uid.toString(), ["\\Deleted"])
|
||||
.then(async () => {
|
||||
try {
|
||||
await deleteMessage(messageId);
|
||||
if (roomId) {
|
||||
const nbMessage = (await getRoomNbMessage(roomId))[0].nbMessage;
|
||||
if (nbMessage > 0) {
|
||||
res.status(statusCode.OK).send();
|
||||
} else {
|
||||
await deleteRoom(roomId);
|
||||
res.status(statusCode.OK).json({ deleteRoom: true }).send();
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
||||
console.log(err);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
||||
});
|
||||
}
|
||||
const room = await new Room().setRoomIdOnMessageId(messageId);
|
||||
try {
|
||||
await message.delete();
|
||||
if (room.roomId && room.shouldDelete()) {
|
||||
await room.delete();
|
||||
res.status(statusCode.OK).json({ deleteRoom: true }).send();
|
||||
return;
|
||||
}
|
||||
} catch (err) {
|
||||
res.status(statusCode.METHOD_FAILURE).send({ error: err });
|
||||
return;
|
||||
}
|
||||
res.status(statusCode.OK).send();
|
||||
};
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ function rmUserFromAddrs(addresses: { email: string }[], user: string) {
|
||||
addresses.splice(index, 1);
|
||||
}
|
||||
}
|
||||
export default class Room {
|
||||
export default class RoomAbl {
|
||||
// todo change name of reponse
|
||||
static async response(body, res: Response) {
|
||||
const { user, roomId, text, html } = body;
|
||||
|
||||
Reference in New Issue
Block a user