fix: 🐛 Avoid daily notification for return events
Tim Izzo tim@5ika.ch
Thu, 09 Oct 2025 16:48:01 +0200
2 files changed,
52 insertions(+),
12 deletions(-)
M
backend/config/cron-tasks.ts
→
backend/config/cron-tasks.ts
@@ -12,7 +12,9 @@ filters: {
date: { $gte: DateTime.now().toISODate(), }, + isReturnEvent: false, }, + populate: { linkedEvent: { populate: ["travels", "passengers"] } }, limit: -1, });@@ -31,8 +33,18 @@ filters: {
date: { $eq: DateTime.now().minus({ day: 1 }).toISODate(), }, + isReturnEvent: false, }, - populate: ["travels", "passengers", "passengers.travel"], + populate: { + linkedEvents: { + populate: { + travels: true, + passengers: { populate: { passengers: true } }, + }, + }, + travels: true, + passengers: { populate: { passengers: true } }, + }, limit: -1, }); await pMap(events, strapi.service("api::event.event").sendEndRecap, {
M
backend/src/api/event/services/event.ts
→
backend/src/api/event/services/event.ts
@@ -51,17 +51,41 @@ (tripAlert) => !usersInTravel.includes(tripAlert.user.id)
); }, sendDailyRecap: async (event) => { + const returnEvent = event.linkedEvent; const referenceDate = DateTime.now().minus({ day: 1 }); const hasBeenModified = referenceDate <= DateTime.fromISO(event.updatedAt); - if (hasBeenModified) { + const returnEventHasBeenModified = + returnEvent && referenceDate <= DateTime.fromISO(returnEvent.updatedAt); + if (hasBeenModified || returnEventHasBeenModified) { strapi.log.debug(`Send daily recap to admins of event #${event.id}`); + + const travelsCount = + (event.travels?.length || 0) + (returnEvent?.travels?.length || 0); + + let waitingListCount = 0; + const waitingPassengers = await strapi + .service("api::event.event") + .getWaitingPassengers(event); + waitingListCount += waitingPassengers?.length || 0; + + let newTravelsCount = 0; const newTravels = event.travels?.filter( (travel) => referenceDate <= DateTime.fromISO(travel.createdAt) ); - const waitingPassengers = await strapi - .service("api::event.event") - .getWaitingPassengers(event); + newTravelsCount += newTravels?.length || 0; + + if (returnEvent) { + const returningWaitingPassengers = await strapi + .service("api::event.event") + .getWaitingPassengers(returnEvent); + waitingListCount += returningWaitingPassengers?.length || 0; + + const returningNewTravels = returnEvent.travels?.filter( + (travel) => referenceDate <= DateTime.fromISO(travel.createdAt) + ); + newTravelsCount += returningNewTravels?.length || 0; + } const administratorEmails = event.administrators?.split(/, ?/) || []; administratorEmails.push(event.email);@@ -71,19 +95,23 @@ await strapi
.service("api::email.email") .sendEmailNotif(email, "EventRecap", event.lang, { event, - waitingListCount: waitingPassengers?.length || 0, - travelsCount: event.travels?.length || 0, - newTravelsCount: newTravels?.length || 0, + travelsCount, + waitingListCount, + newTravelsCount, }); } } }, sendEndRecap: async (event) => { - const travelsCount = event.travels?.length || 0; - const passengersCount = event.passengers?.filter( - (passenger) => passenger.travel - ).length; + const returnEvent = event.linkedEvent; + const travelsCount = + (event.travels?.length || 0) + (returnEvent?.travels?.length || 0); + const passengersCount = + (event.passengers?.filter((passenger) => passenger.travel).length || + 0) + + (returnEvent.passengers?.filter((passenger) => passenger.travel) + .length || 0); const administratorEmails = event.administrators?.split(/, ?/) || []; administratorEmails.push(event.email);