socketioMEANseed/server/controllers/dietController.js
server/controllers/dietController.jsRaw
1var express = require('express');
2var app = express();
3var config = require('../config/config');
4var crypto = require('crypto');
5
6app.set('superSecret', config.secret);
7var userModel = require('../models/userModel');
8var dietModel = require('../models/dietModel');
9//var chefModel = require('../models/chefModel');
10
11/** GET '/diets' ***/
12exports.getDiets = function (req, res) {
13 dietModel.find()
14 .limit(Number(req.query.pageSize))
15 .skip(Number(req.query.pageSize)*Number(req.query.page))
16 .exec(function (err, diets) {
17 if (err) return res.send(500, err.message);
18 res.status(200).jsonp(diets);
19 });
20};
21
22/** GET '/diets/:dietid' **/
23exports.getDietById = function (req, res) {
24 dietModel.findOne({_id: req.params.dietid})
25 .lean()
26 .populate('chef', 'name avatar')
27 .exec(function (err, diet) {
28 if (err) return res.send(500, err.message);
29 res.status(200).jsonp(diet);
30 });
31};
32
33/**DELETE '/diets/:dietid' **/
34exports.deleteDietById = function (req, res) {
35 userModel.findOne({'tokens.token': req.headers['x-access-token'], role:'chef'}, function (err, chef) {
36 if (err) return res.send(500, err.message);
37 if (!chef) {
38 res.json({success: false, message: 'Chef not found.'});
39 } else if (chef) {
40 for (var i = 0; i < chef.diets.length; i++) {
41 if (chef.diets[i].equals(req.params.dietid)) {
42 chef.diets.splice(i, 1);
43 chef.save(function (err, chef) {//guardem el chef amb la dieta treta
44 if (err) return res.send(500, err.message);
45
46 dietModel.findByIdAndRemove({_id: req.params.dietid}, function (err) {
47 if (err !== null) return res.send(500, err.message);
48 res.status(200).jsonp('Deleted diet');
49 });
50 });
51 }
52 }
53 }
54 });
55};
56
57/** PUT '/diets/:dietid' **/
58exports.updateDietById = function (req, res) {
59 userModel.findOne({'tokens.token': req.headers['x-access-token'], role:'chef'}, function (err, chef) {
60 if (err) return res.send(500, err.message);
61 if (!chef) {
62 res.json({success: false, message: 'Chef not found.'});
63 } else if (chef) {
64 for (var i = 0; i < chef.diets.length; i++) {
65 if (chef.diets[i].equals(req.params.dietid)) {
66 chef.diets.splice(i, 1); //<-- splice? quan s'està fent un update? no s'hauria d'eliminar
67 //tot i que no afecta, pq l'splice aquest després no es guarda a la base de dades pq no hi ha cap chef.save
68 /* Solo si esa dieta ha sido creada por el chef */
69 var id = req.params.dietid;
70 var diet = req.body;
71 dietModel.update({"_id": id}, diet,
72 function (err) {
73 if (err) return console.log(err);
74 console.log(diet);
75 res.status(200).jsonp(diet);
76 });
77 }
78 }
79 }
80 });
81};
82
83/**POST '/diets' **/
84exports.createDiet = function (req, res) {
85 userModel.findOne({'tokens.token': req.headers['x-access-token'], role:'chef'}, function (err, chef) {
86 if (err) return res.send(500, err.message);
87 if (!chef) {
88 res.json({success: false, message: 'Diet creation failed. Chef not found.'});
89 } else if (chef) {
90 var diet = new dietModel({
91 title: req.body.title,
92 description: req.body.description,
93 chef: chef._id,//a partir del token, pillem la id
94 client: req.params.clientid//es guarda de quin user és la diet
95 });
96 //guardem la diet
97 diet.save(function (err, diet) {
98 if (err) {
99 console.log(err.message);
100 return res.status(500).send(err.message);
101 }
102 //ara guardem la dietid al chef
103 chef.diets.push(diet._id);
104 chef.save(function (err, chef) {
105 if (err) return res.send(500, err.message);
106
107 });
108 res.status(200).jsonp(diet);
109 });
110 }//else
111 });
112};
113
114/** POST '/diets/:dietid/days' **/
115exports.addDayToDiet = function (req, res) {
116 userModel.findOne({'tokens.token': req.headers['x-access-token'], role:'chef'}, function (err, chef) {
117 if (err) return res.send(500, err.message);
118 if (!chef) {
119 res.json({success: false, message: 'Diet day addition failed. Trainer not found.'});
120 } else if (chef) {
121 dietModel.findOne({_id: req.params.dietid}, function (err, diet) {
122 if (err) return res.send(500, err.message);
123
124 if (chef._id.equals(diet.chef)) {// si el chef que fa el post realment és el chef creator de la diet
125 diet.days.push(req.body.day);
126 diet.save(function (err, diet) {
127 if (err) {
128 return res.status(500).send(err.message);
129 }
130 res.status(200).jsonp(diet);
131 });
132 }
133 });
134 }// end else if
135 });
136};
137
138/** POST '/diets/choose' **/
139exports.chooseDiet = function (req, res) {
140 userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, user) {
141 if (err) return res.send(500, err.message);
142 if (!user) {
143 res.json({success: false, message: 'choosing diet failed. user not found.'});
144 } else if (user) {
145 user.diets.push(req.params.dietid);
146 /* gamification */
147 var reward = {
148 concept: "choosing diet",
149 date: Date(),
150 value: +5
151 };
152 user.points.history.push(reward);
153 user.points.total = user.points.total + 5;
154 /* end of gamification */
155 user.save(function (err) {
156 if (err) return res.send(500, err.message);
157
158 res.status(200).jsonp(user);
159 })
160 }//end else if
161 });
162};
163
164/** DELETE '/diets/choose' **/
165exports.unchooseDiet = function (req, res) {
166 userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, user) {
167 if (err) return res.send(500, err.message);
168 if (!user) {
169 res.json({success: false, message: 'user not found.'});
170 } else if (user) {
171 for (var i = 0; i < user.diets.length; i++) {
172 if (user.diets[i].equals(req.params.dietid)) {//deletes the diets of the user with the dietid
173 user.diets.splice(i, 1);
174 }
175 }
176 /* gamification */
177 var reward = {
178 concept: "unchoosing diet",
179 date: Date(),
180 value: -7
181 };
182 user.points.history.push(reward);
183 user.points.total = user.points.total - 7;
184 /* end of gamification */
185 user.save(function (err) {
186 if (err) return res.send(500, err.message);
187
188 res.status(200).jsonp(user);
189 });
190 }//end else if
191 });
192};
193
194/** POST '/diets/completeDay/:dietid' **/
195exports.completeDayGamificatedDiet = function (req, res) {
196 //1r intentamos darle los puntos al usuario por haber completado el día
197 userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, user) {
198 if (err)
199 return res.send(500, err.message);
200 if (!user) {
201 res.json({success: false, message: 'choosing diet failed. user not found.'});
202 }
203 else if (user) {
204 /* gamification */
205 var reward =
206 {
207 concept: "diet day complete",
208 date: Date(),
209 value: +1
210 };
211 user.points.history.push(reward);
212 user.points.total = user.points.total + 1;
213 /* end of gamification */
214 user.save(function (err) {
215 if (err)
216 return res.send(500, err.message);
217 });
218 //Ahora intentamos añadir done = true dentro del modelo dieta
219 dietModel.findOne({'_id': req.params.dietid}, function (err, diet) {
220 if (err)
221 return res.send(500, err.message);
222 if (!diet) {
223 res.json({success: false, message: 'Diet not found'});
224 }
225 else if (diet) {
226 var indexDay = -1;
227 for (var i = 0; i < diet.days.length; i++) //diet.days
228 {
229 if (diet.days[i]._id.equals(req.body.dayid)) {
230 //aquí hem trobat el dia que busquem
231 indexDay = JSON.parse(JSON.stringify(i));
232 }
233 }//End for looking for days
234 if (indexDay > -1) {
235 /* True to day done*/
236 diet.days[indexDay].done = true;
237 /* end of done*/
238 diet.save(function (err) {
239 if (err)
240 return res.send(500, err.message);
241 res.status(200).jsonp(diet);
242 });//diet.save
243 }//End if when day foung
244 else {
245 res.json({success: false, message: 'Day not found'});
246 }
247 }//End else if found diet
248 });//En dietModel for done = true
249 }//End else if (user)
250 });//En UserModel findOne()
251};//End function