You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

251 lines
9.7 KiB

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