all repos — caroster @ 5e0328b6f6c2e4d541c758504ed2f94279ed9863

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

backend/src/api/event/services/event.ts (view raw)

 1import { DateTime } from "luxon";
 2import { factories } from "@strapi/strapi";
 3
 4export default factories.createCoreService(
 5  "api::event.event",
 6  ({ strapi }) => ({
 7    getWaitingPassengers: async (event) => {
 8      return strapi.entityService.findMany("api::passenger.passenger", {
 9        filters: {
10          event: { id: event.id },
11          travel: {
12            id: {
13              $null: true,
14            },
15          },
16        },
17        populate: ["travel", "user"],
18      });
19    },
20    getTripAlerts: async (event) => {
21      const tripAlerts = await strapi.entityService.findMany(
22        "api::trip-alert.trip-alert",
23        {
24          filters: {
25            event: { id: event.id },
26            user: { $not: null },
27            enabled: true,
28          },
29          populate: ["user"],
30        }
31      );
32      const eventPassengers = await strapi.entityService.findMany(
33        "api::passenger.passenger",
34        {
35          filters: {
36            event: { id: event.id },
37            travel: {
38              id: {
39                $null: false,
40              },
41            },
42          },
43          populate: ["user"],
44        }
45      );
46      const usersInTravel = eventPassengers
47        .map((passenger) => passenger.user?.id)
48        .filter(Boolean);
49      return tripAlerts.filter(
50        (tripAlert) => !usersInTravel.includes(tripAlert.user.id)
51      );
52    },
53    sendDailyRecap: async (event) => {
54      const referenceDate = DateTime.now().minus({ day: 1 });
55      const hasBeenModified =
56        referenceDate <= DateTime.fromISO(event.updatedAt);
57      if (hasBeenModified) {
58        strapi.log.debug(
59          `Send daily recap to ${event.email} for event #${event.id}`
60        );
61        const newTravels = event.travels?.filter(
62          (travel) => referenceDate <= DateTime.fromISO(travel.createdAt)
63        );
64        const waitingPassengers = await strapi
65          .service("api::event.event")
66          .getWaitingPassengers(event);
67
68        await strapi
69          .service("api::email.email")
70          .sendEmailNotif(event.email, "EventRecap", event.lang, {
71            event,
72            waitingListCount: waitingPassengers?.length || 0,
73            travelsCount: event.travels?.length || 0,
74            newTravelsCount: newTravels?.length || 0,
75          });
76      }
77    },
78
79    sendEndRecap: async (event) => {
80      const travelsCount = event.travels?.length || 0;
81      const passengersCount = event.passengers?.filter(
82        (passenger) => passenger.travel
83      ).length;
84      await strapi
85        .service("api::email.email")
86        .sendEmailNotif(event.email, "EventEnded", event.lang, {
87          event,
88          travelsCount,
89          passengersCount,
90        });
91    },
92  })
93);