backend/src/api/event/services/event.ts (view raw)
1// @ts-nocheck
2import { DateTime } from "luxon";
3import { factories } from "@strapi/strapi";
4
5const TEMPLATE_NAME_RECAP = "event_recap";
6const { STRAPI_URL = "" } = process.env;
7
8export default factories.createCoreService(
9 "api::event.event",
10 ({ strapi }) => ({
11 sendDailyRecap: async (event) => {
12 const referenceDate = DateTime.now().minus({ day: 1 });
13 const hasBeenModified =
14 referenceDate <= DateTime.fromISO(event.updatedAt);
15 if (hasBeenModified) {
16 strapi.log.debug(
17 `Send daily recap to ${event.email} for event #${event.id}`
18 );
19 const newTravels = event.travels?.filter(
20 (travel) => referenceDate <= DateTime.fromISO(travel.createdAt)
21 );
22 try {
23 const template = await strapi
24 .plugin("email-designer")
25 .services.template.findOne({
26 name: TEMPLATE_NAME_RECAP,
27 });
28
29 if (!template) {
30 strapi.log.error(
31 `No email template with name ${TEMPLATE_NAME_RECAP}`
32 );
33 return null;
34 }
35
36 await strapi
37 .service("plugin::email-designer.email")
38 .sendTemplatedEmail(
39 {
40 to: event.email,
41 },
42 {
43 templateReferenceId: template.templateReferenceId,
44 },
45 {
46 event,
47 eventLink: `${STRAPI_URL}/e/${event.uuid}`,
48 waitingListCount: event.waitingPassengers?.length || 0,
49 travelsCount: event.travels?.length || 0,
50 newTravelsCount: newTravels?.length || 0,
51 }
52 );
53 strapi.log.info(
54 `Email with template '${TEMPLATE_NAME_RECAP}' sent to ${event.email}`
55 );
56 } catch (error) {
57 console.error(error);
58 strapi.log.error(
59 `Impossible to send recap notification to ${
60 event.email
61 } for event #${event.id}. Error: ${JSON.stringify(error)}`
62 );
63 }
64 }
65 },
66 })
67);