mail/back/db/Room-db.ts
2023-05-08 00:35:18 +02:00

86 lines
3.0 KiB
TypeScript

import { execQueryAsync } from "./db";
import { queryCcId, queryFromId, queryToId } from "./utils/addressQueries";
export async function getRoomOwner(roomId: number) {
const query = `
SELECT address.email
FROM app_room
INNER JOIN address ON address.address_id = app_room.owner_id
WHERE app_room.room_id = ?
`;
const values = [roomId];
return await execQueryAsync(query, values);
}
/**
* get all the data needed to reply to a message in a room
*/
export async function getLastMsgData(roomId: number) {
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,
message.messageID AS messageID
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
INNER JOIN message ON message.message_id = msg.message_id
WHERE msg.room_id = ?
GROUP BY msg.message_id
ORDER BY message.idate DESC
LIMIT 1
`;
const values = [roomId];
return await execQueryAsync(query, values);
}
export async function getRoomOnMessageId(messageId: number) {
const query = `SELECT room_id FROM app_room_message WHERE message_id = ?`;
const values = [messageId];
return await execQueryAsync(query, values);
}
export async function getRoomNbMessageAndThread(roomId: number): Promise<{ nbMessage: number; nbThread: number }[]> {
const query = `
SELECT COUNT(arm.room_id) AS nbMessage, COUNT(app_thread.room_id) AS nbThread
FROM app_room_message arm
INNER JOIN app_thread ON (app_thread.root_id = arm.room_id OR app_thread.parent_id = arm.room_id)
WHERE arm.room_id = ?`;
const values = [roomId];
return await execQueryAsync(query, values);
}
export async function deleteRoom(roomId: number) {
const query = `DELETE FROM app_room WHERE room_id = ?`;
const values = [roomId];
return await execQueryAsync(query, values);
}