/* Routes relating to sign in and user profile in the application */ const express = require('express'); const Users = require('../DB/Users'); const Community = require('../DB/Community') const Post = require('../DB/Post'); const Social = require('../DB/Social'); const NutritionDB = require('../DB/NutritionDB') const route = express.Router(); // GET route: get username from uid route.get('/uid/:uid', async(req,res)=>{ const user = await Users.find({uid: req.params.uid}) res.send(user) }); // GET: user profile information for a given user route.get('/user/:user', async(req,res)=>{ Users.find({username: req.params.user}, function (err, docs) { if (err){ res.status(400).json({message: error.message}) } else{ res.send(docs) } }); }); // GET: Route to get a users average stats given username route.get('/avg/:user', async(req,res)=>{ Users.find({username: req.params.user}, function (err, docs) { if (err){ res.status(400).json({message: error.message}) } else { var result = [] const avg = docs[0].average_stats; const other_avg = docs[0].other_avg_stats; result.push({"ex_name": "Bench Press", "stat": avg["bench_press"]}) result.push({"ex_name": "Squat", "stat": avg["squat"]}) result.push({"ex_name": "Deadlift", "stat": avg["deadlift"]}) for (var i = 0; i < other_avg.length; i++) { var current = other_avg[i]; result.push({"ex_name": current.exercise, "stat": current.stat}) } res.send({"avgStats": result}) } }); }); // GET: Route to get a users personal records given username route.get('/pr/:user', async(req,res)=>{ Users.find({username: req.params.user}, function (err, docs) { if (err){ res.status(400).json({message: error.message}) } else{ var result = []; const pr = docs[0].personal_records; const other_pr = docs[0].other_personal_records; result.push({"ex_name": "Bench Press", "stat": pr["bench_press"]}) result.push({"ex_name": "Squat", "stat": pr["squat"]}) result.push({"ex_name": "Deadlift", "stat": pr["deadlift"]}) for (var i = 0; i < other_pr.length; i++) { var current = other_pr[i]; result.push({"ex_name": current.exercise, "stat": current.stat}) } res.send({"prStats": result}) } }); }); route.get('/comm_owned/:user', async(req, res) => { Community.find({owner: req.params.user}, function(err, docs) { if (err) { res.status(400).json({message: error.message}) } else { var result = ""; for (var i = 0; i < docs.length; i++) { if (i != 0) { result += ", " } result += docs[i].ComName } res.send({"communities": result}); } }).select({ComName: 1}); }) // PUT: edit profile updates for a given user route.put('/update', async(req,res)=>{ const username = req.body.username const new_data = req.body.update Users.updateOne({'username': username}, {$set: new_data}, {rawResult: true}, function (err, docs) { if (err){ res.status(400).json({message: error.message}) } else{ res.status(200).json(docs) } }); }); // DELETE: route to delete a given user route.delete('/:user', async(req,res)=>{ // add functionality for nutrition maybe try{ await Post.deleteMany({username: req.params.user}); await Community.deleteMany({owner: req.params.user}); await Users.deleteOne({username: req.params.user}); await Social.deleteOne({username: req.params.user}); await NutritionDB.deleteMany({owner: req.params.user}); return res.status(200).json("User presence for "+req.params.user+" have been deleted from Post, Community and Users.") } catch(err){ return res.status(400).json({err}) } }); route.put('/pullworkout/:workoutName/:user', async(req,res)=>{ try{ await Users.findOneAndUpdate( {username : req.params.user }, { $pull: { workout: req.params.workoutName } } ); return res.status(200).json("member workout from routine.") } catch(err){ return res.status(400).json({err}) } }); route.put('/pushworkout/:workoutName/:user', async(req,res)=>{ try{ await Users.findOneAndUpdate( {username : req.params.user }, { $push: { workout: req.params.workoutName } } ); return res.status(200).json("member workout from routine.") } catch(err){ return res.status(400).json({err}) } }); module.exports = route;