diff --git a/back/abl/Message-abl.ts b/back/abl/Message-abl.ts index fe239b8..dc35dce 100644 --- a/back/abl/Message-abl.ts +++ b/back/abl/Message-abl.ts @@ -7,52 +7,40 @@ import Message from "../mails/message/Message"; import Room from "../mails/room/Room"; export default class MessageAbl { - static async addFlag(body, res: Response) { + static async changeFlag(body, res: Response, isDelete: boolean) { const { mailboxId, messageId, flag } = body; - const uid = (await getMessageUid(messageId))[0]?.uid; - if (!uid) { + const message = new Message().setMessageId(messageId); + + try { + await message.useUid(); + } catch (err) { res.status(statusCode.NOT_FOUND).send({ error: "Message uid not found." }); } - const user = (await getUserOfMailbox(mailboxId))[0]?.user; - if (!user) { + try { + await message.useMailbox(mailboxId); + } catch (err) { res.status(statusCode.NOT_FOUND).send({ error: "Not account for this mailbox." }); } - emailManager - .getImap(user) - .getMailbox(mailboxId) - .addFlag(uid.toString(), [flag]) - .then(() => { - res.status(statusCode.OK).send(); - }) - .catch((err) => { - console.log(err); - res.status(statusCode.METHOD_FAILURE).send({ error: err }); - }); + + try { + if (isDelete) { + await message.mailbox.removeFlag(message.uid.toString(), flag); + } else { + await message.mailbox.addFlag(message.uid.toString(), flag); + } + } catch (err) { + res.status(statusCode.METHOD_FAILURE).send({ error: err }); + } + res.status(statusCode.OK).send(); + } + + static async addFlag(body, res: Response) { + await MessageAbl.changeFlag(body, res, false); } static async removeFlag(body, res: Response) { - const { mailboxId, messageId, flag } = body; - const uid = (await getMessageUid(messageId))[0]?.uid; - if (!uid) { - res.status(statusCode.NOT_FOUND).send({ error: "Message uid not found." }); - } - - const user = (await getUserOfMailbox(mailboxId))[0]?.user; - if (!user) { - res.status(statusCode.NOT_FOUND).send({ error: "Not account for this mailbox." }); - } - emailManager - .getImap(user) - .getMailbox(mailboxId) - .removeFlag(uid.toString(), [flag]) - .then(() => { - res.status(statusCode.OK).send(); - }) - .catch((err) => { - console.log(err); - res.status(statusCode.METHOD_FAILURE).send({ error: err }); - }); + await MessageAbl.changeFlag(body, res, true); } static deleteRemoteOnly = async (body, res: Response) => { diff --git a/back/db/message/updateMessage-db.ts b/back/db/message/updateMessage-db.ts index 76530ef..7f48804 100644 --- a/back/db/message/updateMessage-db.ts +++ b/back/db/message/updateMessage-db.ts @@ -19,7 +19,7 @@ export async function deleteFlag(messageId: number, flagId: number) { export async function updateMailboxSeen(messageId: number, isSeen: boolean) { const query = `UPDATE mailbox_message SET seen = ? WHERE message_id = ?`; - const values = [messageId, isSeen]; + const values = [isSeen, messageId]; return await execQueryAsync(query, values); } diff --git a/back/mails/message/Message.ts b/back/mails/message/Message.ts index 438f383..018649b 100644 --- a/back/mails/message/Message.ts +++ b/back/mails/message/Message.ts @@ -1,22 +1,17 @@ import { getFlagsOnId, getFlagsOnUid } from "../../db/message/message-db"; -import { deleteMessage, getFlags } from "../../db/message/updateMessage-db"; +import { deleteMessage } from "../../db/message/updateMessage-db"; import { getMessageUid, getUserOfMailbox } from "../../db/utils/mail"; import emailManager from "../EmailManager"; import Mailbox from "../imap/Mailbox"; import Room from "../room/Room"; -export default class Message extends Room { +export default class Message { messageId: number; uid: number; private _flags: string[] | undefined; private _mailbox: Mailbox; - constructor() { - super(); - this.messageId; - this.flags; - this._mailbox; - } + constructor() {} setMessageId(messageId: number): Message { this.messageId = messageId; diff --git a/back/mails/room/Room.ts b/back/mails/room/Room.ts index 133582b..065ca3e 100644 --- a/back/mails/room/Room.ts +++ b/back/mails/room/Room.ts @@ -2,9 +2,8 @@ import { deleteRoom, getRoomNbMessageAndThread, getRoomOnMessageId } from "../.. export default class Room { private _roomId: number; - constructor() { - this._roomId; - } + + constructor() {} setRoomId(roomId: number): Room { this._roomId = roomId;