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 279abee
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 5 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
57 changes: 55 additions & 2 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,42 @@ 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";

// TODO: clear text rather than signature
const html = `Du hast Noten ${score.signature} mit Nummer ${score.extId} 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!
`;

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 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
40 changes: 39 additions & 1 deletion 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,35 @@ 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";
// TODO: clear text rather than signature
const html = `Du hast Noten ${score.signature} mit Nummer ${score.extId} 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!
`;
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 Down

0 comments on commit 279abee

Please sign in to comment.