Built motion from commit 5e31ea4.|0.0.32
[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(function(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(function() {
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       where: req.query
69     })
70     .then(responseWithResult(res))
71     .catch(handleError(res));
72 }
73
74 // Gets a single SalesforceConfiguration from the DB
75 exports.show = function(req, res) {
76   SalesforceConfiguration.find({
77       where: {
78         id: req.params.id
79       },
80       include: [{
81         model: SalesforceField,
82         as: 'Subject'
83       }, {
84         model: SalesforceField,
85         as: 'Description'
86       }, {
87         model: SalesforceField,
88         as: 'Field'
89       }]
90     })
91     .then(handleEntityNotFound(res))
92     .then(responseWithResult(res))
93     .catch(handleError(res));
94 }
95
96 // Creates a new SalesforceConfiguration in the DB
97 exports.create = function(req, res) {
98   SalesforceConfiguration.create(req.body)
99     .then(responseWithResult(res, 201))
100     .catch(handleError(res));
101 }
102
103 // Updates an existing SalesforceConfiguration in the DB
104 exports.update = function(req, res) {
105   if (req.body.id) {
106     delete req.body.id;
107   }
108   SalesforceConfiguration.findById(req.params.id)
109     .then(handleEntityNotFound(res))
110     .then(saveUpdates(req.body))
111     .then(responseWithResult(res))
112     .catch(handleError(res));
113 }
114
115 // Deletes a SalesforceConfiguration from the DB
116 exports.destroy = function(req, res) {
117   SalesforceConfiguration.findById(req.params.id)
118     .then(handleEntityNotFound(res))
119     .then(removeEntity(res))
120     .catch(handleError(res));
121 }
122
123 exports.addConfigurationField = function(req, res, next) {
124   // console.log(req.params);
125   var salesforceConfiguration;
126   SalesforceConfiguration
127     .findById(req.params.id)
128     .then(handleEntityNotFound(res))
129     .then(function(salesforce_configuration) {
130       salesforceConfiguration = salesforce_configuration;
131       return SalesforceField.create(req.body)
132     })
133     .then(function(salesforceField) {
134       switch (req.params.type) {
135         case 'subject':
136           return [salesforceConfiguration.addSubject(salesforceField), salesforceField];
137         case 'description':
138           return [salesforceConfiguration.addDescription(salesforceField), salesforceField];
139         case 'field':
140           return [salesforceConfiguration.addField(salesforceField), salesforceField];
141       }
142     })
143     .spread(function(data, salesforceField) {
144       return res.status(201).json(salesforceField);
145     })
146     .catch(handleError(res));
147 };