diff --git a/src/email/templates/ticketStatusCompleted.handlebars b/src/email/templates/ticketStatusCompleted.handlebars new file mode 100644 index 00000000..8b53d5e2 --- /dev/null +++ b/src/email/templates/ticketStatusCompleted.handlebars @@ -0,0 +1,35 @@ + + + + + + + + +
+ +
+ Your ticket has been completed! +
+ Here is the ticket's information: +
+
+ ID: {{id}}
+ Subject: {{subject}}
+ Reporter: {{reporter.name}} - {{reporter.email}}
+ Date: {{date}}
+ Type: {{type}}
+ Page: {{reportedFrom}} +
+
+ Description: {{description}}
+
+
+
+
+ Thanks,
Your EnCoach team
+
+
+ + diff --git a/src/pages/api/tickets/[id].ts b/src/pages/api/tickets/[id].ts index 223ae689..29e35e45 100644 --- a/src/pages/api/tickets/[id].ts +++ b/src/pages/api/tickets/[id].ts @@ -10,7 +10,9 @@ import { } from "firebase/firestore"; import { withIronSessionApiRoute } from "iron-session/next"; import { sessionOptions } from "@/lib/session"; -import { Ticket } from "@/interfaces/ticket"; +import { Ticket, TicketTypeLabel, TicketStatusLabel } from "@/interfaces/ticket"; +import moment from "moment"; +import { sendEmail } from "@/email"; const db = getFirestore(app); @@ -69,12 +71,38 @@ async function patch(req: NextApiRequest, res: NextApiResponse) { } const { id } = req.query as { id: string }; + const body = req.body as Ticket; + const snapshot = await getDoc(doc(db, "tickets", id)); const user = req.session.user; if (user.type === "admin" || user.type === "developer") { - await setDoc(snapshot.ref, req.body, { merge: true }); - return res.status(200).json({ ok: true }); + const data = snapshot.data() as Ticket; + await setDoc(snapshot.ref, body, { merge: true }); + try { + // send email if the status actually changed to completed + if(data.status !== req.body.status && req.body.status === 'completed') { + await sendEmail( + "ticketStatusCompleted", + { + id, + subject: body.subject, + reporter: body.reporter, + date: moment(body.date).format("DD/MM/YYYY - HH:mm"), + type: TicketTypeLabel[body.type], + reportedFrom: body.reportedFrom, + description: body.description, + }, + [data.reporter.email], + `Ticket ${id}: ${data.subject}`, + ); + } + } catch(err) { + console.error(err); + // doesnt matter if the email fails + } + res.status(200).json({ ok: true }); + return; } res.status(403).json({ ok: false });