import express from 'express' import cors from 'cors' import bodyParser from 'body-parser' import amqp from 'amqplib' import dotenv from 'dotenv' import sgMail from '@sendgrid/mail' dotenv.config() const app = express() const queuePaylater = process.env.QUEUE_PAYLATER const queueNota = process.env.QUEUE_NOTA const senderEmail = process.env.SENDER_EMAIL const apiKey = process.env.SENDGRIP_API_KEY sgMail.setApiKey(apiKey) app.use(cors()) app.use(bodyParser.json()) app.get('/', (_req, res) => { res.status.send(200).send("Amigo Receipt Sender Service Homepage!") }) amqp.connect(process.env.AMQP_SERVER).then(async conn => { const ch = await conn.createChannel() const queuePaylaterExist = ch.assertQueue(queuePaylater, { durable: true }); const queueNotaExist = ch.assertQueue(queueNota, { durable: true }) if (queueNotaExist) { queueNotaExist.then(() => { return ch.consume(queueNota, async (msg) => { var messageBody = JSON.parse(msg.content.toString()) console.log(`[*NOTA] Message Received! email : ${messageBody.email}`) sendReceipt({ email: messageBody.email, subject: messageBody.subject, content: messageBody.content, }) }, { noAck: true }) }).then(() => { console.log('* Waiting for messages from queue ' + queueNota) }) } if (queuePaylaterExist) { queuePaylaterExist.then(() => { return ch.consume(queueNota, async (msg) => { var messageBody = JSON.parse(msg.content.toString()) console.log(`[*PayLater] Message Received! email : ${messageBody.email}`) sendReceipt({ email: messageBody.email, subject: messageBody.subject, content: messageBody.content, }) }, { noAck: true }) }).then(() => { console.log('* Waiting for messages from queue ' + queueNota) }) } }).catch(console.warn) function sendReceipt(message) { const now = new Date() const msg = { to: message.email, from: senderEmail, subject: message.subject, html: message.content, } sgMail .send(msg) .then((response) => { if (response[0].statusCode == 202) { console.log(`Email sent to ${message.email} at ${now}`) } else { console.error(`Failed to send email to ${message.email} at ${now}`) } }) .catch((error) => { console.error(error) }) }