import { execQueryAsync, execQueryAsyncWithId } from "./db"; import { queryCcId, queryToId, queryFromId } from "./utils/addressQueries"; export async function registerAccount(userId, pwd, xoauth, xoauth2, host, port, tls) { const query = ` INSERT INTO app_account (user_id, account_pwd, xoauth, xoauth2, host, port, tls) VALUES (?, ?, ?, ?, ?, ?, ?) `; const values = [userId, pwd, xoauth, xoauth2, host, port, tls]; return await execQueryAsyncWithId(query, values); } export async function getAccounts() { // todo mailbox or account id ? const query = ` SELECT mailbox.mailbox_id AS id, address.email FROM app_account INNER JOIN address INNER JOIN mailbox WHERE address.address_id = app_account.user_id AND mailbox.account_id = app_account.account_id `; const values = []; return await execQueryAsync(query, values); } export async function getRooms(mailboxId) { const query = ` SELECT room.room_id AS id, room.room_name AS roomName, address.email AS user, room.owner_id AS userId, COUNT(notSeen.message_id) AS notSeen, room.room_type AS roomType, mailbox_message.mailbox_id AS mailboxId, app_thread.parent_id FROM app_room room INNER JOIN message ON message.message_id = room.message_id INNER JOIN mailbox_message ON mailbox_message.message_id = message.message_id INNER JOIN address ON address.address_id = room.owner_id LEFT JOIN app_thread ON room.room_id = app_thread.room_id LEFT JOIN ( SELECT app_room_message.room_id, app_room_message.message_id FROM app_room_message LEFT JOIN flag ON flag.message_id = app_room_message.message_id LEFT JOIN flag_name ON flag.flag_id = flag_name.flag_id WHERE flag_name.flag_name != "\\\\Seen" OR flag.message_id IS NULL ) notSeen ON notSeen.room_id = room.room_id WHERE mailbox_message.mailbox_id = ? GROUP BY room.room_id ORDER BY room.lastUpdate DESC `; // todo parent_id replace to root_id const query2 = ` SELECT room.room_id AS id, COUNT(t.message_id) AS notSeen FROM app_room room INNER JOIN message ON message.message_id = room.message_id INNER JOIN mailbox_message ON mailbox_message.message_id = message.message_id INNER JOIN address ON address.address_id = room.owner_id LEFT JOIN ( SELECT app_room_message.room_id, app_room_message.message_id FROM app_room_message INNER JOIN flag ON flag.message_id = app_room_message.message_id INNER JOIN flag_name ON flag.flag_id = flag_name.flag_id WHERE flag_name.flag_name = "\\\\Seen" ) t ON t.room_id = room.room_id GROUP BY room.room_id `; const values = [mailboxId]; return await execQueryAsync(query, values); } export async function getMessages(roomId: number) { // todo attachements name const query = ` SELECT msg.message_id AS id, GROUP_CONCAT(fromT.address_id) AS fromA, GROUP_CONCAT(toT.address_id) AS toA, GROUP_CONCAT(ccT.address_id) AS ccA, subjectT.value AS subject, content.text AS content, message.idate AS date, GROUP_CONCAT(flagT.flag_name) AS flags FROM app_room_message msg ${queryFromId} fromT ON msg.message_id = fromT.message_id ${queryToId} toT ON msg.message_id = toT.message_id ${queryCcId} ccT ON msg.message_id = ccT.message_id LEFT JOIN ( SELECT header_field.message_id, header_field.value FROM header_field INNER JOIN field_name WHERE field_name.field_id = header_field.field_id AND field_name.field_name = 'subject' ) subjectT ON msg.message_id = subjectT.message_id LEFT JOIN ( SELECT bodypart.text, header_field.message_id FROM bodypart INNER JOIN header_field INNER JOIN field_name WHERE field_name.field_id = header_field.field_id AND field_name.field_name = 'html' AND bodypart.bodypart_id = header_field.bodypart_id ) content ON msg.message_id = content.message_id LEFT JOIN flag ON flag.message_id = msg.message_id LEFT JOIN flag_name flagT ON flagT.flag_id = flag.flag_id INNER JOIN message ON message.message_id = msg.message_id WHERE msg.room_id = ? GROUP BY msg.message_id ORDER BY message.idate DESC; `; const values = [roomId]; return await execQueryAsync(query, values); } export async function getMembers(roomId) { const query = ` SELECT address.address_id AS id, address.address_name AS name, address.email AS email, field_name.field_name as type FROM app_room INNER JOIN address_field ON address_field.message_id = app_room.message_id INNER JOIN address ON address.address_id = address_field.address_id INNER JOIN field_name ON field_name.field_id = address_field.field_id WHERE app_room.room_id = ?; `; const values = [roomId]; return await execQueryAsync(query, values); }