all repos — caroster @ 5b13f85e1cb3d6c7e11813397bd10bd6bc6b2b69

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