Integrate mailsender in backend
This commit is contained in:
parent
4a09818b09
commit
7955f459d1
|
@ -2,11 +2,12 @@ const db = require('../db/postgres');
|
|||
|
||||
function submit_post(post, cb) {
|
||||
var queryString = `INSERT INTO NEWS(
|
||||
title, url, author, description
|
||||
title, url, author, author_email, description
|
||||
) VALUES(
|
||||
'${post.title}',
|
||||
'${post.url}',
|
||||
'${post.author}',
|
||||
'${post.author_email}',
|
||||
'${post.description}')`;
|
||||
|
||||
db.insert(queryString, function(err, result) {
|
||||
|
|
|
@ -76,6 +76,7 @@ services:
|
|||
- RMQ_ENDPOINT=amqp://rabbitmq
|
||||
networks:
|
||||
- rmq-network
|
||||
- db-network
|
||||
|
||||
db:
|
||||
image: postgres
|
||||
|
|
|
@ -74,6 +74,7 @@ services:
|
|||
- RMQ_ENDPOINT=amqp://rabbitmq
|
||||
networks:
|
||||
- rmq-network
|
||||
- db-network
|
||||
|
||||
db:
|
||||
image: postgres
|
||||
|
|
|
@ -2,15 +2,5 @@ var mq = require('./mq/rmq');
|
|||
var express = require('express');
|
||||
var app = express();
|
||||
|
||||
/*
|
||||
mail.sendMail(mailOptions, function(error, info){
|
||||
if (error) {
|
||||
console.log(error);
|
||||
} else {
|
||||
console.log('Email sent: ' + info.response);
|
||||
}
|
||||
});
|
||||
*/
|
||||
|
||||
mq.startRMQ();
|
||||
module.exports = app;
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
const { Pool } = require('pg')
|
||||
|
||||
const pool = new Pool({
|
||||
user: 'postgres',
|
||||
host: 'db',
|
||||
database: 'wna',
|
||||
password: 'postgres',
|
||||
port: 5432,
|
||||
})
|
||||
|
||||
function insert(query, cb) {
|
||||
const result = pool.query(query, (err, res) => {
|
||||
if (err !== undefined) {
|
||||
// log the error to console
|
||||
console.log("Postgres INSERT error:", err);
|
||||
|
||||
// get the keys for the error
|
||||
var keys = Object.keys(err);
|
||||
console.log("\nkeys for Postgres error:", keys);
|
||||
|
||||
// get the error position of SQL string
|
||||
console.log("Postgres error position:", err.position);
|
||||
|
||||
return cb(err);
|
||||
}
|
||||
|
||||
// check if the response is not 'undefined'
|
||||
if (res !== undefined) {
|
||||
// log the response to console
|
||||
console.log("Postgres response:", res);
|
||||
|
||||
// get the keys for the response object
|
||||
var keys = Object.keys(res);
|
||||
|
||||
// log the response keys to console
|
||||
console.log("\nkeys type:", typeof keys);
|
||||
console.log("keys for Postgres response:", keys);
|
||||
|
||||
if (res.rowCount > 0) {
|
||||
console.log("# of records inserted:", res.rowCount);
|
||||
cb(null, 1);
|
||||
} else {
|
||||
console.log("No records were inserted.");
|
||||
cb(null, -1);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = { pool, insert };
|
|
@ -8,11 +8,4 @@ var mail = nodemailer.createTransport({
|
|||
}
|
||||
});
|
||||
|
||||
var mailOptions = {
|
||||
from: 'wna.no.reply@gmail.com',
|
||||
to: 'lucian.popescu187@gmail.com, airineidaniel23@gmail.com, ana-maria.bilis@stud.umfcd.ro, mariablinda@yahoo.com, mihai12351@gmail.com',
|
||||
subject: 'Sending Email using javascript',
|
||||
html: 'Noroc, boierilor! https://www.youtube.com/watch?v=ZhyD_GrVst0'
|
||||
}
|
||||
|
||||
module.exports = { mailOptions };
|
||||
module.exports = { mail };
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
var amqp = require('amqplib/callback_api');
|
||||
var mail = require('../mail/mail');
|
||||
var router = require('../router/router');
|
||||
var amqpConn = null;
|
||||
|
||||
function closeOnErr(err) {
|
||||
|
@ -11,7 +12,7 @@ function closeOnErr(err) {
|
|||
|
||||
function work(msg, cb) {
|
||||
console.log("Got message from RMQ: ", msg.content.toString());
|
||||
console.log("Now I should send the email!");
|
||||
router.handleReq(JSON.parse(msg.content.toString()));
|
||||
|
||||
cb(true);
|
||||
}
|
||||
|
@ -44,9 +45,9 @@ function whenConnected() {
|
|||
consChannel = ch;
|
||||
|
||||
ch.prefetch(10);
|
||||
ch.assertQueue("jobs", { durable: true }, function(err, _ok) {
|
||||
ch.assertQueue("mailq", { durable: true }, function(err, _ok) {
|
||||
if (closeOnErr(err)) return;
|
||||
ch.consume("jobs", processMsg, { noAck: false });
|
||||
ch.consume("mailq", processMsg, { noAck: false });
|
||||
console.log("Worker is started");
|
||||
});
|
||||
});
|
||||
|
|
|
@ -11,7 +11,8 @@
|
|||
"dependencies": {
|
||||
"amqplib": "^0.9.0",
|
||||
"express": "^4.18.1",
|
||||
"nodemailer": "^6.7.5"
|
||||
"nodemailer": "^6.7.5",
|
||||
"pg": "^8.7.3"
|
||||
}
|
||||
},
|
||||
"node_modules/accepts": {
|
||||
|
@ -92,6 +93,14 @@
|
|||
"resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz",
|
||||
"integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg=="
|
||||
},
|
||||
"node_modules/buffer-writer": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
|
||||
"integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==",
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/bytes": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
||||
|
@ -487,6 +496,11 @@
|
|||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/packet-reader": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
|
||||
"integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
|
||||
},
|
||||
"node_modules/parseurl": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
||||
|
@ -500,6 +514,115 @@
|
|||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
||||
},
|
||||
"node_modules/pg": {
|
||||
"version": "8.7.3",
|
||||
"resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz",
|
||||
"integrity": "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==",
|
||||
"dependencies": {
|
||||
"buffer-writer": "2.0.0",
|
||||
"packet-reader": "1.0.0",
|
||||
"pg-connection-string": "^2.5.0",
|
||||
"pg-pool": "^3.5.1",
|
||||
"pg-protocol": "^1.5.0",
|
||||
"pg-types": "^2.1.0",
|
||||
"pgpass": "1.x"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 8.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"pg-native": ">=2.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"pg-native": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/pg-connection-string": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz",
|
||||
"integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ=="
|
||||
},
|
||||
"node_modules/pg-int8": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
|
||||
"integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==",
|
||||
"engines": {
|
||||
"node": ">=4.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pg-pool": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz",
|
||||
"integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==",
|
||||
"peerDependencies": {
|
||||
"pg": ">=8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/pg-protocol": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz",
|
||||
"integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ=="
|
||||
},
|
||||
"node_modules/pg-types": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
|
||||
"integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
|
||||
"dependencies": {
|
||||
"pg-int8": "1.0.1",
|
||||
"postgres-array": "~2.0.0",
|
||||
"postgres-bytea": "~1.0.0",
|
||||
"postgres-date": "~1.0.4",
|
||||
"postgres-interval": "^1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/pgpass": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
|
||||
"integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
|
||||
"dependencies": {
|
||||
"split2": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/postgres-array": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
|
||||
"integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==",
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/postgres-bytea": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
|
||||
"integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/postgres-date": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
|
||||
"integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/postgres-interval": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
|
||||
"integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
|
||||
"dependencies": {
|
||||
"xtend": "^4.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/proxy-addr": {
|
||||
"version": "2.0.7",
|
||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
||||
|
@ -639,6 +762,14 @@
|
|||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/split2": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz",
|
||||
"integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==",
|
||||
"engines": {
|
||||
"node": ">= 10.x"
|
||||
}
|
||||
},
|
||||
"node_modules/statuses": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
|
||||
|
@ -704,6 +835,14 @@
|
|||
"engines": {
|
||||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/xtend": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
||||
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
|
||||
"engines": {
|
||||
"node": ">=0.4"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
|
@ -772,6 +911,11 @@
|
|||
"resolved": "https://registry.npmjs.org/buffer-more-ints/-/buffer-more-ints-1.0.0.tgz",
|
||||
"integrity": "sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg=="
|
||||
},
|
||||
"buffer-writer": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz",
|
||||
"integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw=="
|
||||
},
|
||||
"bytes": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
||||
|
@ -1052,6 +1196,11 @@
|
|||
"ee-first": "1.1.1"
|
||||
}
|
||||
},
|
||||
"packet-reader": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz",
|
||||
"integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ=="
|
||||
},
|
||||
"parseurl": {
|
||||
"version": "1.3.3",
|
||||
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
||||
|
@ -1062,6 +1211,84 @@
|
|||
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
|
||||
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
|
||||
},
|
||||
"pg": {
|
||||
"version": "8.7.3",
|
||||
"resolved": "https://registry.npmjs.org/pg/-/pg-8.7.3.tgz",
|
||||
"integrity": "sha512-HPmH4GH4H3AOprDJOazoIcpI49XFsHCe8xlrjHkWiapdbHK+HLtbm/GQzXYAZwmPju/kzKhjaSfMACG+8cgJcw==",
|
||||
"requires": {
|
||||
"buffer-writer": "2.0.0",
|
||||
"packet-reader": "1.0.0",
|
||||
"pg-connection-string": "^2.5.0",
|
||||
"pg-pool": "^3.5.1",
|
||||
"pg-protocol": "^1.5.0",
|
||||
"pg-types": "^2.1.0",
|
||||
"pgpass": "1.x"
|
||||
}
|
||||
},
|
||||
"pg-connection-string": {
|
||||
"version": "2.5.0",
|
||||
"resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz",
|
||||
"integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ=="
|
||||
},
|
||||
"pg-int8": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz",
|
||||
"integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw=="
|
||||
},
|
||||
"pg-pool": {
|
||||
"version": "3.5.1",
|
||||
"resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.1.tgz",
|
||||
"integrity": "sha512-6iCR0wVrro6OOHFsyavV+i6KYL4lVNyYAB9RD18w66xSzN+d8b66HiwuP30Gp1SH5O9T82fckkzsRjlrhD0ioQ==",
|
||||
"requires": {}
|
||||
},
|
||||
"pg-protocol": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.5.0.tgz",
|
||||
"integrity": "sha512-muRttij7H8TqRNu/DxrAJQITO4Ac7RmX3Klyr/9mJEOBeIpgnF8f9jAfRz5d3XwQZl5qBjF9gLsUtMPJE0vezQ=="
|
||||
},
|
||||
"pg-types": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz",
|
||||
"integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==",
|
||||
"requires": {
|
||||
"pg-int8": "1.0.1",
|
||||
"postgres-array": "~2.0.0",
|
||||
"postgres-bytea": "~1.0.0",
|
||||
"postgres-date": "~1.0.4",
|
||||
"postgres-interval": "^1.1.0"
|
||||
}
|
||||
},
|
||||
"pgpass": {
|
||||
"version": "1.0.5",
|
||||
"resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz",
|
||||
"integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==",
|
||||
"requires": {
|
||||
"split2": "^4.1.0"
|
||||
}
|
||||
},
|
||||
"postgres-array": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz",
|
||||
"integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="
|
||||
},
|
||||
"postgres-bytea": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz",
|
||||
"integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU="
|
||||
},
|
||||
"postgres-date": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz",
|
||||
"integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q=="
|
||||
},
|
||||
"postgres-interval": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz",
|
||||
"integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==",
|
||||
"requires": {
|
||||
"xtend": "^4.0.0"
|
||||
}
|
||||
},
|
||||
"proxy-addr": {
|
||||
"version": "2.0.7",
|
||||
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
||||
|
@ -1179,6 +1406,11 @@
|
|||
"object-inspect": "^1.9.0"
|
||||
}
|
||||
},
|
||||
"split2": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz",
|
||||
"integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ=="
|
||||
},
|
||||
"statuses": {
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
|
||||
|
@ -1226,6 +1458,11 @@
|
|||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
|
||||
},
|
||||
"xtend": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
||||
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ=="
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
"dependencies": {
|
||||
"amqplib": "^0.9.0",
|
||||
"express": "^4.18.1",
|
||||
"nodemailer": "^6.7.5"
|
||||
"nodemailer": "^6.7.5",
|
||||
"pg": "^8.7.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
const db = require('../db/postgres');
|
||||
const {mail: mail} = require('../mail/mail');
|
||||
|
||||
function send_add_comment_mail(op_mail, comment_author) {
|
||||
var mailOptions = {
|
||||
from: 'wna.no.reply@gmail.com',
|
||||
to: op_mail,
|
||||
subject: 'War-News-Aggregator Post Notification',
|
||||
html: comment_author + " just commented on your post!"
|
||||
}
|
||||
|
||||
mail.sendMail(mailOptions, function(error, info){
|
||||
if (error) {
|
||||
console.log(error);
|
||||
} else {
|
||||
console.log('Email sent: ' + info.response);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function handleReq(req) {
|
||||
if (req.method === "add_comment") {
|
||||
var getOpMailQuery = `SELECT author_email FROM news
|
||||
WHERE news.id = ${req.news_id}`;
|
||||
db.pool.query(getOpMailQuery, (err, res) => {
|
||||
if (err) {
|
||||
console.error("Cannot send email due to database connection issues: " + err);
|
||||
} else {
|
||||
if (res.rowCount > 0) {
|
||||
send_add_comment_mail(res.rows[0].author_email, req.author);
|
||||
} else {
|
||||
console.error("Database problem: could not find author of post");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { handleReq };
|
|
@ -26,10 +26,11 @@ router.post('/submit_post', auth.jwtCheck, function(req, res, next) {
|
|||
}
|
||||
|
||||
const post = {
|
||||
title: req.body.title,
|
||||
url: req.body.url || '',
|
||||
author: req.body.author,
|
||||
description: req.body.description || ''
|
||||
title: req.body.title,
|
||||
url: req.body.url || '',
|
||||
author: req.body.author,
|
||||
author_email: req.body.email,
|
||||
description: req.body.description || ''
|
||||
};
|
||||
|
||||
mq.publish("", "jobs",
|
||||
|
@ -94,6 +95,9 @@ router.post('/add_comment', auth.jwtCheck, function(req, res, next) {
|
|||
console.log(_err);
|
||||
});
|
||||
});
|
||||
|
||||
mq.publish("", "mailq",
|
||||
Buffer.from(JSON.stringify({...comm, method: "add_comment"})), () => {});
|
||||
});
|
||||
|
||||
router.get('/get_comments', auth.jwtCheck, function(req, res, next) {
|
||||
|
|
|
@ -3,6 +3,7 @@ CREATE TABLE IF NOT EXISTS NEWS (
|
|||
title VARCHAR(100) NOT NULL,
|
||||
url TEXT,
|
||||
author VARCHAR(50),
|
||||
author_email VARCHAR(50),
|
||||
description TEXT
|
||||
);
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
#!/bin/sh
|
||||
|
||||
curl -X POST http://localhost:8000/submit_post -H "Content-Type: application/json" -d '{"title": "mytitle", "url": "myurl", "author": "myauthor", "description": "mydescription"}'; echo
|
||||
curl -X POST http://localhost:8000/submit_post -H "Content-Type: application/json" -d '{"title": "mytitle", "url": "myurl", "author": "myauthor", "email": "lucian.popescu187@gmail.com", "description": "mydescription"}'; echo
|
||||
curl -X GET http://localhost:8000/get_news; echo
|
||||
|
||||
curl -X POST http://localhost:8000/add_comment -H "Content-Type: application/json" -d '{"content": "mycontent", "author": "myauthor", "news_id": 1}'; echo
|
||||
|
|
Loading…
Reference in New Issue