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 travels = event?.travels?.map(strapi.services.travel.sanitize);
27 const waitingList = event?.waitingList?.map(list =>
28 _pick(list, ['id', 'name', 'location', 'user'])
29 );
30 const sanitizedEvent = _pick(event, PUBLIC_FIELDS);
31 return {...sanitizedEvent, travels, waitingList};
32 },
33
34 sendDailyRecap: async event => {
35 const referenceDate = moment().subtract(1, 'day');
36 const hasBeenModified = referenceDate.isSameOrBefore(event.updated_at);
37 if (hasBeenModified) {
38 strapi.log.debug(
39 `Send daily recap to ${event.email} for event #${event.id}`
40 );
41 const newTravels = event.travels?.filter(travel =>
42 referenceDate.isSameOrBefore(travel.created_at)
43 );
44 try {
45 const templateId = await strapi.plugins[
46 'email-designer'
47 ].services.template.getId(TEMPLATE_NAME_RECAP);
48 await strapi.plugins[
49 'email-designer'
50 ].services.email.sendTemplatedEmail(
51 {
52 to: event.email,
53 },
54 {
55 templateId,
56 },
57 {
58 event,
59 eventLink: `${STRAPI_URL}/e/${event.uuid}`,
60 waitingListCount: event.waitingList?.length || 0,
61 travelsCount: event.travels?.length || 0,
62 newTravelsCount: newTravels?.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};