From 945633b6840680ff9621eee385bcab519d883eba Mon Sep 17 00:00:00 2001 From: buildingu Date: Tue, 27 Aug 2024 02:47:39 -0500 Subject: [PATCH] Update: app functionality --- Controllers/feedbackController.js | 135 +++++++----------- Controllers/userController.js | 11 +- Models/Mentors.js | 15 -- Models/index.js | 2 - Routes/Feedback.js | 2 +- admin.json | 9 ++ package.json | 2 +- views/package.json | 2 +- views/src/Pages/CreatedRequests.jsx | 1 + views/src/Pages/FeedbackQueue.jsx | 1 + views/src/Pages/Interndashboard.jsx | 34 +++-- views/src/Pages/Mentordashboard.jsx | 13 +- views/src/Pages/SingleFeedbackPage.jsx | 5 +- views/src/components/FeedbackCard.jsx | 4 +- views/src/components/Sidebar.jsx | 64 ++------- views/src/components/TextEditor.jsx | 4 +- views/src/features/Feedbacks/feedbackSlice.js | 2 +- 17 files changed, 111 insertions(+), 195 deletions(-) delete mode 100644 Models/Mentors.js create mode 100644 admin.json diff --git a/Controllers/feedbackController.js b/Controllers/feedbackController.js index ee332f5..654182d 100644 --- a/Controllers/feedbackController.js +++ b/Controllers/feedbackController.js @@ -73,37 +73,17 @@ const submitFeedBack = async (req, res) => { /*This retrieves every single feedback (only requests that are not marked as complete requests made by the interns */ const getAllFeedBackRequestsForms = async (req, res) => { - const { authToken } = req.cookies; - const { id, username } = jwt.verify(authToken, process.env.JWT_SECRET); try { - const isMentor = await User.findOne({ - where: { - id: id, - mentor: true, - }, - }); - if (isMentor) { - const feedBackrequests = await FeedbackRequest.findAll({ - where: { - status: { - [Op.not]: true, - }, - }, - }); - res.status(200).json({ data: feedBackrequests }); - } - //Not sure why this was added. Might not be useful. Will revisit to make sure it's needed. - if (!isMentor) { + const feedBackrequests = await FeedbackRequest.findAll({ where: { - studentName: username, status: { [Op.not]: true, }, }, }); res.status(200).json({ data: feedBackrequests }); - } + } catch (err) { res.status(500).json({ error: "Internal Server Error" }); logger.error(`Server Error`, {error: JSON.stringify(err)}) @@ -184,13 +164,49 @@ const flockNotification = async (req, res) => { } }; -////////////////////////////////////////// -/* Code below here are basically controller functions -for the Code leads or mentor endpoints -*/ -/////////////////////////////////////////////// -/*This controller allows the Code leads to add feedbacks to the feedback requests made by the interns */ +/*This controller allows users to assign feedback requests to themselves +for + */ +const assignFeedBack = async (req, res) => { + try { + const { feedbackrequestId } = req.params; + const { authToken } = req.cookies; + const { id, username } = jwt.verify(authToken, process.env.JWT_SECRET); + + + // Grab the user information based on the id for updates of the request form. + const userDetail = await User.findOne({ + where: username, + where: {id: id} + }) + + // Find the specific feedback request record based on feedbackrequestId + const feedbackRecord = await FeedbackRequest.findOne({ + where: { id: feedbackrequestId }, + }); + + if (!feedbackRecord) { + logger.error(`Feedback record not found`, {log: JSON.stringify(feedbackRecord)}) + return res.status(404).json({ msg: "Feedback record not found" }); + } + + feedbackRecord.isAssigned = true; + feedbackRecord.whoisAssigned = userDetail.fName; + await feedbackRecord.save(); + + logger.info(`Feedback assigned to mentor`, {log: JSON.stringify(feedbackRecord)}) + res.json({ msg: "Feedback assigned to mentor", data: feedbackRecord }); + } catch (err) { + logger.error(`An error occurred while updating feedback`, {log: JSON.stringify(err)}) + res + .status(500) + .json({ error: "An error occurred while updating feedback" }); + } +}; + + +/*This controller allows users to add feedbacks to the feedback requests in the queue */ const addFeedBack = async (req, res) => { try { const { feedback } = req.body; @@ -204,18 +220,6 @@ const addFeedBack = async (req, res) => { return res.status(400).json(errors); } - // Check if the user is a mentor - const isMentor = await User.findOne({ - where: { - id: id, - mentor: true, - }, - }); - - if (!isMentor) { - logger.error(`Unauthorized user`, {log: JSON.stringify(isMentor)}) - return res.status(401).json({ msg: "Unauthorized user" }); - } // Find the specific feedback request record based on feedbackrequestId const feedbackRequest = await FeedbackRequest.findOne({ @@ -252,51 +256,12 @@ const addFeedBack = async (req, res) => { } }; -/*This controller allows the Code leads to assign feedback requests to themselves - */ -const assignFeedBackToMentor = async (req, res) => { - try { - const { feedbackrequestId } = req.params; - const { authToken } = req.cookies; - const { id } = jwt.verify(authToken, process.env.JWT_SECRET); - - // Check if the user is a mentor - const isMentor = await User.findOne({ - where: { - id: id, - mentor: true, - }, - }); - - if (!isMentor) { - logger.error(`Unauthorized user`, {log: JSON.stringify(isMentor)}) - return res.status(401).json({ msg: "Unauthorized user" }); - } - - // Find the specific feedback request record based on feedbackrequestId - const feedbackRecord = await FeedbackRequest.findOne({ - where: { id: feedbackrequestId }, - }); - - if (!feedbackRecord) { - logger.error(`Feedback record not found`, {log: JSON.stringify(feedbackRecord)}) - return res.status(404).json({ msg: "Feedback record not found" }); - } - - feedbackRecord.isAssigned = true; - feedbackRecord.mentorId = isMentor.mentorId; - feedbackRecord.whoisAssigned = isMentor.fName; - await feedbackRecord.save(); - logger.info(`Feedback assigned to mentor`, {log: JSON.stringify(feedbackRecord)}) - res.json({ msg: "Feedback assigned to mentor", data: feedbackRecord }); - } catch (err) { - logger.error(`An error occurred while updating feedback`, {log: JSON.stringify(err)}) - res - .status(500) - .json({ error: "An error occurred while updating feedback" }); - } -}; +////////////////////////////////////////// +/* Code below here are basically controller functions +for the Code leads or mentor endpoints +*/ +/////////////////////////////////////////////// /*This controller retrieves all the assigned Feedback Requests of the code lead logged in. @@ -422,7 +387,7 @@ module.exports = { submitFeedBack, getAllFeedBackRequestsForms, getUserFeedBackRequestForms, - assignFeedBackToMentor, + assignFeedBack, addFeedBack, getAssignedFeedBacks, getMentorFeedback, diff --git a/Controllers/userController.js b/Controllers/userController.js index b883297..29417cc 100644 --- a/Controllers/userController.js +++ b/Controllers/userController.js @@ -8,7 +8,7 @@ const Users = db.User; const ExerciseInfo = db.ExerciseInfo; const FeedbackRequest = db.FeedbackRequest; const Feedbacks = db.Feedbacks; -const Mentors = db.Mentors; +const Mentors = require("../admin.json"); const loginValidator = require("../utility/inputValidator/loginValidator"); const registerValidator = require("../utility/inputValidator/registerValidator"); const logger = require("../utility/logger/logger"); @@ -18,8 +18,9 @@ const registerUser = async (req, res) => { const { fName, userName, password } = req.body; const { errors, validationCheck } = registerValidator(req.body); const isUserExist = await Users.findOne({ where: { username: userName } }); - const isMentorEmail = await Mentors.findOne({ where: { email: userName } }); - const isUserMentor = !!isMentorEmail; + + //Check if the user should be a mentor based on the email + const isMentor = Mentors.Mentors.include(userName); const { v4: uuidv4 } = require("uuid"); // This checks that the inputs entered meet some criteria @@ -48,8 +49,8 @@ const registerUser = async (req, res) => { fName: fName, username: userName, password: hashedPassword, - mentor: isUserMentor, - mentorId: isUserMentor ? uuidv4() : null, + mentor: isMentor, + mentorId: isMentor ? uuidv4() : null, }; await Users.create(userData); diff --git a/Models/Mentors.js b/Models/Mentors.js deleted file mode 100644 index aa4ff86..0000000 --- a/Models/Mentors.js +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = (sequelize, DataTypes) => { - const Mentor = sequelize.define("Mentor", { - email: { - type: DataTypes.STRING, - allowNull: false, - unique: true, - validate: { - isEmail: true, - } - } - }); - - return Mentor; - }; - \ No newline at end of file diff --git a/Models/index.js b/Models/index.js index d4dbcfb..d80648f 100644 --- a/Models/index.js +++ b/Models/index.js @@ -12,7 +12,6 @@ const FeedbackRequest = require("./Feedbackrequest")(sequelize, DataTypes); const Feedbacks = require("./Feedbacks")(sequelize, DataTypes); const Otptoken = require("./Otptoken")(sequelize, DataTypes); const ExerciseInfo = require("./ExerciseInfo")(sequelize, DataTypes); -const Mentors = require("./Mentors")(sequelize, DataTypes); //This was poorly desgined. Should spent more time fixing this @@ -58,5 +57,4 @@ module.exports = { Feedbacks, Otptoken, ExerciseInfo, - Mentors, }; diff --git a/Routes/Feedback.js b/Routes/Feedback.js index 6d43d59..f1bd39c 100644 --- a/Routes/Feedback.js +++ b/Routes/Feedback.js @@ -6,7 +6,7 @@ const feedbackController = require('../Controllers/feedbackController') router.post("/submitfeedback", auth, rateLimiter, feedbackController.submitFeedBack); -router.post("/assignFeedBackToMentor/:feedbackrequestId", auth, rateLimiter,feedbackController.assignFeedBackToMentor); +router.post("/assignFeedBack/:feedbackrequestId", auth, rateLimiter,feedbackController.assignFeedBack); router.post("/addFeedBack/:feedbackrequestId", auth, rateLimiter, feedbackController.addFeedBack); diff --git a/admin.json b/admin.json new file mode 100644 index 0000000..df209ca --- /dev/null +++ b/admin.json @@ -0,0 +1,9 @@ +{ + "Mentors":[ + "tamara@building-u.com", + "kjgarbos@gmail.com", + "gbudjeakp@gmail.com", + "andrewsh190@gmail.com", + "siddhanth.subramanian99@gmail.com" + ] +} \ No newline at end of file diff --git a/package.json b/package.json index 95a50d3..78b72dd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "building-u-feedback-api", - "version": "v3.0.0", + "version": "v4.0.0", "description": "This is for the server api that serves the app", "main": "index.js", "scripts": { diff --git a/views/package.json b/views/package.json index 180af39..bfac7c9 100644 --- a/views/package.json +++ b/views/package.json @@ -1,6 +1,6 @@ { "name": "building-u-feedback", - "version": "v3.0.0", + "version": "v4.0.0", "homepage": "https://buildingu.github.io/Building-u-feedback", "type": "module", "scripts": { diff --git a/views/src/Pages/CreatedRequests.jsx b/views/src/Pages/CreatedRequests.jsx index a8a325c..56a0e77 100644 --- a/views/src/Pages/CreatedRequests.jsx +++ b/views/src/Pages/CreatedRequests.jsx @@ -14,6 +14,7 @@ function CreatedRequests(props) { return (
- +
- - } /> - } /> - } /> - -
- ) +
+ + + } /> + } /> + } /> + } /> + +
+
+ ); } -export default Interndashboard \ No newline at end of file +export default Interndashboard; \ No newline at end of file diff --git a/views/src/Pages/Mentordashboard.jsx b/views/src/Pages/Mentordashboard.jsx index 2768bf7..ea1bc20 100644 --- a/views/src/Pages/Mentordashboard.jsx +++ b/views/src/Pages/Mentordashboard.jsx @@ -1,7 +1,7 @@ import React from 'react'; import Sidebar from '../components/Sidebar'; import { Routes, Route, useLocation } from 'react-router-dom'; -import { IconListDetails, IconCheckupList, IconUser } from '@tabler/icons-react'; +import { IconListDetails, IconCheckupList, IconUser, IconLogout } from '@tabler/icons-react'; import FeedbackRequestQueue from '../Pages/FeedbackQueue'; import AssignedFeedback from '../Pages/AssignedFeedback'; import Account from '../Pages/Account'; @@ -12,6 +12,7 @@ function Mentordashboard(props) { { icon: IconListDetails, label: 'Feedback Queue', to: 'feedbackqueue' }, { icon: IconCheckupList, label: 'Assigned Feedback', to: 'assigned' }, { icon: IconUser, label: 'Account', to: 'account' }, + { icon: IconLogout, label: 'Logout', to: 'logout' } ]; const location = useLocation(); @@ -21,13 +22,9 @@ function Mentordashboard(props) { - } - /> - } /> - - } /> + }/> + } /> + } /> ); diff --git a/views/src/Pages/SingleFeedbackPage.jsx b/views/src/Pages/SingleFeedbackPage.jsx index 6f899d3..8e521f0 100644 --- a/views/src/Pages/SingleFeedbackPage.jsx +++ b/views/src/Pages/SingleFeedbackPage.jsx @@ -178,13 +178,10 @@ function SingleFeedbackPage(props) { )} - {props.user?.mentor && ( - - )} ); } diff --git a/views/src/components/FeedbackCard.jsx b/views/src/components/FeedbackCard.jsx index 0ddc6c8..8b65546 100644 --- a/views/src/components/FeedbackCard.jsx +++ b/views/src/components/FeedbackCard.jsx @@ -24,7 +24,7 @@ function FeedbackCard({ pageTitle, showViewFeedback, data, - isMentor, + notifyMentor, gotoDashboard, isLoading, user @@ -171,7 +171,7 @@ function FeedbackCard({ )} - {!user?.mentor && + {notifyMentor && checkTimeLapse(item.createdAt) && ( - )} ); } diff --git a/views/src/features/Feedbacks/feedbackSlice.js b/views/src/features/Feedbacks/feedbackSlice.js index de636c5..87c5cc2 100644 --- a/views/src/features/Feedbacks/feedbackSlice.js +++ b/views/src/features/Feedbacks/feedbackSlice.js @@ -52,7 +52,7 @@ const addFeedback = createAsyncThunkWithJwt( const assignFeedbackRequest = createAsyncThunkWithJwt( "feedback/assign", - `${baseUrl}/api/feedback/assignFeedBackToMentor/`, + `${baseUrl}/api/feedback/assignFeedBack/`, "post" );