121 lines
3.8 KiB
JavaScript
121 lines
3.8 KiB
JavaScript
const { execQueryAsync, execQueryAsyncWithId } = require("./db.js");
|
|
const { queryCcId, queryToId, queryFromId } = require("./utils/addressQueries.js");
|
|
|
|
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);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
async function getRooms(mailboxId) {
|
|
const query = `
|
|
SELECT
|
|
app_room.room_id AS id,
|
|
app_room.room_name AS roomName,
|
|
address.email AS user,
|
|
app_room.owner_id AS userId,
|
|
app_room.notSeen,
|
|
mailbox_message.mailbox_id AS mailboxId
|
|
FROM app_room
|
|
INNER JOIN message
|
|
INNER JOIN mailbox_message
|
|
INNER JOIN address
|
|
WHERE
|
|
message.message_id = app_room.message_id AND
|
|
mailbox_message.mailbox_id = ? AND
|
|
mailbox_message.message_id = message.message_id AND
|
|
address.address_id = app_room.owner_id
|
|
ORDER BY app_room.lastUpdate DESC
|
|
`;
|
|
const values = [mailboxId];
|
|
return await execQueryAsync(query, values);
|
|
}
|
|
|
|
async function getMessages(roomId) {
|
|
// 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
|
|
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;
|
|
`;
|
|
const values = [roomId];
|
|
return await execQueryAsync(query, values);
|
|
}
|
|
|
|
async function getMembers(roomId) {
|
|
const query = `
|
|
SELECT
|
|
address.address_id,
|
|
address.address_name,
|
|
address.email
|
|
FROM app_room_member
|
|
INNER JOIN address ON address.address_id = app_room_member.member_id
|
|
WHERE app_room_member.room_id = ?
|
|
`;
|
|
const values = [roomId];
|
|
return await execQueryAsync(query, values);
|
|
}
|
|
|
|
module.exports = {
|
|
registerAccount,
|
|
getAccounts,
|
|
getRooms,
|
|
getMessages,
|
|
getMembers
|
|
};
|