0.0.11 | Built motion from commit e8dda05.
[motion.git] / server / api / salesforce_configuration / salesforce_configuration.controller.js
1 /**
2  * Using Rails-like standard naming convention for endpoints.
3  * GET     /api/salesforce/configurations              ->  index
4  * POST    /api/salesforce/configurations              ->  create
5  * GET     /api/salesforce/configurations/:id          ->  show
6  * PUT     /api/salesforce/configurations/:id          ->  update
7  * DELETE  /api/salesforce/configurations/:id          ->  destroy
8  */
9
10 'use strict';
11
12
13 var _ = require('lodash');
14
15 var SalesforceConfiguration = require('../../models').SalesforceConfiguration;
16 var SalesforceField = require('../../models').SalesforceField;
17
18
19 function handleError(res, statusCode) {
20   statusCode = statusCode || 500;
21   return function(err) {
22     res.status(statusCode).send(err);
23   };
24 }
25
26 function responseWithResult(res, statusCode) {
27   statusCode = statusCode || 200;
28   return function(entity) {
29     if (entity) {
30       res.status(statusCode).json(entity);
31     }
32   };
33 }
34
35 function handleEntityNotFound(res) {
36   return function(entity) {
37     if (!entity) {
38       res.status(404).end();
39       return null;
40     }
41     return entity;
42   };
43 }
44
45 function saveUpdates(updates) {
46   return function(entity) {
47     return entity.updateAttributes(updates)
48       .then(updated => {
49         return updated;
50       });
51   };
52 }
53
54 function removeEntity(res) {
55   return function(entity) {
56     if (entity) {
57       return entity.destroy()
58         .then(() => {
59           res.status(204).end();
60         });
61     }
62   };
63 }
64
65 // Gets a list of SalesforceConfigurations
66 exports.index = function(req, res) {
67   SalesforceConfiguration.findAll()
68     .then(responseWithResult(res))
69     .catch(handleError(res));
70 }
71
72 // Gets a single SalesforceConfiguration from the DB
73 exports.show = function(req, res) {
74   SalesforceConfiguration.find({
75       where: {
76         id: req.params.id
77       },
78       include: [{
79         model: SalesforceField,
80         as: 'Subject'
81       }, {
82         model: SalesforceField,
83         as: 'Description'
84       }, {
85         model: SalesforceField,
86         as: 'Field'
87       }]
88     })
89     .then(handleEntityNotFound(res))
90     .then(responseWithResult(res))
91     .catch(handleError(res));
92 }
93
94 // Creates a new SalesforceConfiguration in the DB
95 exports.create = function(req, res) {
96   SalesforceConfiguration.create(req.body)
97     .then(responseWithResult(res, 201))
98     .catch(handleError(res));
99 }
100
101 // Updates an existing SalesforceConfiguration in the DB
102 exports.update = function(req, res) {
103   if (req.body.id) {
104     delete req.body.id;
105   }
106   SalesforceConfiguration.findById(req.params.id)
107     .then(handleEntityNotFound(res))
108     .then(saveUpdates(req.body))
109     .then(responseWithResult(res))
110     .catch(handleError(res));
111 }
112
113 // Deletes a SalesforceConfiguration from the DB
114 exports.destroy = function(req, res) {
115   SalesforceConfiguration.findById(req.params.id)
116     .then(handleEntityNotFound(res))
117     .then(removeEntity(res))
118     .catch(handleError(res));
119 }
120
121 exports.addConfigurationField = function(req, res, next) {
122   // console.log(req.params);
123   var salesforceConfiguration;
124   SalesforceConfiguration
125     .findById(req.params.id)
126     .then(handleEntityNotFound(res))
127     .then(function(salesforce_configuration) {
128       salesforceConfiguration = salesforce_configuration;
129       return SalesforceField.create(req.body)
130     })
131     .then(function(salesforceField) {
132       switch (req.params.type) {
133         case 'subject':
134           return [salesforceConfiguration.addSubject(salesforceField), salesforceField];
135         case 'description':
136           return [salesforceConfiguration.addDescription(salesforceField), salesforceField];
137         case 'field':
138           return [salesforceConfiguration.addField(salesforceField), salesforceField];
139       }
140     })
141     .spread(function(data, salesforceField) {
142       return res.status(201).json(salesforceField);
143     })
144     .catch(handleError(res));
145 };