add queries for app functionnalities

This commit is contained in:
grimhilt 2023-03-13 00:54:44 +01:00
parent 3286a2e52b
commit aa9a69e17f
7 changed files with 101 additions and 46 deletions

View File

@ -1,7 +1,7 @@
const { getAddresseId } = require("../sql/mail"); const { getAddresseId } = require("../sql/mail");
const { DEBUG } = require("../utils/debug"); const { DEBUG } = require("../utils/debug");
const { simpleParser } = require("mailparser"); const { simpleParser } = require("mailparser");
const moment = require('moment');
const { const {
registerMessage, registerMessage,
registerMailbox_message, registerMailbox_message,
@ -16,13 +16,14 @@ const {
registerMessageInRoom, registerMessageInRoom,
createThread, createThread,
registerMessageInThread, registerMessageInThread,
isRoomGroup isRoomGroup,
findSpacesFromMessage
} = require("../sql/saveMessageApp"); } = require("../sql/saveMessageApp");
const { getFieldId, findRoomByOwner } = require("../sql/mail"); const { getFieldId, findRoomByOwner } = require("../sql/mail");
function saveMessage(attrs, mailboxId, imap) { function saveMessage(attrs, mailboxId, imap) {
const envelope = attrs.envelope; const envelope = attrs.envelope;
const timestamp = new Date(envelope.date).getTime(); const timestamp = moment(new Date(envelope.date).getTime()).format('YYYY-MM-DD HH:mm:ss');
const rfc822size = attrs.size; const rfc822size = attrs.size;
registerMessage(timestamp, rfc822size, envelope.messageId).then( registerMessage(timestamp, rfc822size, envelope.messageId).then(
@ -94,7 +95,7 @@ function saveMessage(attrs, mailboxId, imap) {
getFieldId(newKey).then((fieldId) => { getFieldId(newKey).then((fieldId) => {
if (envelope[key]) { if (envelope[key]) {
envelope[key].forEach((elt, index) => { envelope[key].forEach((elt, index) => {
getAddresseId(`${elt.mailbox}@${elt.host}`).then((addressId) => { getAddresseId(createAddress(elt)).then((addressId) => {
saveAddress_fields(messageId, part, position, fieldId, index, addressId); saveAddress_fields(messageId, part, position, fieldId, index, addressId);
}); });
}); });
@ -104,7 +105,8 @@ function saveMessage(attrs, mailboxId, imap) {
}); });
// todo check for different provider name of inreplyto // todo check for different provider name of inreplyto
registerMessageInApp() // registerMessageInApp(envelope, messageId);
console.log(envelope)
} }
); );
@ -114,24 +116,33 @@ function haveSameReceivers() {
// take cc and to // take cc and to
} }
function registerMessageInApp() { /**
if (envelope.inReplyTo) { * take object address and join mailbox and host to return mailbox@host
registerReplyMessage(); */
} else { function createAddress(elt) {
findRoomByOwner(ownerId).then((res) => { return `${elt.mailbox}@${elt.host}`
if (res.length == 0) {
registerMessageInRoom(messageId, res[0].id);
} else {
createRoom(envelope.subject, ownerId, envelope.flags.includes["seen"]).then((roomId) => {
registerMessageInRoom(messageId, roomId);
});
}
});
}
} }
function registerReplyMessage() { function registerMessageInApp(envelope, messageId) {
findSpaceFromMessage(messageId).then((spaces) => { getAddresseId(createAddress(envelope.sender[0])).then((ownerId) => {
if (envelope.inReplyTo) {
registerReplyMessage();
} else {
findRoomByOwner(ownerId).then((res) => {
if (res.length == 0) {
registerMessageInRoom(messageId, res[0].id);
} else {
createRoom(envelope.subject, ownerId, envelope.flags.includes["seen"]).then((roomId) => {
registerMessageInRoom(messageId, roomId);
});
}
});
}
});
}
function registerReplyMessage(envelope, messageId) {
findSpacesFromMessage(messageId).then((spaces) => {
if(spaces.length == 0) { // no space, so is a transfer if(spaces.length == 0) { // no space, so is a transfer
// todo test if members of transferred message are included // todo test if members of transferred message are included
} else if (spaces[0].room) { // message in room } else if (spaces[0].room) { // message in room

15
back/package-lock.json generated
View File

@ -8,6 +8,7 @@
"imap": "^0.8.19", "imap": "^0.8.19",
"imap-simple": "^5.1.0", "imap-simple": "^5.1.0",
"mailparser": "^3.6.3", "mailparser": "^3.6.3",
"moment": "^2.29.4",
"mysql": "^2.18.1", "mysql": "^2.18.1",
"vue-router": "^4.1.6" "vue-router": "^4.1.6"
} }
@ -446,6 +447,15 @@
"libqp": "2.0.1" "libqp": "2.0.1"
} }
}, },
"node_modules/moment": {
"version": "2.29.4",
"resolved": "https://repo.plus4u.net/operatorGate/repository/public-javascript/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==",
"license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/mysql": { "node_modules/mysql": {
"version": "2.18.1", "version": "2.18.1",
"resolved": "https://repo.plus4u.net/operatorGate/repository/public-javascript/mysql/-/mysql-2.18.1.tgz", "resolved": "https://repo.plus4u.net/operatorGate/repository/public-javascript/mysql/-/mysql-2.18.1.tgz",
@ -1102,6 +1112,11 @@
"libqp": "2.0.1" "libqp": "2.0.1"
} }
}, },
"moment": {
"version": "2.29.4",
"resolved": "https://repo.plus4u.net/operatorGate/repository/public-javascript/moment/-/moment-2.29.4.tgz",
"integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w=="
},
"mysql": { "mysql": {
"version": "2.18.1", "version": "2.18.1",
"resolved": "https://repo.plus4u.net/operatorGate/repository/public-javascript/mysql/-/mysql-2.18.1.tgz", "resolved": "https://repo.plus4u.net/operatorGate/repository/public-javascript/mysql/-/mysql-2.18.1.tgz",

View File

@ -3,6 +3,7 @@
"imap": "^0.8.19", "imap": "^0.8.19",
"imap-simple": "^5.1.0", "imap-simple": "^5.1.0",
"mailparser": "^3.6.3", "mailparser": "^3.6.3",
"moment": "^2.29.4",
"mysql": "^2.18.1", "mysql": "^2.18.1",
"vue-router": "^4.1.6" "vue-router": "^4.1.6"
} }

View File

@ -18,6 +18,40 @@ bdd.connect(function (err) {
} }
}); });
function execQueryAsync(query) {
return new Promise((resolve, reject) => {
bdd.query(query, (err, results, fields) => {
if (err) {
reject(err);
} else {
resolve(results);
}
});
});
}
function execQueryAsyncWithId(query) {
return new Promise((resolve, reject) => {
bdd.query(query, (err, results, fields) => {
if (err) {
reject(err);
} else {
resolve(results.insertId);
}
});
});
}
function execQuery(query) {
bdd.query(query, (err, results, fields) => {
if (err) throw (err);
return results
});
}
module.exports = { module.exports = {
bdd: bdd, bdd, // todo remove this
execQuery,
execQueryAsync,
execQueryAsyncWithId
}; };

View File

@ -1,4 +1,4 @@
const bdd = require("./bdd.js").bdd; const { bdd, execQueryAsyncWithId } = require("./bdd.js");
const DEBUG = require("../utils/debug").DEBUG; const DEBUG = require("../utils/debug").DEBUG;
function isValidEmail(email) { function isValidEmail(email) {
@ -7,18 +7,12 @@ function isValidEmail(email) {
} }
function getAddresseId(email, name) { async function getAddresseId(email, name) {
const localpart = email.split("@")[0]; const localpart = email.split("@")[0];
const domain = email.split("@")[1]; const domain = email.split("@")[1];
return new Promise((resolve, reject) => { const query = `INSERT INTO address (address_name, localpart, domain, email) VALUES ('${name}', '${localpart}', '${domain}', '${email}')
if (!isValidEmail(email)) reject("Not a valid email"); ON DUPLICATE KEY UPDATE email = '${email}', address_id = LAST_INSERT_ID(address_id)`;
const query = `INSERT INTO address (address_name, localpart, domain, email) VALUES ('${name}', '${localpart}', '${domain}', '${email}') return await execQueryAsyncWithId(query);
ON DUPLICATE KEY UPDATE email = '${email}', id = LAST_INSERT_ID(id)`;
bdd.query(query, (err, results, fields) => {
if (err) reject(err);
resolve(results.insertId);
});
});
} }
function getMailboxId(email) { function getMailboxId(email) {
@ -28,15 +22,9 @@ function getMailboxId(email) {
// todo // todo
} }
function getFieldId(field) { async function getFieldId(field) {
return new Promise((resolve, reject) => { const query = `INSERT INTO field_name (field_name) VALUES ('${field}') ON DUPLICATE KEY UPDATE field_id=LAST_INSERT_ID(field_id)`;
const query = `INSERT INTO field_name (field_name) VALUES ('${field}') ON DUPLICATE KEY UPDATE field_id=LAST_INSERT_ID(field_id); return await execQueryAsyncWithId(query);
`;
bdd.query(query, (err, results, fields) => {
if (err) reject(err);
resolve(results.insertId);
});
});
} }
function findRoomByOwner(ownerId) { function findRoomByOwner(ownerId) {

View File

@ -1,9 +1,10 @@
const bdd = require("./bdd.js").bdd; const {bdd} = require("./bdd.js");
const DEBUG = require("../utils/debug").DEBUG; const DEBUG = require("../utils/debug").DEBUG;
function registerMessage(timestamp, rfc822size, messageId) { function registerMessage(timestamp, rfc822size, messageId) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const query = `INSERT INTO message (idate, messageID, rfc822size) VALUES (${timestamp}, '${messageId}', '${rfc822size}')`; const query = `INSERT INTO message (idate, messageID, rfc822size) VALUES ('${timestamp}', '${messageId}', ${rfc822size})
ON DUPLICATE KEY UPDATE message_id = LAST_INSERT_ID(message_id)`;
bdd.query(query, (err, results, fields) => { bdd.query(query, (err, results, fields) => {
if (err) reject(err); if (err) reject(err);
resolve(results.insertId); resolve(results.insertId);
@ -19,7 +20,7 @@ function registerMailbox_message(mailboxId, uid, messageId, modseq, seen, delete
} }
function registerBodypart(messageId, part, bodypartId, bytes, nbLines) { function registerBodypart(messageId, part, bodypartId, bytes, nbLines) {
const query = `INSERT IGNORE INTO part_number (message_id, part, bodypart, bytes, nbLines) VALUES ('${messageId}', '${part}', '${bodypartId}', '${bytes}', '${nbLines}')`; const query = `INSERT IGNORE INTO part_number (message_id, part, bodypart_id, bytes, nb_lines) VALUES ('${messageId}', '${part}', '${bodypartId}', '${bytes}', '${nbLines}')`;
bdd.query(query, (err, results, fields) => { bdd.query(query, (err, results, fields) => {
if (err) DEBUG.log(err); if (err) DEBUG.log(err);
}); });

View File

@ -83,10 +83,15 @@ function isRoomGroup(roomId) {
}); });
} }
function findSpacesFromMessage(messageId) {
const query = ``;
}
module.exports = { module.exports = {
createRoom, createRoom,
registerMessageInRoom, registerMessageInRoom,
createThread, createThread,
registerMessageInThread, registerMessageInThread,
isRoomGroup isRoomGroup,
findSpacesFromMessage
}; };