all repos — caroster @ f32c91bc409d3d049b4e8f1c465b5fa6e738ee46

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

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