add queries for app functionnalities
This commit is contained in:
parent
3286a2e52b
commit
aa9a69e17f
@ -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
15
back/package-lock.json
generated
@ -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",
|
||||||
|
@ -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"
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
};
|
};
|
@ -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) {
|
||||||
|
@ -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);
|
||||||
});
|
});
|
||||||
|
@ -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
|
||||||
};
|
};
|
Loading…
Reference in New Issue
Block a user