all repos — caroster @ f32f255ec915c750c098a36aa5ed977311cf93f3

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

feat: :sparkles: Send event recap to all event's admins

#587 #588
Tim Izzo tim@5ika.ch
Mon, 02 Jun 2025 16:03:53 +0200
commit

f32f255ec915c750c098a36aa5ed977311cf93f3

parent

5e0328b6f6c2e4d541c758504ed2f94279ed9863

M backend/src/api/email/locales/de.jsonbackend/src/api/email/locales/de.json

@@ -25,7 +25,7 @@ "title": "<%= event.name %> - Trip entfernt",

"content": "Die Fahrt '<%= vehicleName %>', die Sie abonniert haben, wurde entfernt. Sie können versuchen, [hier] eine andere verfügbare Fahrt für Sie zu finden (<%= host %>/e/<%= event.uuid %>)." }, "EventRecap": { - "content": "## Es gibt etwas Neues in Ihrem Ereignis „<%= event.name %>“\n\n⏳ Anzahl der Fahrgäste, die einen Sitzplatz suchen : <%= waitingListCount %>\n🚗 Anzahl der Fahrten : <%= travelsCount %>\n🆕 Anzahl der neuen Fahrten: <%= newTravelsCount %>\n\nLink zu Ihrem Caroster: <%= host %>/e/<%= event.uuid %>\n\nSie erhalten diese E-Mail, weil Sie der Ersteller dieser Veranstaltung sind.", + "content": "## Es gibt etwas Neues in Ihrem Ereignis „<%= event.name %>“\n\n⏳ Anzahl der Fahrgäste, die einen Sitzplatz suchen : <%= waitingListCount %>\n🚗 Anzahl der Fahrten : <%= travelsCount %>\n🆕 Anzahl der neuen Fahrten: <%= newTravelsCount %>\n\nLink zu Ihrem Caroster: <%= host %>/e/<%= event.uuid %>\n\nSie erhalten diese E-Mail, weil Sie der Schöpfer dieses Ereignisses sind.", "title": "<%= event.name %> - Etwas ist neu bei Ihrem Eregnis" }, "DeletedYourTrip": {

@@ -50,7 +50,7 @@ "content": "## Hurra, Ihr Caroster „<%= event.name %>“ ist fertig!\n\nFang an zu organisieren:\n\n🚗 Fahrten hinzufügen\n\n💬 Laden Sie Ihre Teilnehmer zu Fahrgemeinschaften ein, indem Sie Ihren Caroster-Link teilen.\n\nLink teilen:\n<%= host %>/e/<%= event.uuid %>"

}, "EventEnded": { "title": "<%= event.name %> - Ihr Ereignis ist vorbei!", - "content": "## „<%= event.name %>“ ist vorbei !\n\n👏 Anzahl der Passagiere : <%= event.passengers.length %>\n🚗 Anzahl der durchgeführten Fahrten : <%= event.travels.length %>\n\nLink zu Ihrem Caroster: <%= host %>/e/<%= event.uuid %>\n\nSie erhalten diese E-Mail, weil Sie der Ersteller dieser Veranstaltung sind." + "content": "## „<%= event.name %>“ ist vorbei !\n\n👏 Anzahl der Passagiere : <%= event.passengers.length %>\n🚗 Anzahl der durchgeführten Fahrten : <%= event.travels.length %>\n\nLink zu Ihrem Caroster: <%= host %>/e/<%= event.uuid %>\n\nSie erhalten diese E-Mail, weil Sie der Schöpfer dieses Ereignisses sind." }, "ContactTripCreator": { "title": "<%= event.name %> - Fahrer kontaktieren",
M backend/src/api/email/locales/en.jsonbackend/src/api/email/locales/en.json

@@ -50,11 +50,11 @@ "content": "## Hurrah, your Caroster \"<%= event.name %>\" is ready !\n\nStart organizing:\n\n🚗 Add trips\n\n💬 Invite your participants to carpool by sharing your Caroster link.\n\nShare link:\n<%= host %>/e/<%= event.uuid %>"

}, "EventEnded": { "title": "<%= event.name %> - Your event is over !", - "content": "## \"<%= event.name %>\" is over !\n\n👏 Count of passengers : <%= event.passengers.length %>\n🚗 Count of trips filled : <%= event.travels.length %>\n\nLink to your Caroster: <%= host %>/e/<%= event.uuid %>\n\nYou receive this e-mail because you are the creator of this event." + "content": "## \"<%= event.name %>\" is over !\n\n👏 Count of passengers : <%= event.passengers.length %>\n🚗 Count of trips filled : <%= event.travels.length %>\n\nLink to your Caroster: <%= host %>/e/<%= event.uuid %>\n\nYou receive this e-mail because you are an admin of this event." }, "EventRecap": { "title": "<%= event.name %> - Something new in your event", - "content": "## There is something new in your event \"<%= event.name %>\"\n\n⏳ Count of passengers looking for a seat : <%= waitingListCount %>\n🚗 Count of trips : <%= travelsCount %>\n🆕 Count of new trips: <%= newTravelsCount %>\n\nLink to your Caroster: <%= host %>/e/<%= event.uuid %>\n\nYou receive this e-mail because you are the creator of this event." + "content": "## There is something new in your event \"<%= event.name %>\"\n\n⏳ Count of passengers looking for a seat : <%= waitingListCount %>\n🚗 Count of trips : <%= travelsCount %>\n🆕 Count of new trips: <%= newTravelsCount %>\n\nLink to your Caroster: <%= host %>/e/<%= event.uuid %>\n\nYou receive this e-mail because you are an admin of this event." }, "ContactTripCreator": { "title": "<%= event.name %> - Contact trip driver",
M backend/src/api/email/locales/fr.jsonbackend/src/api/email/locales/fr.json

@@ -50,11 +50,11 @@ "content": "## Hurrah, votre Caroster \"<%= event.name %>\" est prêt !\n\nCommencez à vous organiser:\n\n🚗 Ajoutez des trajets\n\n💬 Invitez vos participants à covoiturer en partageant le lien de votre Caroster.\n\nLien de partage:\n<%= host %>/e/<%= event.uuid %>"

}, "EventEnded": { "title": "<%= event.name %> - Votre événement est terminé !", - "content": "## \"<%= event.name %>\", c'est terminé !\n\n👏 Nombre de personnes transportées : <%= passengersCount %>\n🚗 Nombre de trajets remplis : <%= travelsCount %>\n\nLien vers votre Caroster: <%= host %>/e/<%= event.uuid %>\n\nVous recevez cet e-mail car vous êtes le créateur de cet événement." + "content": "## \"<%= event.name %>\", c'est terminé !\n\n👏 Nombre de personnes transportées : <%= passengersCount %>\n🚗 Nombre de trajets remplis : <%= travelsCount %>\n\nLien vers votre Caroster: <%= host %>/e/<%= event.uuid %>\n\nVous recevez cet e-mail car vous êtes un admin de cet événement." }, "EventRecap": { "title": "<%= event.name %> - Du nouveau dans votre événement", - "content": "## Il y a du nouveau dans votre événement \"<%= event.name %>\"\n\n⏳ Nombre de passagers en recherche d'une place : <%= waitingListCount %>\n🚗 Nombre de trajets : <%= travelsCount %>\n🆕 Nombre de nouveaux trajets : <%= newTravelsCount %>\n\nLien vers votre Caroster: <%= host %>/e/<%= event.uuid %>\n\nVous recevez cet e-mail car vous êtes le créateur de cet événement." + "content": "## Il y a du nouveau dans votre événement \"<%= event.name %>\"\n\n⏳ Nombre de passagers en recherche d'une place : <%= waitingListCount %>\n🚗 Nombre de trajets : <%= travelsCount %>\n🆕 Nombre de nouveaux trajets : <%= newTravelsCount %>\n\nLien vers votre Caroster: <%= host %>/e/<%= event.uuid %>\n\nVous recevez cet e-mail car vous êtes un admin de cet événement." }, "ContactTripCreator": { "title": "<%= event.name %> - Contacter la conductrice ou le conducteur du trajet",
M backend/src/api/email/locales/it.jsonbackend/src/api/email/locales/it.json

@@ -46,11 +46,11 @@ "content": "## Congratulazioni, il tuo Caroster \"<%= event.name %>\" è pronto!\n\nIncomincia a organizzare:\n\n🚗 Aggiungi passaggi\n\n💬 Invita i tuoi partecipanti a offrire passaggi condividendo il tuo link Caroster.\n\nCondividi link:\n<%= host %>/e/<%= event.uuid %>"

}, "EventEnded": { "title": "<%= event.name %> - Il tuo evento è finito!", - "content": "## \"<%= event.name %>\" è finito!\n\n👏 Numero di passeggeri: <%= event.passengers.length %>\n🚗 Numero di passaggi: <%= event.travels.length %>\n\nLink del tuo Caroster: <%= host %>/e/<%= event.uuid %>\n\nHai ricevuto questa e-mail perché sei il creatore di questo evento." + "content": "## \"<%= event.name %>\" è finito!\n\n👏 Numero di passeggeri: <%= event.passengers.length %>\n🚗 Numero di passaggi: <%= event.travels.length %>\n\nLink del tuo Caroster: <%= host %>/e/<%= event.uuid %>\n\nHai ricevuto questa e-mail perché sei un amministratore di questo evento." }, "EventRecap": { "title": "<%= event.name %> - C'è qualche novità nel tuo evento", - "content": "## C'è una novità nel tuo evento \"<%= event.name %>\"\n\n⏳ Numero di passeggeri in cerca di un posto: <%= waitingListCount %>\n🚗 Numero di passaggi: <%= travelsCount %>\n🆕 Numero di nuovi passaggi: <%= newTravelsCount %>\n\nLink al tuo Caroster: <%= host %>/e/<%= event.uuid %>\n\nHai ricevuto questa e-mail perché sei il creatore di questo evento." + "content": "## C'è una novità nel tuo evento \"<%= event.name %>\"\n\n⏳ Numero di passeggeri in cerca di un posto: <%= waitingListCount %>\n🚗 Numero di passaggi: <%= travelsCount %>\n🆕 Numero di nuovi passaggi: <%= newTravelsCount %>\n\nLink al tuo Caroster: <%= host %>/e/<%= event.uuid %>\n\nHai ricevuto questa e-mail perché sei un amministratore di questo evento." }, "EnabledCarosterPlus": { "title": "<%= event.name %> - Caroster Plus è stato attivato per il tuo evento",
M backend/src/api/email/locales/nl.jsonbackend/src/api/email/locales/nl.json

@@ -38,11 +38,11 @@ "content": "## Hoezee! Uw Caroster, ‘<%= event.name %>’, is klaar voor gebruik!\n\nHet organiseren kan beginnen:\n\n🚗 Voeg voertuigen toe;\n\n💬 Nodig deelnemers uit door uw Caroster-link te delen.\n\nCaroster-link:\n<%= host %>/e/<%= event.uuid %>"

}, "EventEnded": { "title": "<%= event.name %> - De afspraak is voorbij!", - "content": "## ‘<%= event.name %>’ is voorbij!\n\n👏 Aantal passagiers: <%= event.passengers.length %>\n🚗 Aantal gebruikte voertuigen: <%= event.travels.length %>\n\nLink naar uw Caroster: <%= host %>/e/<%= event.uuid %>\n\nU ontvangt deze e-mail omdat u de afspraak hebt aangemaakt." + "content": "## ‘<%= event.name %>’ is voorbij!\n\n👏 Aantal passagiers: <%= event.passengers.length %>\n🚗 Aantal gebruikte voertuigen: <%= event.travels.length %>\n\nLink naar uw Caroster: <%= host %>/e/<%= event.uuid %>\n\nU ontvangt deze e-mail omdat u een beheerder van dit evenement bent." }, "EventRecap": { "title": "<%= event.name %> - Wijzigingen aan afspraak", - "content": "## Er hebben wijzigingen plaatsgevonden aan ‘<%= event.name %>’\n\n⏳ Aantal passagiers op wachtlijst: <%= waitingListCount %>\n🚗 Aantal voertuigen: <%= travelsCount %>\n🆕 Aantal nieuwe voertuigen: <%= newTravelsCount %>\n\nLink naar uw Caroster: <%= host %>/e/<%= event.uuid %>\n\nU ontvangt deze e-mail omdat u de afspraak hebt aangemaakt." + "content": "## Er hebben wijzigingen plaatsgevonden aan ‘<%= event.name %>’\n\n⏳ Aantal passagiers op wachtlijst: <%= waitingListCount %>\n🚗 Aantal voertuigen: <%= travelsCount %>\n🆕 Aantal nieuwe voertuigen: <%= newTravelsCount %>\n\nLink naar uw Caroster: <%= host %>/e/<%= event.uuid %>\n\nU ontvangt deze e-mail omdat u een beheerder van dit evenement bent." }, "ContactTripCreator": { "title": "<%= event.name %> - Contact opnemen met bestuurder",
M backend/src/api/event/services/event.tsbackend/src/api/event/services/event.ts

@@ -55,9 +55,7 @@ const referenceDate = DateTime.now().minus({ day: 1 });

const hasBeenModified = referenceDate <= DateTime.fromISO(event.updatedAt); if (hasBeenModified) { - strapi.log.debug( - `Send daily recap to ${event.email} for event #${event.id}` - ); + strapi.log.debug(`Send daily recap to admins of event #${event.id}`); const newTravels = event.travels?.filter( (travel) => referenceDate <= DateTime.fromISO(travel.createdAt) );

@@ -65,14 +63,19 @@ const waitingPassengers = await strapi

.service("api::event.event") .getWaitingPassengers(event); - await strapi - .service("api::email.email") - .sendEmailNotif(event.email, "EventRecap", event.lang, { - event, - waitingListCount: waitingPassengers?.length || 0, - travelsCount: event.travels?.length || 0, - newTravelsCount: newTravels?.length || 0, - }); + const administratorEmails = event.administrators?.split(/, ?/) || []; + administratorEmails.push(event.email); + + for (const email of administratorEmails) { + 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, + }); + } } },

@@ -81,13 +84,19 @@ const travelsCount = event.travels?.length || 0;

const passengersCount = event.passengers?.filter( (passenger) => passenger.travel ).length; - await strapi - .service("api::email.email") - .sendEmailNotif(event.email, "EventEnded", event.lang, { - event, - travelsCount, - passengersCount, - }); + + const administratorEmails = event.administrators?.split(/, ?/) || []; + administratorEmails.push(event.email); + + for (const email of administratorEmails) { + await strapi + .service("api::email.email") + .sendEmailNotif(email, "EventEnded", event.lang, { + event, + travelsCount, + passengersCount, + }); + } }, }) );