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

route.get('/', async(req,res)=>{
    // const community = await Community.find()
    // res.send(community)
    Community.aggregate([
        {
            $addFields: { members_count: { $size: { "$ifNull": ["$members", []] } } }
        },
        {
            $sort: { "members_count": -1 }
        }
    ],
        function (err, data) {

            if (err)
                throw err;

            res.send(data)

        }
    );
});

route.get('/:memberName', async(req,res)=>{
    // const community = await Community.find({members: req.params.memberName})
    // res.send(community)
    Community.aggregate([
        {$match: {members: req.params.memberName}},
        {
            $addFields: { members_count: { $size: { "$ifNull": ["$members", []] } } }
        },
        {
            $sort: { "members_count": -1 }
        }
    ],
        function (err, data) {

            if (err)
                throw err;

            res.send(data)

        }
    );
});

route.post('/', async(req,res)=>{
    const comm = req.body;
    const newComm = new Community(comm)
    try {
        await newComm.save()
        res.status(200).json(newComm)
    } catch (error) {
        res.status(400).json({message: error.message})
    }
});

route.delete('/:ComName', async(req,res)=>{  
    try{
        //first query
        await Post.deleteMany({ComName: req.params.ComName});
        //second query
        await Community.deleteOne({ComName: req.params.ComName});

        return res.status(200).json("Posts in community and community deleted")
    }
    catch(err){
        return res.status(400).json({err})
    }
});

route.put('/pullmember/:ComName/:member', async(req,res)=>{  
    try{
        await Community.findOneAndUpdate(
            { ComName: req.params.ComName },
            { $pull: { members: req.params.member } }
        );
        await Community.findOneAndUpdate(
            { ComName: req.params.ComName },
            { $pull: { admins: req.params.member } }
        );
        return res.status(200).json("member removed from comunity")
    }
    catch(err){
        return res.status(400).json({err})
    }
});

route.put('/pushmember/:ComName/:member', async(req,res)=>{  
    try{
        await Community.findOneAndUpdate(
            { ComName: req.params.ComName },
            { $push: { members: req.params.member } }
        );
        return res.status(200).json("member added to comunity")
    }
    catch(err){
        return res.status(400).json({err})
    }
});

module.exports = route;