all repos — caroster @ 39032cf06d9bdb3727edff415ef614566f1a46c9

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

feat: ✨ Send notif when event has ended

#2
Tim Izzo tim@octree.ch
Thu, 26 Jan 2023 16:00:12 +0100
commit

39032cf06d9bdb3727edff415ef614566f1a46c9

parent

bfdcefc83e883d95ad54692b815b0686c4bf8e4b

2 files changed, 67 insertions(+), 0 deletions(-)

jump to
M backend/config/cron-tasks.tsbackend/config/cron-tasks.ts

@@ -20,4 +20,23 @@ await pMap(events, strapi.service("api::event.event").sendDailyRecap, {

concurrency: 5, }); }, + /** + * Send event recap when it has ended + * Only to events with a provided 'date' field + * Everyday at 08:30 + */ + "30 8 * * *": async ({ strapi }) => { + const events = await strapi.entityService.findMany("api::event.event", { + filters: { + date: { + $eq: DateTime.now().toISODate(), + }, + }, + populate: ["travels", "passengers", "passengers.travel"], + limit: -1, + }); + await pMap(events, strapi.service("api::event.event").sendEndRecap, { + concurrency: 5, + }); + }, };
M backend/src/api/event/services/event.tsbackend/src/api/event/services/event.ts

@@ -3,6 +3,7 @@ import { DateTime } from "luxon";

import { factories } from "@strapi/strapi"; const TEMPLATE_NAME_RECAP = "event_recap"; +const TEMPLATE_NAME_END_EVENT = "event_end"; const { STRAPI_URL = "" } = process.env; export default factories.createCoreService(

@@ -78,6 +79,53 @@ event.email

} for event #${event.id}. Error: ${JSON.stringify(error)}` ); } + } + }, + + sendEndRecap: async (event) => { + try { + const template = await strapi + .plugin("email-designer") + .services.template.findOne({ + name: TEMPLATE_NAME_END_EVENT, + }); + + if (!template) { + strapi.log.error( + `No email template with name ${TEMPLATE_NAME_END_EVENT}` + ); + return null; + } + + const travelsCount = event.travels?.length || 0; + const passengersCount = event.passengers?.filter( + (passenger) => passenger.travel + ).length; + + await strapi.service("plugin::email-designer.email").sendTemplatedEmail( + { + to: event.email, + }, + { + templateReferenceId: template.templateReferenceId, + }, + { + event, + travelsCount, + passengersCount, + eventLink: `${STRAPI_URL}/e/${event.uuid}`, + } + ); + strapi.log.info( + `Email with template '${TEMPLATE_NAME_END_EVENT}' sent to ${event.email}` + ); + } catch (error) { + console.error(error); + strapi.log.error( + `Impossible to send end event notification to ${ + event.email + } for event #${event.id}. Error: ${JSON.stringify(error)}` + ); } }, })