all repos — caroster @ df999a6521271a78a049100d10cad75c35ace56c

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

backend/api/event/services/event.js (view raw)

 1'use strict';
 2const moment = require('moment');
 3const _pick = require('lodash/pick');
 4
 5const TEMPLATE_NAME_RECAP = 'event_recap';
 6const PUBLIC_FIELDS = [
 7  'id',
 8  'uuid',
 9  'name',
10  'email',
11  'id',
12  'date',
13  'address',
14  'position',
15  'waitingList',
16  'cars',
17  'created_at',
18  'updated_at',
19];
20
21const {STRAPI_URL = ''} = process.env;
22
23module.exports = {
24  sanitize: event => {
25    const cars = event?.cars?.map(strapi.services.car.sanitize);
26    const waitingList = event?.waitingList?.map(list =>
27      _pick(list, ['id', 'name'])
28    );
29    const sanitizedEvent = _pick(event, PUBLIC_FIELDS);
30    return {...sanitizedEvent, cars, waitingList};
31  },
32
33  sendDailyRecap: async event => {
34    const referenceDate = moment().subtract(1, 'day');
35    const hasBeenModified = referenceDate.isSameOrBefore(event.updated_at);
36    if (hasBeenModified) {
37      strapi.log.debug(
38        `Send daily recap to ${event.email} for event #${event.id}`
39      );
40      const newCars = event.cars?.filter(car =>
41        referenceDate.isSameOrBefore(car.created_at)
42      );
43      try {
44        const templateId = await strapi.plugins[
45          'email-designer'
46        ].services.template.getId(TEMPLATE_NAME_RECAP);
47        await strapi.plugins[
48          'email-designer'
49        ].services.email.sendTemplatedEmail(
50          {
51            to: event.email,
52          },
53          {
54            templateId,
55            subject: `Caroster: ${event.name}`,
56          },
57          {
58            event,
59            eventLink: `${STRAPI_URL}/e/${event.uuid}`,
60            waitingListCount: event.waitingList?.length || 0,
61            carsCount: event.cars?.length || 0,
62            newCarsCount: newCars?.length || 0,
63          }
64        );
65      } catch (error) {
66        console.error(error);
67        strapi.log.error(
68          `Impossible to send recap notification to ${event.email} for event #${
69            event.id
70          }. Error: ${JSON.stringify(error)}`
71        );
72      }
73    }
74  },
75};