/
alert.js
56 lines (51 loc) · 1.42 KB
/
alert.js
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
const Controller = require('../controller/controller');
const Alert = require('../model/alert');
const Email = require('../service/email');
const Log = require('../lib/log');
const Exception = require('../model/exception');
class AlertController extends Controller {
create (req, res, next) {
return super
.create(req, res, next)
.then(savedAlert => Email.newAlert(req.session.person, savedAlert).then(() => savedAlert));
}
/**
* Return person's alerts. Must be logged in.
* @param {IncomingRequest} req
*/
browse (req) {
if (!req.session.person) {
throw new Exception.NotAllowed('Must be logged in');
}
return this.model
.query('where', 'person_id', '=', req.session.person.id)
.fetchAll()
.then((collection) => {
Log.debug(this.tableName, 'browse success user', req.session.person.id);
return collection;
});
}
/**
* Unsubscribe from alert by token, when clicking an unsubscribe
* link in an email
* @param {IncomingRequest} req
*/
unsubscribe (req) {
return Alert.ByToken(req.params.token)
.fetch()
.then((fetchedModel) => {
if (!fetchedModel) {
// return successfully even if alert was not found since
// it is probably already unsubscribed
return null;
}
Log.debug(
this.tableName,
'unsubscribe success id:',
fetchedModel.get('id')
);
return fetchedModel.destroy();
});
}
}
module.exports = new AlertController(Alert);