Skip to content

Commit

Permalink
checkout confirmation mail
Browse files Browse the repository at this point in the history
  • Loading branch information
hsc-nue committed Sep 21, 2023
1 parent ea07a9c commit 74c78ba
Show file tree
Hide file tree
Showing 4 changed files with 120 additions and 11 deletions.
3 changes: 2 additions & 1 deletion controllers/authController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,8 @@ const sendVerificationSuccessfulEmail = async (user: any) => {
const html = `
Du wurdest erfolgreich in der Noten Ausleihe Datenbank des Hans-Sachs-Chor registriert.<br>
<a href="${process.env.CYCLIC_URL}">Zum Login</a><br><br>
Bitte speichere den folgenden QR Code. Er vereinfacht das künftige Ausleihen von Noten (kein Leihzettel mehr nötig).
Bitte speichere den folgenden QR Code. Er vereinfacht das künftige Ausleihen von Noten (kein Leihzettel mehr nötig).<br>
Der QR Code kann aber auch jederzeit in der App angezeigt werden.
<p></p>
E-Mail: ${user.email}<br>
Name: ${user.fullName()}
Expand Down
71 changes: 66 additions & 5 deletions controllers/scoreController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@ import jwt from "jsonwebtoken";
require("dotenv").config();
import nodemailer from "nodemailer";
import { v4 as uuidv4 } from "uuid";
import { getScoreTypes, SIGNATURE_ALL, getScoreTypeMap } from "../utils/score-utils";
import {
getScoreTypes,
SIGNATURE_ALL,
getScoreTypeMap,
} from "../utils/score-utils";

// Create a nodemailer transporter TODO: dupliziert von app.ts
const transporter = nodemailer.createTransport({
Expand Down Expand Up @@ -123,6 +127,14 @@ module.exports.checkout_post = async (req: any, res: any) => {
score.checkouts.push(checkout);
score = await score.save();
if (score) {
const user = await User.findOne({ id: userId });
if (user) { // we don't expect error because we validated the user id before
await sendCheckoutConfirmationEmail(
user,
score,
process.env.EMAIL_TEST_RECIPIENT
);
}
res.status(201).json({ checkoutScore: score });
} else {
res
Expand Down Expand Up @@ -345,7 +357,12 @@ export async function checkouts(
for (const score of scores) {
for (const checkout of score.checkouts) {
const user = userMap.get(checkout.userId);
checkoutsWithUser.push({ checkout, user, scoreExtId: score.extId, signature: score.signature });
checkoutsWithUser.push({
checkout,
user,
scoreExtId: score.extId,
signature: score.signature,
});
}
}
}
Expand All @@ -371,6 +388,46 @@ export async function checkouts(
}
}

const sendCheckoutConfirmationEmail = async (
user: any,
score: IScore,
testRecipient?: string
) => {
try {
const email = testRecipient ? testRecipient : user.email;
const subject = "Hans-Sachs-Chor Noten ausgeliehen";

const html = `
Liebe Chorsängerin, lieber Chorsänger,
<p>
Du hast Noten "${(await getScoreTypeMap()).get(score.signature)}" mit Nummer ${score.id} vom Hans-Sachs-Chor ausgeliehen.<br>
Bitte behandle die Noten pfleglich und nehme Eintragungen nur mit Bleistift vor.<br>
Nach dem Konzert müssen die Noten zeitnah wieder zurückgegeben werden.<br>
Radiere bitte vorher deine Eintragungen aus.<br>
<p>
Wenn du das Konzert nicht mitsingen kannst, gib die Noten bitte so schnell wie möglich zurück damit sie anderen zur Vorfügung stehen.<br>
<p>
Und nun viel Spaß beim Proben und viel Erfolg beim Konzert!
<p>
Dein Hans-Sachs-Chor Notenwart
`;

const mailOptions = {
from: process.env.SMTP_FROM,
to: email,
subject,
html,
};

const result = await transporter.sendMail(mailOptions);
if (transporter.logger) {
console.log("Score checkout confirmation e-mail:", result);
}
} catch (err) {
console.error(err);
}
};

const sendCheckinConfirmationEmail = async (
user: any,
score: IScore,
Expand All @@ -388,9 +445,13 @@ const sendCheckinConfirmationEmail = async (
// `Die Noten mit Nummer ${extScoreId} wurden erfolgreich zurückgegeben. Vielen Dank!` +
// checkinComment;

// TODO: clear text rather than signature
const html = `Die Noten ${score.signature} mit Nummer ${score.extId} wurden erfolgreich zurückgegeben. Vielen Dank!<br>
Diese E-Mail wurde automatisch versendet!`;
const html = `
Liebe Chorsängerin, lieber Chorsänger,
<p>
Du hast die Noten "${(await getScoreTypeMap()).get(score.signature)}" mit Nummer ${score.id} erfolgreich zurückgegeben. Vielen Dank!
<p>
Dein Hans-Sachs-Chor Notenwart
`;

const mailOptions = {
from: process.env.SMTP_FROM,
Expand Down
3 changes: 2 additions & 1 deletion dist/controllers/authController.js
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,8 @@ const sendVerificationSuccessfulEmail = (user) => __awaiter(void 0, void 0, void
const html = `
Du wurdest erfolgreich in der Noten Ausleihe Datenbank des Hans-Sachs-Chor registriert.<br>
<a href="${process.env.CYCLIC_URL}">Zum Login</a><br><br>
Bitte speichere den folgenden QR Code. Er vereinfacht das künftige Ausleihen von Noten (kein Leihzettel mehr nötig).
Bitte speichere den folgenden QR Code. Er vereinfacht das künftige Ausleihen von Noten (kein Leihzettel mehr nötig).<br>
Der QR Code kann aber auch jederzeit in der App angezeigt werden.
<p></p>
E-Mail: ${user.email}<br>
Name: ${user.fullName()}
Expand Down
54 changes: 50 additions & 4 deletions dist/controllers/scoreController.js
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ module.exports.checkout_post = (req, res) => __awaiter(void 0, void 0, void 0, f
score.checkouts.push(checkout);
score = yield score.save();
if (score) {
const user = yield User_1.User.findOne({ id: userId });
if (user) { // we don't expect error because we validated the user id before
yield sendCheckoutConfirmationEmail(user, score, process.env.EMAIL_TEST_RECIPIENT);
}
res.status(201).json({ checkoutScore: score });
}
else {
Expand Down Expand Up @@ -328,7 +332,12 @@ function checkouts(res, signature, checkedOut, admin, userId) {
for (const score of scores) {
for (const checkout of score.checkouts) {
const user = userMap.get(checkout.userId);
checkoutsWithUser.push({ checkout, user, scoreExtId: score.extId, signature: score.signature });
checkoutsWithUser.push({
checkout,
user,
scoreExtId: score.extId,
signature: score.signature,
});
}
}
}
Expand All @@ -354,6 +363,39 @@ function checkouts(res, signature, checkedOut, admin, userId) {
});
}
exports.checkouts = checkouts;
const sendCheckoutConfirmationEmail = (user, score, testRecipient) => __awaiter(void 0, void 0, void 0, function* () {
try {
const email = testRecipient ? testRecipient : user.email;
const subject = "Hans-Sachs-Chor Noten ausgeliehen";
const html = `
Liebe Chorsängerin, lieber Chorsänger,
<p>
Du hast Noten "${(yield (0, score_utils_1.getScoreTypeMap)()).get(score.signature)}" mit Nummer ${score.id} vom Hans-Sachs-Chor ausgeliehen.<br>
Bitte behandle die Noten pfleglich und nehme Eintragungen nur mit Bleistift vor.<br>
Nach dem Konzert müssen die Noten zeitnah wieder zurückgegeben werden.<br>
Radiere bitte vorher deine Eintragungen aus.<br>
<p>
Wenn du das Konzert nicht mitsingen kannst, gib die Noten bitte so schnell wie möglich zurück damit sie anderen zur Vorfügung stehen.<br>
<p>
Und nun viel Spaß beim Proben und viel Erfolg beim Konzert!
<p>
Dein Hans-Sachs-Chor Notenwart
`;
const mailOptions = {
from: process.env.SMTP_FROM,
to: email,
subject,
html,
};
const result = yield transporter.sendMail(mailOptions);
if (transporter.logger) {
console.log("Score checkout confirmation e-mail:", result);
}
}
catch (err) {
console.error(err);
}
});
const sendCheckinConfirmationEmail = (user, score, testRecipient) => __awaiter(void 0, void 0, void 0, function* () {
try {
const email = testRecipient ? testRecipient : user.email;
Expand All @@ -365,9 +407,13 @@ const sendCheckinConfirmationEmail = (user, score, testRecipient) => __awaiter(v
// const html =
// `Die Noten mit Nummer ${extScoreId} wurden erfolgreich zurückgegeben. Vielen Dank!` +
// checkinComment;
// TODO: clear text rather than signature
const html = `Die Noten ${score.signature} mit Nummer ${score.extId} wurden erfolgreich zurückgegeben. Vielen Dank!<br>
Diese E-Mail wurde automatisch versendet!`;
const html = `
Liebe Chorsängerin, lieber Chorsänger,
<p>
Du hast die Noten "${(yield (0, score_utils_1.getScoreTypeMap)()).get(score.signature)}" mit Nummer ${score.id} erfolgreich zurückgegeben. Vielen Dank!
<p>
Dein Hans-Sachs-Chor Notenwart
`;
const mailOptions = {
from: process.env.SMTP_FROM,
to: email,
Expand Down

0 comments on commit 74c78ba

Please sign in to comment.