BoilerLiftUp / src / Api / Social.js
Social.js
Raw
const express = require('express');
const mongoose = require('mongoose');
const Social = require('../DB/Social')
const route = express.Router();

// GET: friend information for a given user
route.get('/friend/:user', async(req,res)=>{
    var result = []
    Social.find({username: req.params.user}, async function (err, docs) {
        if (err){
            res.status(400).json({message: error.message})
        }
        else{
            var doc_req = docs[0].friends
            for (var i = 0; i < doc_req.length; i++) {
                var current = {}
                if (doc_req[i].username != undefined) {            
                let current_user = await Users.find({username: doc_req[i].username});
                    current["first_name"] = current_user[0].first_name
                    current["last_name"] = current_user[0].last_name
                    current["profile_picture"]  = current_user[0].profile_picture
                    current["username"] = doc_req[i].username
                    result.push(current)
                }
            }
            res.send({friends_list: result})
        }
    });
});

// Check if given user is friends with given friend
route.get('/isFriend/:user/:friend', async(req, res) => {
    Social.find({username: req.params.user}, async function (err, docs) {
        if (err){
            res.status(400).json({message: error.message})
        }
        else{
            var doc_req = docs[0].friends
            for (var i = 0; i < doc_req.length; i++) {
                let current_user = doc_req[i].username;
                if (current_user == req.params.friend) {
                    res.send({isFriend: true})
                    return
                }
            }
            res.send({isFriend: false})
        }
    });
});

// GET: friend requests for a given user
route.get('/friendReq/:user', async(req,res)=>{
    var result = []
    Social.find({username: req.params.user}, async function (err, docs) {
        if (err){
            res.status(400).json({message: error.message})
        }
        else{
            var doc_req = docs[0].friend_requests
            for (var i = 0; i < doc_req.length; i++) {
                var current = {}    
                if (doc_req[i].username != undefined) {            
                    let current_user = await Users.find({username: doc_req[i].username});
                    current["first_name"] = current_user[0].first_name
                    current["last_name"] = current_user[0].last_name
                    current["profile_picture"]  = current_user[0].profile_picture
                    current["username"] = doc_req[i].username
                    result.push(current)
                }
            }
            res.send({requests: result})
        }
    });
});

// PUT: add friend to user record
route.put('/friend', async(req,res)=>{
    const obj = {"username": req.body.friend}
    Social.updateOne({'username': req.body.username}, 
    {$push:{friends: obj}}, function (err, docs) {
        if (err){
            res.status(400).json({message: error.message})
        } else {
            res.status(200).json(docs)
        }
    });
});

// PUT: remove friend from user record
route.put('/delFriend', async(req,res)=>{
    const obj = {"username": req.body.friend}
    Social.updateOne({'username': req.body.username}, 
    {$pull:{friends: obj}}, function (err, docs) {
        if (err){
            res.status(400).json({message: error.message})
        } else {
            res.status(200).json(docs)
        }
    });
});

// PUT: route for accepting a friend request
route.put('/accFriendReq', async(req,res)=>{
    const obj = {"username": req.body.friend}
    // Remove from friend requests
    Social.updateOne({'username': req.body.username}, 
    {$pull:{friend_requests: obj}});
    // Add to friends 
    Social.updateOne({'username': req.body.username}, 
    {$push:{friends: obj}}, function (err, docs) {
        if (err){
            res.status(400).json({message: error.message})
        } else {
            res.status(200).json(docs)
        }
    });

});

// PUT: route for rejecting a friend request
route.put('/rejFriendReq', async(req,res)=>{
    const obj = {"username": req.body.friend}
    // Remove from friend requests
    Social.updateOne({'username': req.body.username}, 
    {$pull:{friend_requests: obj}}, function (err, docs) {
        if (err){
            res.status(400).json({message: error.message})
        } else {
            res.status(200).json(docs)
        }
    });
});

// PUT: route for adding a friend request
route.put('/addFriendReq', async(req,res)=>{
    const obj = {"username": req.body.username}
    // Add to friend requests
    Social.updateOne({'username': req.body.friend}, 
    {$push:{friend_requests: obj}}, function (err, docs) {
        if (err){
            res.status(400).json({message: error.message})
        } else {
            res.status(200).json(docs)
        }
    });
});

// GET: search results for a given username search
route.get('/searchResult/:search', async(req,res)=>{
    var result = []
    Users.find({username: {"$regex": req.params.search, "$options": "i"}}, function (err, docs) {
        if (err){
            res.status(400).json({message: error.message})
        }
        else{
            for (var i = 0; i < docs.length; i++) {
                var current = {};
                current["username"] = docs[i].username;
                current["profile_picture"] = docs[i].profile_picture;
                current["first_name"] = docs[i].first_name;
                current["last_name"] = docs[i].last_name;
                result.push(current);
            }
            res.send({search_result: result})
        }
    });
});

module.exports = route;