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