all repos — caroster @ d25fd2970a46f8b86f2abaaff47a8ebef62e4f73

[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    sendDailyRecap: async (event) => {
21      const referenceDate = DateTime.now().minus({ day: 1 });
22      const hasBeenModified =
23        referenceDate <= DateTime.fromISO(event.updatedAt);
24      if (hasBeenModified) {
25        strapi.log.debug(
26          `Send daily recap to ${event.email} for event #${event.id}`
27        );
28        const newTravels = event.travels?.filter(
29          (travel) => referenceDate <= DateTime.fromISO(travel.createdAt)
30        );
31        const waitingPassengers = await strapi
32          .service("api::event.event")
33          .getWaitingPassengers(event);
34
35        await strapi
36          .service("api::email.email")
37          // TODO Set dynamic lang (but how ?)
38          .sendEmailNotif(event.email, "EventRecap", "en", {
39            event,
40            waitingListCount: waitingPassengers?.length || 0,
41            travelsCount: event.travels?.length || 0,
42            newTravelsCount: newTravels?.length || 0,
43          });
44      }
45    },
46
47    sendEndRecap: async (event) => {
48      const travelsCount = event.travels?.length || 0;
49      const passengersCount = event.passengers?.filter(
50        (passenger) => passenger.travel
51      ).length;
52      await strapi
53        .service("api::email.email")
54        // TODO Set dynamic lang (but how ?)
55        .sendEmailNotif(event.email, "EventEnded", "en", {
56          event,
57          travelsCount,
58          passengersCount,
59        });
60    },
61  })
62);