impress-2020/pages/api/sendFeedback.js

57 lines
1.5 KiB
JavaScript
Raw Normal View History

const beeline = require("honeycomb-beeline")({
writeKey: process.env["HONEYCOMB_WRITE_KEY"],
dataset:
process.env["NODE_ENV"] === "production"
? "Dress to Impress (2020)"
: "Dress to Impress (2020, dev)",
serviceName: "impress-2020-gql-server",
});
2020-10-09 08:55:03 -07:00
import sendgridMail from "@sendgrid/mail";
sendgridMail.setApiKey(process.env.SENDGRID_API_KEY);
async function handle(req, res) {
2020-10-09 08:55:03 -07:00
const { content, email } = req.body;
if (!content) {
return res.status(400).send("Content must not be empty");
}
let contentSummary = content.trim();
if (contentSummary.length > 60) {
contentSummary = contentSummary.slice(0, 40) + "…";
}
const senderText = email || "<anonymous>";
console.info(`Sending from ${senderText}:\n${content}`);
const body = `${content}\n\nSent by ${senderText}`;
2020-10-09 08:55:03 -07:00
try {
await sendgridMail.send({
to: "matchu@openneo.net",
2020-10-09 08:55:03 -07:00
from: "impress-2020-feedback@openneo.net",
subject: `DTI feedback: ${contentSummary}`,
2020-10-22 23:35:01 -07:00
replyTo: email || undefined,
text: body,
2020-10-09 08:55:03 -07:00
});
} catch (e) {
console.error(e);
2020-10-22 23:35:01 -07:00
if (e.response && e.response.body && e.response.body.errors) {
console.error(e.response.body.errors);
}
2020-10-09 08:55:03 -07:00
return res.status(500).send("Error sending message, see logs");
}
return res.status(200).send();
}
async function handleWithBeeline(req, res) {
beeline.withTrace(
{ name: "api/sendFeedback", operation_name: "api/sendFeedback" },
() => handle(req, res),
);
}
export default handleWithBeeline;