BoilerLiftUp / src / Api / UserProfile.js
UserProfile.js
Raw
/* 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;