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