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 'description',
11 'email',
12 'id',
13 'date',
14 'address',
15 'position',
16 'waitingList',
17 'travels',
18 'created_at',
19 'updated_at',
20];
21
22const {STRAPI_URL = ''} = process.env;
23
24module.exports = {
25 sanitize: event => {
26 const waitingList = event?.waitingList?.map(list =>
27 _pick(list, ['id', 'name', 'location', 'user'])
28 );
29 const sanitizedEvent = _pick(event, PUBLIC_FIELDS);
30 return {...sanitizedEvent, 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 newTravels = event.travels?.filter(travel =>
41 referenceDate.isSameOrBefore(travel.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 },
56 {
57 event,
58 eventLink: `${STRAPI_URL}/e/${event.uuid}`,
59 waitingListCount: event.waitingList?.length || 0,
60 travelsCount: event.travels?.length || 0,
61 newTravelsCount: newTravels?.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};