all repos — caroster @ 6d2659c5a5d3df7aeeaad568e6543fcbb943bf45

[Octree] Group carpool to your event https://caroster.io

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                waitingPassengersCount: 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);