├── .env ├── Model └── userModel.js ├── package.json ├── server.js └── Routes └── userRouter.js /.env: -------------------------------------------------------------------------------- 1 | MONGOURL="mongodb+srv://christophar:H5wNCkHXX0b6nh2U@cluster0.oqejirs.mongodb.net/?retryWrites=true&w=majority" 2 | PORT=8001 -------------------------------------------------------------------------------- /Model/userModel.js: -------------------------------------------------------------------------------- 1 | const mongoose = require("mongoose"); 2 | 3 | const userSchema = new mongoose.Schema({ 4 | name: String, 5 | userId: String, 6 | blockedBy: { 7 | type: Array 8 | }, 9 | reports: { 10 | type: Array 11 | } 12 | }); 13 | 14 | module.exports = mongoose.model("User", userSchema); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "server.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "nodemon server.js" 9 | }, 10 | "engines": { 11 | "node": "16.14.0" 12 | }, 13 | "author": "", 14 | "license": "ISC", 15 | "dependencies": { 16 | "dotenv": "^16.0.1", 17 | "express": "^4.18.1", 18 | "mongoose": "^6.4.6" 19 | }, 20 | "devDependencies": { 21 | "nodemon": "^2.0.19" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | const express = require("express") 2 | const app = express() 3 | 4 | const mongoose = require("mongoose") 5 | require("dotenv").config(); 6 | 7 | const port = process.env.PORT || 3000 8 | 9 | mongoose.connect(process.env.MONGOURL, { 10 | // useNewUrlParser: true, 11 | // useUnifiedTopology: true 12 | }).then(() => { 13 | console.log("Connected to MongoDB") 14 | }).catch((err) => { 15 | console.log(err) 16 | }) 17 | 18 | app.use(express.json()); 19 | 20 | // app.use("/",require("./Routes/userRouter")) 21 | app.use('/', require('./Routes/userRouter')) 22 | 23 | app.listen(port, () => { 24 | console.log(`http://localhost:${port}`) 25 | }); -------------------------------------------------------------------------------- /Routes/userRouter.js: -------------------------------------------------------------------------------- 1 | const router = require('express').Router(); 2 | const User = require('../Model/userModel'); 3 | 4 | router.post('/block', async (req, res) => { 5 | const { userId, blockedby } = req.query; 6 | const user = await User.findOne({ userId: userId }); 7 | if (user) { 8 | if (user.blockedBy?.includes(blockedby)) { 9 | const index = user.blockedBy.indexOf(blockedby); 10 | user.blockedBy.splice(index, 1); 11 | await user.save(); 12 | res.json({ blocked: false, user }); 13 | } else { 14 | if (user.blockedBy) { 15 | user.blockedBy.push(blockedby); 16 | await user.save(); 17 | res.json({ blocked: true, user }); 18 | } else { 19 | user.blockedBy = [blockedby]; 20 | await user.save(); 21 | res.json({ blocked: true, user }); 22 | } 23 | } 24 | } else { 25 | const user = new User({ 26 | userId: userId, 27 | blockedBy: [blockedby] 28 | }); 29 | await user.save(); 30 | res.json({ blocked: true, user }); 31 | 32 | } 33 | }); 34 | 35 | router.get('/block', (req, res) => { 36 | User.find({}, (err, users) => { 37 | if (err) { 38 | res.json({ error: err }); 39 | } else { 40 | res.json(users); 41 | } 42 | } 43 | ).sort({ userId: 1 }); 44 | }); 45 | 46 | router.post('/report', async (req, res) => { 47 | const reasons = [ 48 | "Harrasment and cyberbullying", 49 | "Privacy", 50 | "Impersonation of me or someone else", 51 | "Violent threats", 52 | "Child endangerment", 53 | "Hate speech against a protected group", 54 | "Spam and scams" 55 | ] 56 | console.log(req.query) 57 | const { userId, reportedby } = req.query; 58 | let { reason } = req.query; 59 | reason = parseInt(reason); 60 | if (reason < 8 ) { 61 | if ( reason >= 1 ) { 62 | const user = await User.findOne({ userId: userId }); 63 | const reportObj = { 64 | reportedby: reportedby, 65 | reason: reasons[reason - 1] 66 | } 67 | if (user) { 68 | if (user.reports?.includes(reportObj)) { 69 | const index = user.reports.indexOf(reportObj); 70 | user.reports.splice(index, 1); 71 | await user.save(); 72 | res.json({ reported: false, user }); 73 | } else { 74 | if (user.reports) { 75 | user.reports.push(reportObj); 76 | await user.save(); 77 | res.json({ reported: true, user }); 78 | } else { 79 | user.reports = [reportObj]; 80 | await user.save(); 81 | res.json({ reported: true, user }); 82 | } 83 | } 84 | } else { 85 | const user = new User({ 86 | userId: userId, 87 | reports: reportObj 88 | }); 89 | await user.save(); 90 | res.json({ reported: true, user }); 91 | } 92 | } else { 93 | res.json({ reported: false, message: "Invalid reason" }); 94 | }} else { 95 | res.json({ reported: false, message: "Invalid reason" }); 96 | } 97 | }) 98 | 99 | module.exports = router; 100 | --------------------------------------------------------------------------------