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