backend/api/travel/models/travel.js (view raw)
1'use strict';
2
3const _uniq = require('lodash/uniq');
4
5const {STRAPI_URL = ''} = process.env;
6
7module.exports = {
8 lifecycles: {
9 async beforeUpdate(query, update) {
10 const travel = await strapi.services.travel.findOne(query);
11 if (update.passengers && travel?.vehicle) {
12 if (travel?.vehicle?.seats < update.passengers.length)
13 throw new Error('no_enough_seats');
14 }
15 },
16
17 async afterCreate(result) {
18 sendEmailsToWaitingList(result);
19 },
20 },
21};
22
23const sendEmailsToWaitingList = async travel => {
24 const event = travel.event;
25 const eventWaitingList = event?.waitingList || [];
26 const userEmails = eventWaitingList.map(user => user.email).filter(Boolean);
27 const templateId = await strapi.plugins[
28 'email-designer'
29 ].services.template.getId('waitinglist_notif');
30
31 if (userEmails?.length > 0)
32 try {
33 await strapi.plugins['email-designer'].services.email.sendTemplatedEmail(
34 {
35 to: _uniq(userEmails),
36 },
37 {
38 templateId,
39 },
40 {
41 event,
42 travel,
43 eventLink: `${STRAPI_URL}/e/${event.uuid}`,
44 }
45 );
46 } catch (error) {
47 console.error(error);
48 strapi.log.error(
49 `Impossible to send email waiting list notification for event #${
50 event.id
51 }. Error: ${JSON.stringify(error)}`
52 );
53 }
54};