Built motion from commit 5e31ea4.|0.0.32
[motion.git] / server / api / mail_queue / mail_queue.controller.js
1 'use strict';
2
3 var _ = require('lodash');
4 var util = require('util');
5
6 var MailQueue = require('../../models').MailQueue;
7
8 // Get list of mailQueues
9 exports.index = function(req, res) {
10
11   var attributes = ['description', 'name', 'timeout', 'strategy'];
12   var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
13   var page = req.query.page ? parseInt(req.query.page, 10) : 0;
14
15   var query = {
16     where: {},
17     limit: per_page,
18     offset: page * per_page,
19     include: [{
20       all: true
21     }]
22   };
23
24   _.forIn(req.query, function(value, key) {
25     switch (key) {
26       case 'per_page':
27       case 'page':
28         break;
29       case 'sort_by':
30         query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
31         break;
32       case 'sort_order':
33         break;
34       case '$':
35         query.where.$or = [];
36         attributes.forEach(function(attribute) {
37           var tmp = {};
38           tmp[attribute] = {
39             $like: '%' + value + '%'
40           };
41
42           query.where.$or.push(tmp);
43         });
44         break;
45       default:
46         query.where[key] = {
47           $like: {}
48         };
49         query.where[key].$like = '%' + value + '%';
50     }
51   });
52
53   MailQueue
54     .findAndCountAll(query)
55     .then(function(result) {
56       var total_pages = Math.ceil(result.count / per_page);
57       var next_page = total_pages > (query.offset + 1) ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page + 1) : null;
58       var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
59
60       res.status(200).send({
61         count: result.count,
62         rows: result.rows,
63         next_page: next_page,
64         previous_page: previous_page,
65         total_pages: total_pages
66       });
67
68     })
69     .catch(function(err) {
70       return handleError(res, err);
71     });
72 };
73
74 // Get a single mailQueue
75 exports.show = function(req, res) {
76   MailQueue
77     .findById(req.params.id)
78     .then(function(mailQueue) {
79       if (!mailQueue) {
80         return res.sendStatus(404);
81       }
82       return res.send(mailQueue);
83     })
84     .catch(function(err) {
85       return handleError(res, err);
86     });
87 };
88
89 // Creates a new mailQueue in the DB.
90 exports.create = function(req, res) {
91   MailQueue
92     .create(req.body)
93     .then(function(mailQueue) {
94       return res.status(201).send(mailQueue);
95     })
96     .catch(function(err) {
97       return handleError(res, err);
98     });
99 };
100
101 // Updates an existing mailQueue in the DB.
102 exports.update = function(req, res) {
103   if (req.body.id) {
104     delete req.body.id;
105   }
106
107   MailQueue
108     .findById(req.params.id)
109     .then(function(mailQueue) {
110       if (!mailQueue) {
111         return res.sendStatus(404);
112       }
113       var updated = _.merge(mailQueue, req.body);
114       updated.save()
115         .then(function() {
116           return res.status(200).send(mailQueue);
117         })
118         .catch(function(err) {
119           return handleError(res, err);
120         });
121     })
122     .catch(function(err) {
123       return handleError(res, err);
124     });
125 };
126
127 // Updates an existing user_has_mailQueue in the DB.
128 exports.addAgents = function(req, res, next) {
129   return MailQueue
130     .findById(req.params.id)
131     .then(function(mailQueue) {
132       if (mailQueue) {
133         return mailQueue
134           .addUsers(req.body.agents, {
135             individualHooks: true
136           });
137       } else {
138         throw new Error('MailQueue not found');
139       }
140     })
141     .then(function() {
142       return res.sendStatus(200);
143     })
144     .catch(function(err) {
145       return handleError(res, err);
146     });
147 };
148
149 exports.removeAgents = function(req, res) {
150   return MailQueue
151     .findById(req.params.id)
152     .then(function(mailQueue) {
153       if (mailQueue) {
154         return mailQueue
155           .removeUsers(req.body.agents, {
156             individualHooks: true
157           });
158       } else {
159         throw new Error('MailQueue not found');
160       }
161     })
162     .then(function() {
163       return res.sendStatus(200);
164     })
165     .catch(function(err) {
166       return handleError(res, err);
167     });
168 };
169
170 // Deletes a mailQueue from the DB.
171 exports.destroy = function(req, res) {
172   MailQueue
173     .findById(req.params.id)
174     .then(function(mailQueue) {
175       if (!mailQueue) {
176         return res.sendStatus(404);
177       }
178       mailQueue
179         .destroy()
180         .then(function() {
181           return res.sendStatus(204);
182         })
183         .catch(function(err) {
184           return handleError(res, err);
185         });
186     })
187     .catch(function(err) {
188       return handleError(res, err);
189     });
190 };
191
192 // Deletes a agent from the DB.
193 exports.bulkDestroy = function(req, res) {
194   MailQueue
195     .destroy({
196       where: {
197         id: req.query.id
198       },
199       individualHooks: true
200     })
201     .then(function() {
202       return res.sendStatus(204);
203     })
204     .catch(function(err) {
205       return handleError(res, err);
206     });
207 };
208
209 function handleError(res, err) {
210   return res.status(500).send(err);
211 }