var express = require('express');
|
|
var app = express();
|
|
var config = require('../config/config');
|
|
var crypto = require('crypto');
|
|
|
|
app.set('superSecret', config.secret);
|
|
var userModel = require('../models/userModel');
|
|
var dietModel = require('../models/dietModel');
|
|
//var chefModel = require('../models/chefModel');
|
|
|
|
/** GET '/diets' ***/
|
|
exports.getDiets = function (req, res) {
|
|
dietModel.find()
|
|
.limit(Number(req.query.pageSize))
|
|
.skip(Number(req.query.pageSize)*Number(req.query.page))
|
|
.exec(function (err, diets) {
|
|
if (err) return res.send(500, err.message);
|
|
res.status(200).jsonp(diets);
|
|
});
|
|
};
|
|
|
|
/** GET '/diets/:dietid' **/
|
|
exports.getDietById = function (req, res) {
|
|
dietModel.findOne({_id: req.params.dietid})
|
|
.lean()
|
|
.populate('chef', 'name avatar')
|
|
.exec(function (err, diet) {
|
|
if (err) return res.send(500, err.message);
|
|
res.status(200).jsonp(diet);
|
|
});
|
|
};
|
|
|
|
/**DELETE '/diets/:dietid' **/
|
|
exports.deleteDietById = function (req, res) {
|
|
userModel.findOne({'tokens.token': req.headers['x-access-token'], role:'chef'}, function (err, chef) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!chef) {
|
|
res.json({success: false, message: 'Chef not found.'});
|
|
} else if (chef) {
|
|
for (var i = 0; i < chef.diets.length; i++) {
|
|
if (chef.diets[i].equals(req.params.dietid)) {
|
|
chef.diets.splice(i, 1);
|
|
chef.save(function (err, chef) {//guardem el chef amb la dieta treta
|
|
if (err) return res.send(500, err.message);
|
|
|
|
dietModel.findByIdAndRemove({_id: req.params.dietid}, function (err) {
|
|
if (err !== null) return res.send(500, err.message);
|
|
res.status(200).jsonp('Deleted diet');
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
/** PUT '/diets/:dietid' **/
|
|
exports.updateDietById = function (req, res) {
|
|
userModel.findOne({'tokens.token': req.headers['x-access-token'], role:'chef'}, function (err, chef) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!chef) {
|
|
res.json({success: false, message: 'Chef not found.'});
|
|
} else if (chef) {
|
|
for (var i = 0; i < chef.diets.length; i++) {
|
|
if (chef.diets[i].equals(req.params.dietid)) {
|
|
chef.diets.splice(i, 1); //<-- splice? quan s'està fent un update? no s'hauria d'eliminar
|
|
//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
|
|
/* Solo si esa dieta ha sido creada por el chef */
|
|
var id = req.params.dietid;
|
|
var diet = req.body;
|
|
dietModel.update({"_id": id}, diet,
|
|
function (err) {
|
|
if (err) return console.log(err);
|
|
console.log(diet);
|
|
res.status(200).jsonp(diet);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
/**POST '/diets' **/
|
|
exports.createDiet = function (req, res) {
|
|
userModel.findOne({'tokens.token': req.headers['x-access-token'], role:'chef'}, function (err, chef) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!chef) {
|
|
res.json({success: false, message: 'Diet creation failed. Chef not found.'});
|
|
} else if (chef) {
|
|
var diet = new dietModel({
|
|
title: req.body.title,
|
|
description: req.body.description,
|
|
chef: chef._id,//a partir del token, pillem la id
|
|
client: req.params.clientid//es guarda de quin user és la diet
|
|
});
|
|
//guardem la diet
|
|
diet.save(function (err, diet) {
|
|
if (err) {
|
|
console.log(err.message);
|
|
return res.status(500).send(err.message);
|
|
}
|
|
//ara guardem la dietid al chef
|
|
chef.diets.push(diet._id);
|
|
chef.save(function (err, chef) {
|
|
if (err) return res.send(500, err.message);
|
|
|
|
});
|
|
res.status(200).jsonp(diet);
|
|
});
|
|
}//else
|
|
});
|
|
};
|
|
|
|
/** POST '/diets/:dietid/days' **/
|
|
exports.addDayToDiet = function (req, res) {
|
|
userModel.findOne({'tokens.token': req.headers['x-access-token'], role:'chef'}, function (err, chef) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!chef) {
|
|
res.json({success: false, message: 'Diet day addition failed. Trainer not found.'});
|
|
} else if (chef) {
|
|
dietModel.findOne({_id: req.params.dietid}, function (err, diet) {
|
|
if (err) return res.send(500, err.message);
|
|
|
|
if (chef._id.equals(diet.chef)) {// si el chef que fa el post realment és el chef creator de la diet
|
|
diet.days.push(req.body.day);
|
|
diet.save(function (err, diet) {
|
|
if (err) {
|
|
return res.status(500).send(err.message);
|
|
}
|
|
res.status(200).jsonp(diet);
|
|
});
|
|
}
|
|
});
|
|
}// end else if
|
|
});
|
|
};
|
|
|
|
/** POST '/diets/choose' **/
|
|
exports.chooseDiet = function (req, res) {
|
|
userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, user) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!user) {
|
|
res.json({success: false, message: 'choosing diet failed. user not found.'});
|
|
} else if (user) {
|
|
user.diets.push(req.params.dietid);
|
|
/* gamification */
|
|
var reward = {
|
|
concept: "choosing diet",
|
|
date: Date(),
|
|
value: +5
|
|
};
|
|
user.points.history.push(reward);
|
|
user.points.total = user.points.total + 5;
|
|
/* end of gamification */
|
|
user.save(function (err) {
|
|
if (err) return res.send(500, err.message);
|
|
|
|
res.status(200).jsonp(user);
|
|
})
|
|
}//end else if
|
|
});
|
|
};
|
|
|
|
/** DELETE '/diets/choose' **/
|
|
exports.unchooseDiet = function (req, res) {
|
|
userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, user) {
|
|
if (err) return res.send(500, err.message);
|
|
if (!user) {
|
|
res.json({success: false, message: 'user not found.'});
|
|
} else if (user) {
|
|
for (var i = 0; i < user.diets.length; i++) {
|
|
if (user.diets[i].equals(req.params.dietid)) {//deletes the diets of the user with the dietid
|
|
user.diets.splice(i, 1);
|
|
}
|
|
}
|
|
/* gamification */
|
|
var reward = {
|
|
concept: "unchoosing diet",
|
|
date: Date(),
|
|
value: -7
|
|
};
|
|
user.points.history.push(reward);
|
|
user.points.total = user.points.total - 7;
|
|
/* end of gamification */
|
|
user.save(function (err) {
|
|
if (err) return res.send(500, err.message);
|
|
|
|
res.status(200).jsonp(user);
|
|
});
|
|
}//end else if
|
|
});
|
|
};
|
|
|
|
/** POST '/diets/completeDay/:dietid' **/
|
|
exports.completeDayGamificatedDiet = function (req, res) {
|
|
//1r intentamos darle los puntos al usuario por haber completado el día
|
|
userModel.findOne({'tokens.token': req.headers['x-access-token']}, function (err, user) {
|
|
if (err)
|
|
return res.send(500, err.message);
|
|
if (!user) {
|
|
res.json({success: false, message: 'choosing diet failed. user not found.'});
|
|
}
|
|
else if (user) {
|
|
/* gamification */
|
|
var reward =
|
|
{
|
|
concept: "diet day complete",
|
|
date: Date(),
|
|
value: +1
|
|
};
|
|
user.points.history.push(reward);
|
|
user.points.total = user.points.total + 1;
|
|
/* end of gamification */
|
|
user.save(function (err) {
|
|
if (err)
|
|
return res.send(500, err.message);
|
|
});
|
|
//Ahora intentamos añadir done = true dentro del modelo dieta
|
|
dietModel.findOne({'_id': req.params.dietid}, function (err, diet) {
|
|
if (err)
|
|
return res.send(500, err.message);
|
|
if (!diet) {
|
|
res.json({success: false, message: 'Diet not found'});
|
|
}
|
|
else if (diet) {
|
|
var indexDay = -1;
|
|
for (var i = 0; i < diet.days.length; i++) //diet.days
|
|
{
|
|
if (diet.days[i]._id.equals(req.body.dayid)) {
|
|
//aquí hem trobat el dia que busquem
|
|
indexDay = JSON.parse(JSON.stringify(i));
|
|
}
|
|
}//End for looking for days
|
|
if (indexDay > -1) {
|
|
/* True to day done*/
|
|
diet.days[indexDay].done = true;
|
|
/* end of done*/
|
|
diet.save(function (err) {
|
|
if (err)
|
|
return res.send(500, err.message);
|
|
res.status(200).jsonp(diet);
|
|
});//diet.save
|
|
}//End if when day foung
|
|
else {
|
|
res.json({success: false, message: 'Day not found'});
|
|
}
|
|
}//End else if found diet
|
|
});//En dietModel for done = true
|
|
}//End else if (user)
|
|
});//En UserModel findOne()
|
|
};//End function
|