Skip to content

Commit

Permalink
Merge pull request Trisha-tech#88 from Subhash23jan/master
Browse files Browse the repository at this point in the history
Added customer feedback routes
  • Loading branch information
Trisha-tech committed May 15, 2024
2 parents 9c74d06 + 8d238d2 commit 7d04e6e
Show file tree
Hide file tree
Showing 7 changed files with 165 additions and 2 deletions.
48 changes: 48 additions & 0 deletions controllers/adminController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
const catchAsyncErrors = require("../middlewares/catchAsyncErrors");
const Feedback = require("../models/feebackSchema");


//get all feedbacks
exports.retriveFeedbacks=catchAsyncErrors(async(req,res,next)=>{
const feedbacks=await Feedback.find();

res.status(200).json({
success:true,
feedbacks
});

});

//get feedback by id
exports.retriveFeedbacksById=catchAsyncErrors(async(req,res,next)=>{
const feedback=await Feedback.findById(req.params.id);

if(!feedback){
return next(new ErrorHandler("Feedback not found",404));
}

res.status(200).json({
success:true,
feedback
});
});


//update feedback
exports.updateFeeback=catchAsyncErrors(async(req,res,next)=>{
let feedback
feedback=await Feedback.findById(req.params.id);
if(!feedback){
return next(new ErrorHandler("Feedback not found",404));
}
feedback=await Feedback.findByIdAndUpdate(req.params.id,req.body,{
new:true,
runValidators:true,
useFindAndModify:false
});
res.status(200).json({
success:true,
feedback
});
//update feedback
});
37 changes: 37 additions & 0 deletions controllers/customerController.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const catchAsyncErrors = require("../middlewares/catchAsyncErrors.js");
const Customer = require("../models/customerSchema.js");
const Feedback = require("../models/feebackSchema.js");
const sendToken = require("../utils/jwtToken");
const ErrorHandler = require("../utils/errorHandler.js");
const jwt = require("jsonwebtoken");
Expand Down Expand Up @@ -159,3 +160,39 @@ exports.updateProfile = catchAsyncErrors(async (req, res, next) => {
success: true,
});
});


exports.addFeedback = catchAsyncErrors(async (req, res, next) => {
const { feedback,topic } = req.body;
const newFeedback = await Feedback.create({
feedback,
topic,
user: req.body.user._id,
});
try{
// sendMailToAdmin(newFeedback);
res.status(200).json({
success: true,
newFeedback,
});
} catch (error) {
newFeedback.delete();
console.error("Error occurred during feedback creation:", error);
next(error);
}
});
sendMailToAdmin = async (newFeedback) => {
const transporter = nodemailer.createTransport({
service: "gmail",
auth: {
user: process.env.SMTP_EMAIL,
pass: process.env.SMTP_PASSWORD,
},
});
const mailOptions = {
from: process.env.SMTP_EMAIL,
to: 'admin email',
subject: "New Feedback",
text: `New Feedback received from ${newFeedback.user}`,
};
};
3 changes: 3 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,14 @@ app.use(bodyParser.urlencoded({ extended: true }));
const customer = require("./routes/customerRoutes.js");
const product = require("./routes/productRoutes.js");
const order = require("./routes/orderRoutes.js");
const admin = require("./routes/adminRoutes.js");
const { authorizeRoles } = require('./middlewares/auth.js');

app.use("/customer", customer);
app.use("/product", product);
app.use("/order", order);

app.use('admin',authorizeRoles,admin);
// Middleware for Errors
app.use(errorMiddleware);
app.get('/', (req, res) => {
Expand Down
3 changes: 1 addition & 2 deletions middlewares/auth.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,7 @@ exports.isAuthenticatedUser = catchAsyncErrors(async (req, res, next) => {
}

const decodedData = jwt.verify(token, process.env.JWT_SECRET);

req.user = await Customer.findById(decodedData.id);
req.body.user = await Customer.findById(decodedData.id);

next();
});
Expand Down
45 changes: 45 additions & 0 deletions models/feebackSchema.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
const mongoose = require('mongoose');
const { assign } = require('nodemailer/lib/shared');

const feedbackSchema = new mongoose.Schema({
user: {
type: mongoose.Schema.ObjectId,
ref: 'Customer',
required: true
},
topic: {
type: String,
default: 'Customer support'
},
feedback: {
type: String,
required: [true, 'Please Enter Feedback']
},
createdAt: {
type: Date,
default: Date.now
},
assignedTo: {
type: String,
default: 'Customer support'
},
resolvedAt: {
type: Date
},
recentUpdate: {
type: Date
},
resolvedBy: {
type: mongoose.Schema.ObjectId,
ref: 'Admin'
},
resolvedFeedback: {
type: String
},
resolvedStatus: {
type: String,
default: 'Pending'
}
});

module.exports = mongoose.model('Feedback', feedbackSchema);
19 changes: 19 additions & 0 deletions routes/adminRoutes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
const express=require('express');
const { authorizeRoles } = require('../middlewares/auth');
const router=express.Router();
const {retriveFeedbacks,retriveFeedbacksById,updateFeeback}=require('../controllers/adminController');





router.get('/feedback',retriveFeedbacks);


router.get('/feedback/:id',retriveFeedbacksById);

router.post('/feedback/update/:id',updateFeeback);



module.exports=router;
12 changes: 12 additions & 0 deletions routes/customerRoutes.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ const {
updatePassword,
updateProfile,
logoutCustomer,
addFeedback


} = require("../controllers/customerController.js");
const {
Expand Down Expand Up @@ -43,5 +45,15 @@ router.route("/cart/remove-product").delete(deleteCartItem);
router.route("/cart").get(getCartItems);


//cart routes
//instead of sending user as req parameter we can send user id
router.route("/cart/add-product").post(isAuthenticatedUser,addTocart);

router.route("/cart/remove-product").delete(isAuthenticatedUser,deleteCartItem);

router.route("/cart").get(isAuthenticatedUser,getCartItems);


//giving feedback
router.route("/add-feedback").post(isAuthenticatedUser,addFeedback);
module.exports = router;

0 comments on commit 7d04e6e

Please sign in to comment.