-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreateEvent.js
More file actions
112 lines (98 loc) · 2.62 KB
/
createEvent.js
File metadata and controls
112 lines (98 loc) · 2.62 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
'use strict';
const _ = require('lodash');
const VError = require('@openagenda/verror');
const upStats = require('./lib/upStats');
const createOaEvent = require('./lib/createOaEvent');
const UPDATE_METHOD = require('./updateMethod');
module.exports = async function createEvent(context, {
agendaUid,
formSchema,
list,
index,
}) {
const {
methods,
oa,
syncDb,
noBailOnInvalidImage,
defaultImageUrl,
simulate,
log,
stats,
catchError,
} = context;
const { startSyncDate } = stats;
const agendaStats = stats.agendas[agendaUid];
const itemToCreate = list[index];
const chunkedTimings = _.chunk(itemToCreate.data.timings, 800);
if (chunkedTimings.length > 1) {
upStats(agendaStats, 'splitSourceEvents');
upStats(agendaStats, 'splittedSourceEvents', chunkedTimings.length);
}
for (let i = 0; i < chunkedTimings.length; i++) {
const timings = chunkedTimings[i];
let event = { ...itemToCreate.data, timings };
try {
const postMapContext = methods.event.postMap.createContext({ ...context, agendaUid });
({ result: event } = await methods.event.postMap(
event,
formSchema,
{
isUpdate: false,
isCreate: true,
}, postMapContext,
));
const method = event[UPDATE_METHOD] || 'update';
if (!event) {
upStats(agendaStats, 'ignoredEvents');
continue;
}
if (method === 'patch') {
event = {
...itemToCreate.data,
timings,
...event
};
}
log(
'info',
`CREATE EVENT ${index + 1}/${list.length}`,
{
agendaUid,
eventId: itemToCreate.eventId,
locationId: itemToCreate.locationId
}
);
if (!simulate) {
const createdEvent = await createOaEvent(
event,
{
oa,
agendaUid,
noBailOnInvalidImage,
defaultImageUrl,
stats
}
);
await syncDb.events.insert({
agendaUid,
correspondenceId: itemToCreate.correspondenceId,
syncedAt: new Date(),
data: createdEvent
});
}
upStats(agendaStats, 'createdEvents');
} catch (e) {
const error = new VError({
cause: e,
info: {
correspondenceId: itemToCreate.correspondenceId,
event,
itemToCreate
}
}, 'Error on event create');
upStats(agendaStats, 'eventCreateErrors', error);
catchError(error, `${startSyncDate.toISOString()}:${itemToCreate.correspondenceId}:${i}.json`);
}
}
};