arnaucube
arnaucube/socketioMEANseedPublic Self-hosted repository
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