From 74c78ba2a1535cbfe57643d2656266e6d30054e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20S=C3=BCdkamp?= Date: Thu, 21 Sep 2023 20:45:22 +0200 Subject: [PATCH] checkout confirmation mail --- controllers/authController.ts | 3 +- controllers/scoreController.ts | 71 +++++++++++++++++++++++++++-- dist/controllers/authController.js | 3 +- dist/controllers/scoreController.js | 54 ++++++++++++++++++++-- 4 files changed, 120 insertions(+), 11 deletions(-) diff --git a/controllers/authController.ts b/controllers/authController.ts index b530c8e..4eeec09 100644 --- a/controllers/authController.ts +++ b/controllers/authController.ts @@ -175,7 +175,8 @@ const sendVerificationSuccessfulEmail = async (user: any) => { const html = ` Du wurdest erfolgreich in der Noten Ausleihe Datenbank des Hans-Sachs-Chor registriert.
Zum Login

- 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).
+ Der QR Code kann aber auch jederzeit in der App angezeigt werden.

E-Mail: ${user.email}
Name: ${user.fullName()} diff --git a/controllers/scoreController.ts b/controllers/scoreController.ts index 141e925..b23a36d 100644 --- a/controllers/scoreController.ts +++ b/controllers/scoreController.ts @@ -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({ @@ -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 @@ -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, + }); } } } @@ -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, +

+ Du hast Noten "${(await getScoreTypeMap()).get(score.signature)}" mit Nummer ${score.id} vom Hans-Sachs-Chor ausgeliehen.
+ Bitte behandle die Noten pfleglich und nehme Eintragungen nur mit Bleistift vor.
+ Nach dem Konzert müssen die Noten zeitnah wieder zurückgegeben werden.
+ Radiere bitte vorher deine Eintragungen aus.
+

+ 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.
+

+ Und nun viel Spaß beim Proben und viel Erfolg beim Konzert! +

+ 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, @@ -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!
- Diese E-Mail wurde automatisch versendet!`; + const html = ` + Liebe Chorsängerin, lieber Chorsänger, +

+ Du hast die Noten "${(await getScoreTypeMap()).get(score.signature)}" mit Nummer ${score.id} erfolgreich zurückgegeben. Vielen Dank! +

+ Dein Hans-Sachs-Chor Notenwart + `; const mailOptions = { from: process.env.SMTP_FROM, diff --git a/dist/controllers/authController.js b/dist/controllers/authController.js index e28d431..e7ed875 100644 --- a/dist/controllers/authController.js +++ b/dist/controllers/authController.js @@ -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.
Zum Login

- 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).
+ Der QR Code kann aber auch jederzeit in der App angezeigt werden.

E-Mail: ${user.email}
Name: ${user.fullName()} diff --git a/dist/controllers/scoreController.js b/dist/controllers/scoreController.js index 5cf5d26..cbe2969 100644 --- a/dist/controllers/scoreController.js +++ b/dist/controllers/scoreController.js @@ -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 { @@ -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, + }); } } } @@ -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, +

+ Du hast Noten "${(yield (0, score_utils_1.getScoreTypeMap)()).get(score.signature)}" mit Nummer ${score.id} vom Hans-Sachs-Chor ausgeliehen.
+ Bitte behandle die Noten pfleglich und nehme Eintragungen nur mit Bleistift vor.
+ Nach dem Konzert müssen die Noten zeitnah wieder zurückgegeben werden.
+ Radiere bitte vorher deine Eintragungen aus.
+

+ 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.
+

+ Und nun viel Spaß beim Proben und viel Erfolg beim Konzert! +

+ 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; @@ -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!
- Diese E-Mail wurde automatisch versendet!`; + const html = ` + Liebe Chorsängerin, lieber Chorsänger, +

+ Du hast die Noten "${(yield (0, score_utils_1.getScoreTypeMap)()).get(score.signature)}" mit Nummer ${score.id} erfolgreich zurückgegeben. Vielen Dank! +

+ Dein Hans-Sachs-Chor Notenwart + `; const mailOptions = { from: process.env.SMTP_FROM, to: email,