From 4bb11e0b46df9b5306b1b1dd0ebed2181a7ce806 Mon Sep 17 00:00:00 2001 From: RITIK-CHAUDHRY Date: Thu, 9 Jan 2025 01:10:57 +0530 Subject: [PATCH 1/2] leaderboard solved issue #17 --- client-side/src/App.js | 4 +++- client-side/src/components/NavBar/HamburgerMenu.jsx | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/client-side/src/App.js b/client-side/src/App.js index 86ab838..ab1af34 100644 --- a/client-side/src/App.js +++ b/client-side/src/App.js @@ -39,7 +39,9 @@ export default function App() { } /> - } /> + + + } /> } /> } /> diff --git a/client-side/src/components/NavBar/HamburgerMenu.jsx b/client-side/src/components/NavBar/HamburgerMenu.jsx index 36032c8..fcd62fd 100644 --- a/client-side/src/components/NavBar/HamburgerMenu.jsx +++ b/client-side/src/components/NavBar/HamburgerMenu.jsx @@ -176,6 +176,11 @@ const HamburgerMenu = () => {
  • Notice Board
  • + {auth && ( +
  • + Leaderboard +
  • + )} {auth ? ( From 571b7499533a1f952e119abacab28a30fc87d997 Mon Sep 17 00:00:00 2001 From: RITIK-CHAUDHRY Date: Thu, 9 Jan 2025 01:26:13 +0530 Subject: [PATCH 2/2] added admin privilege --- client-side/src/App.js | 88 ++++++++++++++++++--- server-side/controllers/adminControllers.js | 20 +++++ server-side/model/userModel.js | 4 + server-side/routes/clientRoutes.js | 4 + 4 files changed, 104 insertions(+), 12 deletions(-) diff --git a/client-side/src/App.js b/client-side/src/App.js index ab1af34..db244e3 100644 --- a/client-side/src/App.js +++ b/client-side/src/App.js @@ -1,26 +1,73 @@ -import React from 'react'; +import React, { useEffect } from 'react'; +import axios from 'axios'; import { BrowserRouter, Routes, Route } from "react-router-dom"; import LandingPage from "./pages/LandingPage/LandingPage"; import LoginPage from "./pages/LoginPage/LoginPage"; import VideoLists from './pages/VideoLists/VideoLists'; import Education from './pages/Education/Education'; -import NoticeBoard from "./pages/Noticeboard/Noticeboard" +import NoticeBoard from "./pages/Noticeboard/Noticeboard"; import Leaderboard from './pages/Leaderboard/Leaderboard'; import DashBoard from './pages/DashBoard/dashboard'; -import TeamMember from "./pages/Team/Team" -import Signup from "./pages/SignUp/signUp" -import VerifyEmail from "./pages/SignUp/verifyEmail" +import TeamMember from "./pages/Team/Team"; +import Signup from "./pages/SignUp/signUp"; +import VerifyEmail from "./pages/SignUp/verifyEmail"; import VerifyCfID from './pages/SignUp/verifyCfID'; import ContactUs from './pages/ContactUs/ContactUs'; import ProtectedRoute from './components/auth/ProtectRoute'; import Navbar from './components/NavBar/NavBar'; import { AuthWrapper } from './lib/AuthWrapper'; import ForgotPassword from './pages/SignUp/ForgetPassword'; + export default function App() { + const handleCreateNotice = async (event) => { + event.preventDefault(); + const title = event.target[0].value; + const body = event.target[1].value; + try { + const response = await axios.post('/admin/notices', { title, body }); + if (response.data.status) { + alert('Notice created successfully'); + } + } catch (error) { + console.error('Error creating notice:', error); + } + }; - return ( + const handleDeleteNotice = async (noticeId) => { + try { + const response = await axios.delete(`/admin/notices/${noticeId}`); + if (response.data.status) { + alert('Notice deleted successfully'); + } + } catch (error) { + console.error('Error deleting notice:', error); + } + }; + + const handleDeleteUser = async (userId) => { + try { + const response = await axios.delete(`/admin/users/${userId}`); + if (response.data.status) { + alert('User deleted successfully'); + } + } catch (error) { + console.error('Error deleting user:', error); + } + }; + const handlePromoteToAdmin = async (userId) => { + try { + const response = await axios.put(`/admin/users/${userId}/promote`); + if (response.data.status) { + alert('User promoted to admin successfully'); + } + } catch (error) { + console.error('Error promoting user:', error); + } + }; + + return ( @@ -30,7 +77,6 @@ export default function App() { } /> {/* Route for Forgot Password */} } /> - } /> } /> } /> @@ -42,14 +88,32 @@ export default function App() { } /> + +
    +

    Admin Dashboard

    +
    +

    Create Notice

    +
    + + + +
    +
    +
    +

    Manage Users

    + {/* List of users will be displayed here */} + + +
    +
    + } /> } /> } /> - + - }/> + } />
    -
    - + ) -} \ No newline at end of file +} diff --git a/server-side/controllers/adminControllers.js b/server-side/controllers/adminControllers.js index adc07b1..8b8b907 100644 --- a/server-side/controllers/adminControllers.js +++ b/server-side/controllers/adminControllers.js @@ -118,6 +118,26 @@ module.exports.noticeCreate = async (req, res, next) => { }; +module.exports.deleteUser = async (req, res, next) => { + try { + const { id } = req.params; + await Users.findByIdAndDelete(id); + return res.json({ status: true, msg: "User deleted successfully" }); + } catch (ex) { + next(ex); + } +}; + +module.exports.promoteUserToAdmin = async (req, res, next) => { + try { + const { id } = req.params; + await Users.findByIdAndUpdate(id, { isAdmin: true }); + return res.json({ status: true, msg: "User promoted to admin successfully" }); + } catch (ex) { + next(ex); + } +}; + module.exports.educationCategories = async (req, res, next) => { try { let cookieID; diff --git a/server-side/model/userModel.js b/server-side/model/userModel.js index 1222c7d..47019f8 100644 --- a/server-side/model/userModel.js +++ b/server-side/model/userModel.js @@ -19,6 +19,10 @@ const userSchema = new mongoose.Schema({ type: Boolean, default: false, }, + isAdmin: { + type: Boolean, + default: false, + }, cfVerified: { type: Boolean, default: false, diff --git a/server-side/routes/clientRoutes.js b/server-side/routes/clientRoutes.js index 6e1bfec..c7fce06 100644 --- a/server-side/routes/clientRoutes.js +++ b/server-side/routes/clientRoutes.js @@ -1,4 +1,8 @@ const { + createNotice, + deleteNotice, + deleteUser, + promoteUserToAdmin, educationCategories, videos, leaderboard,