From e7d5527c90d67e3e2719fe84f90925aa8e3c8adc Mon Sep 17 00:00:00 2001 From: Nishant Kaushal <101548649+nishant0708@users.noreply.github.com> Date: Wed, 10 Jul 2024 03:40:29 +0530 Subject: [PATCH] updated --- public/index.html | 3 +- server/controllers/feedbackController.js | 18 ++++++++++++ server/models/studentfeeback.js | 11 ++++++++ server/routes/student.js | 3 ++ src/pages/Login.jsx | 1 + src/pages/MenuPage.jsx | 35 ++++++++++++++++++++++-- 6 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 server/controllers/feedbackController.js create mode 100644 server/models/studentfeeback.js diff --git a/public/index.html b/public/index.html index 8903439..65ac496 100644 --- a/public/index.html +++ b/public/index.html @@ -23,8 +23,7 @@ - \ - + diff --git a/server/controllers/feedbackController.js b/server/controllers/feedbackController.js new file mode 100644 index 0000000..89f12f1 --- /dev/null +++ b/server/controllers/feedbackController.js @@ -0,0 +1,18 @@ +const asyncHandler = require('express-async-handler'); +const Feedback = require("../models/studentfeeback"); + +const submitFeedback = asyncHandler(async (req, res) => { + const { message, canteenId ,userId} = req.body; + + + if (!message || !canteenId) { + res.status(400); + throw new Error('Message and Canteen ID are required'); + } + + const feedback = new Feedback({ message, canteenId, userId }); + await feedback.save(); + res.status(201).json({ message: 'Feedback submitted successfully' }); +}); + +module.exports = { submitFeedback }; \ No newline at end of file diff --git a/server/models/studentfeeback.js b/server/models/studentfeeback.js new file mode 100644 index 0000000..248eba1 --- /dev/null +++ b/server/models/studentfeeback.js @@ -0,0 +1,11 @@ +const mongoose = require('mongoose'); +const Schema = mongoose.Schema; + +const studentfeedbackSchema = new Schema({ + message: { type: String, required: true }, + canteenId: { type: mongoose.Schema.Types.ObjectId, ref: 'Canteen', required: true }, + userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true }, + createdAt: { type: Date, default: Date.now } +}); + +module.exports = mongoose.model('StudentFeedback', studentfeedbackSchema ); diff --git a/server/routes/student.js b/server/routes/student.js index d77e4c3..c127ddd 100644 --- a/server/routes/student.js +++ b/server/routes/student.js @@ -2,6 +2,7 @@ const express = require("express"); const { auth, studentAuth, isCanteen } = require("../middlewares/auth"); const router = express.Router(); const authController = require("../controllers/Auth"); +const feedbackController = require("../controllers/feedbackController"); router.post("/studentSignup", authController.studentSignup); router.post("/studentLogin", authController.studentLogin); @@ -12,6 +13,8 @@ router.get("/resetPassword/:id/:token", authController.verifyLink); router.post("/newPassword/:id/:token", authController.resetPassword); router.get("/studentLogout", studentAuth, authController.studentLogout); router.get("/canteenLogout", auth, authController.canteenLogout); +router.post('/submitFeedback', feedbackController.submitFeedback); + router.post( "/changeStudentPassword", studentAuth, diff --git a/src/pages/Login.jsx b/src/pages/Login.jsx index 46d5a4a..ea1129a 100644 --- a/src/pages/Login.jsx +++ b/src/pages/Login.jsx @@ -75,6 +75,7 @@ function Login() { } if (formData.accountType === "User") { + localStorage.setItem("userid", response?.data?.user?._id) localStorage.setItem("usertoken", response.data.token) window.location.href='/home' diff --git a/src/pages/MenuPage.jsx b/src/pages/MenuPage.jsx index bd4290d..5aa3965 100644 --- a/src/pages/MenuPage.jsx +++ b/src/pages/MenuPage.jsx @@ -9,6 +9,7 @@ import FoodCard from "../components/FoodCard"; import { ThemeContext } from '../themeContext'; + const StarRating = ({ rating, onRatingChange }) => { const [hoverRating, setHoverRating] = useState(0); @@ -37,10 +38,38 @@ function MenuPage() { const [dinner, setDinner] = useState([]); const [selectedCategory, setSelectedCategory] = useState('breakfast'); const [feedback, setFeedback] = useState(""); + const [studentfeedback, setstudentFeedback] = useState(""); const [loading, setLoading] = useState(false); const [searchTerm, setSearchTerm] = useState(""); const [searchResults, setSearchResults] = useState([]); const { theme, toggleTheme } = useContext(ThemeContext); + //feedbacks +const handlestudentFeedbackSubmit = async () => { + if (studentfeedback.trim() === '') { + toast.error("Please provide your feedback before submitting."); + return; + } + + const userId = localStorage.getItem('userid'); // Assuming the user ID is stored in local storage + const canteenId = _id; // Canteen ID from URL params + + try { + await axios.post(`${process.env.REACT_APP_BASE_URL}/submitFeedback`, { + message: studentfeedback, + canteenId, + userId + }, { + headers: { + 'Content-Type': 'application/json' + } + }); + setstudentFeedback(''); + toast.success('Feedback Submitted!'); + } catch (error) { + console.error('Error submitting feedback:', error); + toast.error('Failed to submit feedback. Please try again.'); + } +}; const getBreakfast = async () => { try { @@ -240,11 +269,11 @@ function MenuPage() {