@tiledesk/tiledesk-server 2.2.38 → 2.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/LICENSE +14 -657
- package/README.md +36 -21
- package/app.js +29 -5
- package/channels/chat21/chat21WebHook.js +12 -1
- package/config/labels/widget.json +320 -0
- package/event/botEvent.js +1 -1
- package/event/subscriptionEvent.js +11 -0
- package/fonts/Roboto-Italic.ttf +0 -0
- package/fonts/Roboto-Medium.ttf +0 -0
- package/fonts/Roboto-MediumItalic.ttf +0 -0
- package/fonts/Roboto-Regular.ttf +0 -0
- package/middleware/passport.js +4 -1
- package/models/lead.js +2 -0
- package/models/request.js +38 -11
- package/models/subscriptionLog.js +34 -0
- package/models/tagLibrary.js +42 -0
- package/package.json +4 -10
- package/pubmodules/activities/activityArchiver.js +295 -0
- package/pubmodules/activities/index.js +3 -0
- package/pubmodules/activities/models/activity.js +88 -0
- package/pubmodules/activities/routes/activity.js +710 -0
- package/pubmodules/activities/test/activityRoute.js +85 -0
- package/pubmodules/analytics/analytics.js +1719 -0
- package/pubmodules/analytics/index.js +3 -0
- package/pubmodules/canned/cannedResponse.js +51 -0
- package/pubmodules/canned/cannedResponseRoute.js +157 -0
- package/pubmodules/canned/index.js +3 -0
- package/pubmodules/messageActions/messageActionsInterceptor.js +4 -2
- package/pubmodules/pubModulesManager.js +115 -7
- package/pubmodules/rasa/index.js +8 -1
- package/pubmodules/rasa/listener.js +28 -7
- package/pubmodules/scheduler/tasks/closeAgentUnresponsiveRequestTask.js +3 -1
- package/pubmodules/scheduler/tasks/closeBotUnresponsiveRequestTask.js +5 -3
- package/pubmodules/trigger/default.js +271 -0
- package/pubmodules/trigger/event/actionEventEmitter.js +10 -0
- package/pubmodules/trigger/event/flowEventEmitter.js +10 -0
- package/pubmodules/trigger/event/triggerEventEmitter.js +10 -0
- package/pubmodules/trigger/index.js +3 -0
- package/pubmodules/trigger/models/trigger.js +149 -0
- package/pubmodules/trigger/rulesTrigger.js +1181 -0
- package/pubmodules/trigger/start.js +114 -0
- package/pubmodules/trigger/triggerRoute.js +150 -0
- package/routes/department.js +51 -0
- package/routes/group.js +140 -0
- package/routes/lead.js +24 -1
- package/routes/message.js +6 -3
- package/routes/project.js +52 -0
- package/routes/public-request.js +265 -2
- package/routes/request.js +86 -13
- package/routes/subscription.js +140 -0
- package/routes/tag.js +138 -0
- package/routes/user-request.js +3 -2
- package/routes/widget.js +16 -1
- package/routes/widgetLoader.js +31 -0
- package/services/faqBotHandler.js +2 -2
- package/services/faqBotSupport.js +0 -1
- package/services/faqService.js +1 -1
- package/services/modulesManager.js +16 -182
- package/services/requestService.js +364 -6
- package/services/subscriptionNotifier.js +485 -0
- package/template/email/assignedEmailMessage.html +1 -1
- package/template/email/assignedRequest.html +1 -1
- package/template/email/newMessage.html +1 -1
- package/template/email/passwordChanged.html +1 -1
- package/template/email/pooledEmailMessage.html +1 -1
- package/template/email/pooledRequest.html +1 -1
- package/template/email/resetPassword.html +2 -2
- package/template/email/ticket.html +1 -1
- package/test/messageRoute.js +69 -0
- package/test/requestService.js +3 -1
- package/views/messages.jade +1 -1
package/routes/public-request.js
CHANGED
|
@@ -3,10 +3,22 @@ var router = express.Router();
|
|
|
3
3
|
var Message = require("../models/message");
|
|
4
4
|
var Request = require("../models/request");
|
|
5
5
|
var User = require("../models/user");
|
|
6
|
-
var Project = require("../models/project");
|
|
7
|
-
var emailService = require("../services/emailService");
|
|
8
6
|
var winston = require('../config/winston');
|
|
9
7
|
|
|
8
|
+
var fonts = {
|
|
9
|
+
Roboto: {
|
|
10
|
+
normal: 'fonts/Roboto-Regular.ttf',
|
|
11
|
+
bold: 'fonts/Roboto-Medium.ttf',
|
|
12
|
+
italics: 'fonts/Roboto-Italic.ttf',
|
|
13
|
+
bolditalics: 'fonts/Roboto-MediumItalic.ttf'
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
var PdfPrinter = require('pdfmake');
|
|
18
|
+
var printer = new PdfPrinter(fonts);
|
|
19
|
+
// var fs = require('fs');
|
|
20
|
+
|
|
21
|
+
|
|
10
22
|
|
|
11
23
|
|
|
12
24
|
|
|
@@ -49,6 +61,126 @@ var winston = require('../config/winston');
|
|
|
49
61
|
});
|
|
50
62
|
|
|
51
63
|
|
|
64
|
+
router.get('/:requestid/messages.csv', function(req, res) {
|
|
65
|
+
|
|
66
|
+
winston.debug(req.params);
|
|
67
|
+
winston.debug("here");
|
|
68
|
+
return Message.find({"recipient": req.params.requestid}).sort({createdAt: 'asc'}).lean().exec(function(err, messages) {
|
|
69
|
+
if (err) {
|
|
70
|
+
return res.status(500).send({success: false, msg: 'Error getting object.'});
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if(!messages){
|
|
74
|
+
return res.status(404).send({success: false, msg: 'Object not found.'});
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
messages.forEach(function(element) {
|
|
78
|
+
|
|
79
|
+
var channel_name = "";
|
|
80
|
+
if (element.channel && element.channel.name) {
|
|
81
|
+
channel_name = element.channel.name;
|
|
82
|
+
}
|
|
83
|
+
delete element.channel;
|
|
84
|
+
element.channel_name = channel_name;
|
|
85
|
+
|
|
86
|
+
delete element.attributes;
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
return res.csv(messages, true);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
router.get('/:requestid/messages.txt', function(req, res) {
|
|
96
|
+
|
|
97
|
+
winston.debug(req.params);
|
|
98
|
+
winston.debug("here");
|
|
99
|
+
return Message.find({"recipient": req.params.requestid}).sort({createdAt: 'asc'}).exec(function(err, messages) {
|
|
100
|
+
if (err) {
|
|
101
|
+
return res.status(500).send({success: false, msg: 'Error getting object.'});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
if(!messages){
|
|
105
|
+
return res.status(404).send({success: false, msg: 'Object not found.'});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
var text = "Chat transcript:\n" //+ req.project.name;
|
|
110
|
+
|
|
111
|
+
messages.forEach(function(element) {
|
|
112
|
+
text = text + "[ " + element.createdAt.toLocaleString('en', { timeZone: 'UTC' })+ "] " + element.senderFullname + ": " + element.text + "\n";
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
res.set({"Content-Disposition":"attachment; filename=\"transcript.txt\""});
|
|
117
|
+
res.send(text);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
router.get('/:requestid/messages.pdf', function(req, res) {
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
winston.debug(req.params);
|
|
128
|
+
winston.debug("here");
|
|
129
|
+
return Message.find({"recipient": req.params.requestid}).sort({createdAt: 'asc'}).exec(function(err, messages) {
|
|
130
|
+
if (err) {
|
|
131
|
+
return res.status(500).send({success: false, msg: 'Error getting object.'});
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
if(!messages){
|
|
136
|
+
return res.status(404).send({success: false, msg: 'Object not found.'});
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
var docDefinition = {
|
|
141
|
+
content: [
|
|
142
|
+
{ text: 'Chat Transcript', style: 'header' },
|
|
143
|
+
{
|
|
144
|
+
ul: [
|
|
145
|
+
// 'item 1',
|
|
146
|
+
// 'item 2',
|
|
147
|
+
// 'item 3'
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
],
|
|
152
|
+
styles: {
|
|
153
|
+
header: {
|
|
154
|
+
bold: true,
|
|
155
|
+
fontSize: 15
|
|
156
|
+
}
|
|
157
|
+
},
|
|
158
|
+
defaultStyle: {
|
|
159
|
+
fontSize: 12
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
messages.forEach(function(element) {
|
|
166
|
+
docDefinition.content[1].ul.push("[ " + element.createdAt.toLocaleString('en', { timeZone: 'UTC' })+ "] " + element.senderFullname + ": " + element.text );
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
console.log(docDefinition);
|
|
170
|
+
|
|
171
|
+
var pdfDoc = printer.createPdfKitDocument(docDefinition);
|
|
172
|
+
// pdfDoc.pipe(fs.createWriteStream('lists.pdf'));
|
|
173
|
+
pdfDoc.pipe(res);
|
|
174
|
+
pdfDoc.end();
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
52
184
|
router.get('/:requestid/messages-user.html', function(req, res) {
|
|
53
185
|
|
|
54
186
|
winston.debug(req.params);
|
|
@@ -60,6 +192,7 @@ var winston = require('../config/winston');
|
|
|
60
192
|
|
|
61
193
|
var messages = messages.filter(m => m.sender != "system" );
|
|
62
194
|
|
|
195
|
+
|
|
63
196
|
//skip info message
|
|
64
197
|
if(!messages){
|
|
65
198
|
return res.status(404).send({success: false, msg: 'Object not found.'});
|
|
@@ -70,4 +203,134 @@ var winston = require('../config/winston');
|
|
|
70
203
|
|
|
71
204
|
});
|
|
72
205
|
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
router.get('/:requestid/messages-user.txt', function(req, res) {
|
|
209
|
+
|
|
210
|
+
winston.debug(req.params);
|
|
211
|
+
winston.debug("here");
|
|
212
|
+
return Message.find({"recipient": req.params.requestid}).sort({createdAt: 'asc'}).exec(function(err, messages) {
|
|
213
|
+
if (err) {
|
|
214
|
+
return res.status(500).send({success: false, msg: 'Error getting object.'});
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if(!messages){
|
|
218
|
+
return res.status(404).send({success: false, msg: 'Object not found.'});
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
var messages = messages.filter(m => m.sender != "system" );
|
|
223
|
+
|
|
224
|
+
var text = "Chat transcript:\n" //+ req.project.name;
|
|
225
|
+
|
|
226
|
+
messages.forEach(function(element) {
|
|
227
|
+
text = text + "[ " + element.createdAt.toLocaleString('en', { timeZone: 'UTC' })+ "] " + element.senderFullname + ": " + element.text + "\n";
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
res.set({"Content-Disposition":"attachment; filename=\"transcript.txt\""});
|
|
232
|
+
res.send(text);
|
|
233
|
+
});
|
|
234
|
+
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
|
|
238
|
+
router.get('/:requestid/messages-user.pdf', function(req, res) {
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
winston.debug(req.params);
|
|
242
|
+
winston.debug("here");
|
|
243
|
+
return Message.find({"recipient": req.params.requestid}).sort({createdAt: 'asc'}).exec(function(err, messages) {
|
|
244
|
+
if (err) {
|
|
245
|
+
return res.status(500).send({success: false, msg: 'Error getting object.'});
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
var messages = messages.filter(m => m.sender != "system" );
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
//skip info message
|
|
252
|
+
if(!messages){
|
|
253
|
+
return res.status(404).send({success: false, msg: 'Object not found.'});
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
var docDefinition = {
|
|
258
|
+
content: [
|
|
259
|
+
{ text: 'Chat Transcript', style: 'header' },
|
|
260
|
+
{
|
|
261
|
+
ul: [
|
|
262
|
+
// 'item 1',
|
|
263
|
+
// 'item 2',
|
|
264
|
+
// 'item 3'
|
|
265
|
+
]
|
|
266
|
+
},
|
|
267
|
+
|
|
268
|
+
],
|
|
269
|
+
styles: {
|
|
270
|
+
header: {
|
|
271
|
+
bold: true,
|
|
272
|
+
fontSize: 15
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
defaultStyle: {
|
|
276
|
+
fontSize: 12
|
|
277
|
+
}
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
messages.forEach(function(element) {
|
|
283
|
+
docDefinition.content[1].ul.push("[ " + element.createdAt.toLocaleString('en', { timeZone: 'UTC' })+ "] " + element.senderFullname + ": " + element.text );
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
console.log(docDefinition);
|
|
287
|
+
|
|
288
|
+
var pdfDoc = printer.createPdfKitDocument(docDefinition);
|
|
289
|
+
// pdfDoc.pipe(fs.createWriteStream('lists.pdf'));
|
|
290
|
+
pdfDoc.pipe(res);
|
|
291
|
+
pdfDoc.end();
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
});
|
|
296
|
+
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
|
|
300
|
+
router.get('/:requestid/messages-user.csv', function(req, res) {
|
|
301
|
+
|
|
302
|
+
winston.debug(req.params);
|
|
303
|
+
winston.debug("here");
|
|
304
|
+
return Message.find({"recipient": req.params.requestid}).sort({createdAt: 'asc'}).lean().exec(function(err, messages) {
|
|
305
|
+
if (err) {
|
|
306
|
+
return res.status(500).send({success: false, msg: 'Error getting object.'});
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
var messages = messages.filter(m => m.sender != "system" );
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
//skip info message
|
|
313
|
+
if(!messages){
|
|
314
|
+
return res.status(404).send({success: false, msg: 'Object not found.'});
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
messages.forEach(function(element) {
|
|
319
|
+
|
|
320
|
+
var channel_name = "";
|
|
321
|
+
if (element.channel && element.channel.name) {
|
|
322
|
+
channel_name = element.channel.name;
|
|
323
|
+
}
|
|
324
|
+
delete element.channel;
|
|
325
|
+
element.channel_name = channel_name;
|
|
326
|
+
|
|
327
|
+
delete element.attributes;
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
return res.csv(messages, true);
|
|
332
|
+
});
|
|
333
|
+
|
|
334
|
+
});
|
|
335
|
+
|
|
73
336
|
module.exports = router;
|
package/routes/request.js
CHANGED
|
@@ -196,8 +196,9 @@ router.patch('/:requestid', function (req, res) {
|
|
|
196
196
|
router.put('/:requestid/close', function (req, res) {
|
|
197
197
|
winston.debug(req.body);
|
|
198
198
|
|
|
199
|
-
// closeRequestByRequestId(request_id, id_project)
|
|
200
|
-
|
|
199
|
+
// closeRequestByRequestId(request_id, id_project, skipStatsUpdate, notify, closed_by)
|
|
200
|
+
const closed_by = req.user.id;
|
|
201
|
+
return requestService.closeRequestByRequestId(req.params.requestid, req.projectid, false, true, closed_by).then(function(closedRequest) {
|
|
201
202
|
|
|
202
203
|
winston.verbose("request closed", closedRequest);
|
|
203
204
|
|
|
@@ -518,6 +519,72 @@ router.delete('/:requestid/notes/:noteid', function (req, res) {
|
|
|
518
519
|
|
|
519
520
|
});
|
|
520
521
|
|
|
522
|
+
|
|
523
|
+
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
router.post('/:requestid/followers',
|
|
528
|
+
[
|
|
529
|
+
check('member').notEmpty(),
|
|
530
|
+
],
|
|
531
|
+
function (req, res) {
|
|
532
|
+
winston.info("followers add", req.body);
|
|
533
|
+
|
|
534
|
+
const errors = validationResult(req);
|
|
535
|
+
if (!errors.isEmpty()) {
|
|
536
|
+
return res.status(422).json({ errors: errors.array() });
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
//addParticipantByRequestId(request_id, id_project, member)
|
|
540
|
+
return requestService.addFollowerByRequestId(req.params.requestid, req.projectid, req.body.member ).then(function(updatedRequest) {
|
|
541
|
+
|
|
542
|
+
winston.verbose("participant added", updatedRequest);
|
|
543
|
+
|
|
544
|
+
return res.json(updatedRequest);
|
|
545
|
+
});
|
|
546
|
+
|
|
547
|
+
});
|
|
548
|
+
|
|
549
|
+
|
|
550
|
+
router.put('/:requestid/followers', function (req, res) {
|
|
551
|
+
winston.debug("req.body", req.body);
|
|
552
|
+
|
|
553
|
+
var followers = [];
|
|
554
|
+
req.body.forEach(function(follower,index) {
|
|
555
|
+
followers.push(follower);
|
|
556
|
+
});
|
|
557
|
+
winston.debug("var followers", followers);
|
|
558
|
+
|
|
559
|
+
// setFollowersByRequestId(request_id, id_project, newfollowers)
|
|
560
|
+
return requestService.setFollowersByRequestId(req.params.requestid, req.projectid, followers ).then(function(updatedRequest) {
|
|
561
|
+
|
|
562
|
+
winston.debug("followers set", updatedRequest);
|
|
563
|
+
|
|
564
|
+
return res.json(updatedRequest);
|
|
565
|
+
});
|
|
566
|
+
|
|
567
|
+
});
|
|
568
|
+
|
|
569
|
+
router.delete('/:requestid/followers/:followerid', function (req, res) {
|
|
570
|
+
winston.debug(req.body);
|
|
571
|
+
|
|
572
|
+
//removeFollowerByRequestId(request_id, id_project, member)
|
|
573
|
+
return requestService.removeFollowerByRequestId(req.params.requestid, req.projectid, req.params.followerid ).then(function(updatedRequest) {
|
|
574
|
+
|
|
575
|
+
winston.verbose("follower removed", updatedRequest);
|
|
576
|
+
|
|
577
|
+
return res.json(updatedRequest);
|
|
578
|
+
});
|
|
579
|
+
|
|
580
|
+
|
|
581
|
+
});
|
|
582
|
+
|
|
583
|
+
|
|
584
|
+
|
|
585
|
+
|
|
586
|
+
|
|
587
|
+
|
|
521
588
|
// TODO make a synchronous chat21 version (with query parameter?) with request.support_group.created
|
|
522
589
|
router.delete('/:requestid', function (req, res) {
|
|
523
590
|
|
|
@@ -709,6 +776,7 @@ router.get('/', function (req, res, next) {
|
|
|
709
776
|
* THE SEARCH FOR DATE INTERVAL OF THE HISTORY OF REQUESTS ARE DISABLED AND
|
|
710
777
|
* ARE DISPLAYED ONLY THE REQUESTS OF THE LAST 14 DAYS
|
|
711
778
|
*/
|
|
779
|
+
//secondo me qui manca un parentesi tonda per gli or
|
|
712
780
|
if ( history_search === true && req.project && req.project.profile && (req.project.profile.type === 'free' && req.project.trialExpired === true) || (req.project.profile.type === 'payment' && req.project.isActiveSubscription === false)) {
|
|
713
781
|
|
|
714
782
|
|
|
@@ -813,7 +881,14 @@ router.get('/', function (req, res, next) {
|
|
|
813
881
|
}
|
|
814
882
|
|
|
815
883
|
if (req.query.channel) {
|
|
816
|
-
|
|
884
|
+
if (req.query.channel === "offline") {
|
|
885
|
+
query["channel.name"] = {"$in" : ["email", "form"]}
|
|
886
|
+
} else if (req.query.channel === "online") {
|
|
887
|
+
query["channel.name"] = {"$nin" : ["email", "form"]}
|
|
888
|
+
} else {
|
|
889
|
+
query["channel.name"] = req.query.channel
|
|
890
|
+
}
|
|
891
|
+
|
|
817
892
|
winston.debug('REQUEST ROUTE - QUERY channel', query.channel);
|
|
818
893
|
}
|
|
819
894
|
|
|
@@ -840,7 +915,7 @@ router.get('/', function (req, res, next) {
|
|
|
840
915
|
var projection = undefined;
|
|
841
916
|
|
|
842
917
|
if (req.query.full_text) {
|
|
843
|
-
winston.
|
|
918
|
+
winston.debug('fulltext projection');
|
|
844
919
|
|
|
845
920
|
projection = {score: { $meta: "textScore" } };
|
|
846
921
|
}
|
|
@@ -873,7 +948,7 @@ router.get('/', function (req, res, next) {
|
|
|
873
948
|
// }
|
|
874
949
|
|
|
875
950
|
if (req.query.full_text) {
|
|
876
|
-
winston.
|
|
951
|
+
winston.debug('fulltext sort');
|
|
877
952
|
q1.sort( { score: { $meta: "textScore" } } ) //https://docs.mongodb.com/manual/reference/operator/query/text/#sort-by-text-search-score
|
|
878
953
|
} else {
|
|
879
954
|
q1.sort(sortQuery);
|
|
@@ -901,6 +976,7 @@ router.get('/', function (req, res, next) {
|
|
|
901
976
|
count: results[1],
|
|
902
977
|
requests: results[0]
|
|
903
978
|
};
|
|
979
|
+
winston.debug('REQUEST ROUTE - objectToReturn ');
|
|
904
980
|
winston.debug('REQUEST ROUTE - objectToReturn ', objectToReturn);
|
|
905
981
|
return res.json(objectToReturn);
|
|
906
982
|
|
|
@@ -1025,6 +1101,11 @@ router.get('/csv', function (req, res, next) {
|
|
|
1025
1101
|
winston.debug("sort query", sortQuery);
|
|
1026
1102
|
|
|
1027
1103
|
|
|
1104
|
+
// TODO ORDER BY SCORE
|
|
1105
|
+
// return Faq.find(query, {score: { $meta: "textScore" } })
|
|
1106
|
+
// .sort( { score: { $meta: "textScore" } } ) //https://docs.mongodb.com/manual/reference/operator/query/text/#sort-by-text-search-score
|
|
1107
|
+
|
|
1108
|
+
// aggiungi filtro per data marco
|
|
1028
1109
|
|
|
1029
1110
|
winston.debug('REQUEST ROUTE - REQUEST FIND ', query)
|
|
1030
1111
|
return Request.find(query, '-transcript -status -__v').
|
|
@@ -1125,14 +1206,6 @@ router.get('/csv', function (req, res, next) {
|
|
|
1125
1206
|
|
|
1126
1207
|
winston.debug('REQUEST ROUTE - REQUEST AS CSV', requests);
|
|
1127
1208
|
|
|
1128
|
-
// return Request.count(query, function(err, totalRowCount) {
|
|
1129
|
-
|
|
1130
|
-
// var objectToReturn = {
|
|
1131
|
-
// perPage: limit,
|
|
1132
|
-
// count: totalRowCount,
|
|
1133
|
-
// requests : requests
|
|
1134
|
-
// };
|
|
1135
|
-
// console.log('REQUEST ROUTE - objectToReturn ', objectToReturn);
|
|
1136
1209
|
return res.csv(requests, true);
|
|
1137
1210
|
});
|
|
1138
1211
|
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
var express = require('express');
|
|
2
|
+
var router = express.Router();
|
|
3
|
+
var Subscription = require("../models/subscription");
|
|
4
|
+
var SubscriptionLog = require("../models/subscriptionLog");
|
|
5
|
+
var subscriptionEvent = require("../event/subscriptionEvent");
|
|
6
|
+
var winston = require('../config/winston');
|
|
7
|
+
|
|
8
|
+
//space
|
|
9
|
+
|
|
10
|
+
router.post('/', function (req, res) {
|
|
11
|
+
|
|
12
|
+
winston.debug(req.body);
|
|
13
|
+
winston.debug("req.user", req.user);
|
|
14
|
+
|
|
15
|
+
var subscription = new Subscription({
|
|
16
|
+
target: req.body.target,
|
|
17
|
+
event: req.body.event,
|
|
18
|
+
id_project: req.projectid,
|
|
19
|
+
createdBy: req.user.id
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
subscription.save(function (err, subscriptionSaved) {
|
|
23
|
+
if (err) {
|
|
24
|
+
if (err.code === 11000) { //error for dupes
|
|
25
|
+
return Subscription.findOne({id_project:req.projectid, event: req.body.event}).select("+secret")
|
|
26
|
+
.exec(function (err, subscriptionSaved) {
|
|
27
|
+
res.setHeader('x-hook-secret', subscriptionSaved.secret);
|
|
28
|
+
res.json(subscriptionSaved);
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
winston.error('--- > ERROR ', err)
|
|
32
|
+
return res.status(500).send({ success: false, msg: 'Error saving object.' });
|
|
33
|
+
}
|
|
34
|
+
// http://resthooks.org/docs/security/
|
|
35
|
+
|
|
36
|
+
res.setHeader('x-hook-secret', subscriptionSaved.secret);
|
|
37
|
+
|
|
38
|
+
subscriptionEvent.emit('subscription.create', subscriptionSaved );
|
|
39
|
+
res.json(subscriptionSaved);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
router.post('/test', function (req, res) {
|
|
45
|
+
|
|
46
|
+
winston.debug("test subscription body", req.body);
|
|
47
|
+
|
|
48
|
+
res.json(req);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
router.put('/:subscriptionid', function (req, res) {
|
|
52
|
+
|
|
53
|
+
winston.debug(req.body);
|
|
54
|
+
|
|
55
|
+
Subscription.findByIdAndUpdate(req.params.subscriptionid, req.body, { new: true, upsert: true }, function (err, subscriptionUpd) {
|
|
56
|
+
if (err) {
|
|
57
|
+
return res.status(500).send({ success: false, msg: 'Error updating object.' });
|
|
58
|
+
}
|
|
59
|
+
subscriptionEvent.emit('subscription.update', subscriptionUpd );
|
|
60
|
+
res.json(subscriptionUpd);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
router.delete('/:subscriptionid', function (req, res) {
|
|
66
|
+
|
|
67
|
+
winston.debug(req.body);
|
|
68
|
+
|
|
69
|
+
Subscription.remove({ _id: req.params.subscriptionid }, function (err, subscriptionUpd) {
|
|
70
|
+
if (err) {
|
|
71
|
+
return res.status(500).send({ success: false, msg: 'Error deleting object.' });
|
|
72
|
+
}
|
|
73
|
+
subscriptionEvent.emit('subscription.delete', subscriptionUpd );
|
|
74
|
+
res.json(subscriptionUpd);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
router.get('/', function (req, res) {
|
|
82
|
+
|
|
83
|
+
return Subscription.find({ "id_project": req.projectid }).
|
|
84
|
+
exec(function (err, subscriptions, next) {
|
|
85
|
+
if (err) {
|
|
86
|
+
winston.error('Subscription ROUTE - REQUEST FIND ERR ', err)
|
|
87
|
+
return next(err);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return res.json(subscriptions);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
router.get('/history', function (req, res) {
|
|
96
|
+
|
|
97
|
+
var limit = 40; // Number of leads per page
|
|
98
|
+
var page = 0;
|
|
99
|
+
|
|
100
|
+
if (req.query.page) {
|
|
101
|
+
page = req.query.page;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
var skip = page * limit;
|
|
105
|
+
winston.debug('Subscription ROUTE - SKIP PAGE ', skip);
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
return SubscriptionLog.find({ "id_project": req.projectid }).
|
|
109
|
+
skip(skip).limit(limit)
|
|
110
|
+
.sort({createdAt: 'desc'}).
|
|
111
|
+
exec(function (err, subscriptions, next) {
|
|
112
|
+
if (err) {
|
|
113
|
+
winston.error('Subscription ROUTE - REQUEST FIND ERR ', err)
|
|
114
|
+
return next(err);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return res.json(subscriptions);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
router.get('/:subscriptionid', function (req, res) {
|
|
124
|
+
|
|
125
|
+
winston.debug(req.body);
|
|
126
|
+
|
|
127
|
+
Subscription.findById(req.params.subscriptionid, function (err, subscriptionUpd) {
|
|
128
|
+
if (err) {
|
|
129
|
+
return res.status(500).send({ success: false, msg: 'Error getting object.' });
|
|
130
|
+
}
|
|
131
|
+
if (!subscriptionUpd) {
|
|
132
|
+
return res.status(404).send({ success: false, msg: 'Object not found.' });
|
|
133
|
+
}
|
|
134
|
+
res.json(subscriptionUpd);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
module.exports = router;
|