3 var _ = require('lodash');
4 var util = require('util');
6 var MailBusinessAutomation = require('../../models').MailBusinessAutomation;
7 var BusinessCondition = require('../../models').BusinessCondition;
8 var BusinessAction = require('../../models').BusinessAction;
9 var sequelize = require('../../models').sequelize;
12 exports.index = function(req, res, next) {
14 var attributes = ['name', 'description'];
15 var per_page = req.query.per_page ? parseInt(req.query.per_page, 10) : 100;
16 var page = req.query.page ? parseInt(req.query.page, 10) : 0;
21 offset: page * per_page
24 _.forIn(req.query, function(value, key) {
30 query.order = util.format('%s %s', req.query.sort_by, req.query.sort_order || 'ASC') || null;
36 attributes.forEach(function(attribute) {
39 $like: '%' + value + '%'
42 query.where.$or.push(tmp);
49 query.where[key].$like = '%' + value + '%';
53 MailBusinessAutomation
54 .findAndCountAll(query)
55 .then(function(result) {
57 var total_pages = Math.ceil(result.count / per_page);
58 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;
59 var previous_page = page > 0 ? util.format('%s://%s%s?page=%d', req.protocol, req.headers.host, req.baseUrl, page - 1) : null;
61 res.status(200).send({
63 mailAutomations: result.rows,
65 previous_page: previous_page,
66 total_pages: total_pages
70 .catch(function(err) {
71 res.status(500).send({
72 error: 'Something blew up!'
76 // Get a single mailBusinessAutomation
77 exports.show = function(req, res) {
78 MailBusinessAutomation
79 .findById(req.params.id, {
84 .then(function(mailBusinessAutomation) {
85 if (!mailBusinessAutomation) {
86 return res.sendStatus(404);
88 return res.send(mailBusinessAutomation);
90 .catch(function(err) {
91 return handleError(res, err);
95 // Creates a new mailBusinessAutomation in the DB.
96 exports.create = function(req, res, next) {
98 return sequelize.transaction(function(t) {
99 return MailBusinessAutomation
103 .then(function(mailBusinessAutomation) {
106 req.body.or.forEach(function(elm) {
107 elm.MailBusinessAutomationId = mailBusinessAutomation.id;
109 conditions = conditions.concat(req.body.or);
113 req.body.and.forEach(function(elm) {
114 elm.MailBusinessAutomationId = mailBusinessAutomation.id;
116 conditions = conditions.concat(req.body.and);
119 return BusinessCondition
120 .bulkCreate(conditions, {
123 .then(function(businessCondtions) {
124 if (req.body.actions) {
125 req.body.actions.forEach(function(elm) {
126 elm.MailBusinessAutomationId = mailBusinessAutomation.id;
130 return BusinessAction
131 .bulkCreate(req.body.actions, {
138 // Transaction has been committed
139 // result is whatever the result of the promise chain returned to the transaction callback
140 return res.sendStatus(201);
141 }).catch(function(err) {
142 // Transaction has been rolled back
143 // err is whatever rejected the promise chain returned to the transaction callback
148 // Updates an existing mailBusinessAutomation in the DB.
149 exports.update = function(req, res) {
153 MailBusinessAutomation
159 .then(function(mailBusinessAutomation) {
160 if (!mailBusinessAutomation) {
161 return res.sendStatus(404);
163 var updated = _.merge(mailBusinessAutomation, req.body);
166 return res.status(200).send(mailBusinessAutomation);
168 .catch(function(err) {
169 return handleError(res, err);
172 .catch(function(err) {
173 return handleError(res, err);
177 // Deletes a mailBusinessAutomation from the DB.
178 exports.destroy = function(req, res) {
179 MailBusinessAutomation
180 .findById(req.params.id)
181 .then(function(mailBusinessAutomation) {
182 if (!mailBusinessAutomation) {
183 return res.sendStatus(404);
185 mailBusinessAutomation
188 return res.sendStatus(204);
190 .catch(function(err) {
191 return handleError(res, err);
194 .catch(function(err) {
195 return handleError(res, err);
199 // Deletes a agent from the DB.
200 exports.bulkDestroy = function(req, res) {
201 MailBusinessAutomation
206 individualHooks: true
209 return res.sendStatus(204);
211 .catch(function(err) {
212 return handleError(res, err);
216 function handleError(res, err) {
217 return res.status(500).send(err);