From 4598c38a4bbbe1dc8ae52554a0e692c4dc237b45 Mon Sep 17 00:00:00 2001
From: pawan-dot <71133473+pawan-dot@users.noreply.github.com>
Date: Fri, 5 Apr 2024 17:40:41 +0530
Subject: [PATCH 1/3] status change send mail
---
resources/Orders/orderController.js | 369 +++++++++++++++++++++++-
resources/Orders/orderModel.js | 7 +
resources/Orders/orderRoute.js | 6 +-
resources/Products/ProductController.js | 25 +-
resources/Products/ProductModel.js | 5 +
5 files changed, 385 insertions(+), 27 deletions(-)
diff --git a/resources/Orders/orderController.js b/resources/Orders/orderController.js
index 8056833..a973ee1 100644
--- a/resources/Orders/orderController.js
+++ b/resources/Orders/orderController.js
@@ -149,11 +149,188 @@ export const updateOrderStatusById = async (req, res) => {
const currentDate = new Date();
body["status_timeline." + req.body.status] = currentDate;
// if (req.body?.package_weight) body.package_weight = req.body.package_weight;
- const order = await Order.findById(req.params.id);
- // console.log(order);
+ const order = await Order.findById(req.params.id).populate({
+ path: "user",
+ select: "name email -_id",
+ });
+ // console.log("order", order);
// const parentData = { email: order?.parent?.email };
- // if (body.status === "cancelled")
- // await OrderCancelledEmail(parentData.email, order.order_id);
+ if (req.body.status === "cancelled") {
+ body["order_Cancelled_Reason"] = req.body?.ReasonforCancellation;
+ body["iscancelled"] = true;
+ await Order.findByIdAndUpdate(order._id, body);
+ await sendEmail({
+ to: `${order?.user?.email}`, // Change to your recipient
+ from: `${process.env.SEND_EMAIL_FROM}`, // Change to your verified sender
+ subject: `Order #${order?.orderID} Update: Cancellation and Refund Process`,
+ html: ` Hi ${
+ order?.shippingInfo?.first_Name
+ },
+
We hope this message finds you well. We're writing to inform you that your order ${
+ order?.orderID
+ } has been canceled. We understand that circumstances may change, and we're here to assist you throughout the process.
+
+
+ Items :
+
+
+
+ S No. |
+
+ Product Name |
+ Image |
+
+ Quantity |
+ Price |
+ GST Amount |
+
+ SubTotal |
+
+
+
+
+ ${order?.orderItems
+ ?.map(
+ (product, index) => `
+
+ ${
+ index + 1
+ } |
+
+ ${
+ product.name
+ } |
+  |
+
+ ${
+ product.quantity
+ } |
+ ₹${
+ product.price
+ } |
+ ₹${
+ product?.gst_amount
+ } |
+ ₹${
+ product.product_Subtotal
+ } |
+
+
+ `
+ )
+ .join("")}
+
+ Total Amount : |
+ ₹${
+ order?.total_amount
+ } |
+
+
+
+ Cancellation Reason : ${
+ req.body?.ReasonforCancellation
+ }
+ Refund Information: The amount from your canceled order will be processed for a refund. Please allow up to 7 working days for the amount to be transferred back to your original payment method.
+
+ If you have any concerns or further questions, please feel free to reply to this email. We appreciate your understanding and hope to serve you better in the future.
+
+
+ Best regards,
+
+ Team Smellika`,
+ });
+ return res
+ .status(200)
+ .json({ status: "ok", message: "Order status updated successfully!" });
+ } else if (req.body.status === "processing") {
+ await Order.findByIdAndUpdate(order._id, body);
+
+ await sendEmail({
+ to: `${order?.user?.email}`, // Change to your recipient
+ from: `${process.env.SEND_EMAIL_FROM}`, // Change to your verified sender
+ subject: `Your Order #${order?.orderID} is in Processing!`,
+ html: ` Exciting news! Your order #${
+ order?.orderID
+ } has entered the processing phase. Our team is diligently preparing your items for dispatch. Rest assured, we're working hard to ensure everything is perfect for you.
+ Hi ${
+ order?.shippingInfo?.first_Name
+ },
+ Order Status : Processing
+ Order Items :
+
+
+
+ S No. |
+
+ Product Name |
+ Image |
+
+ Quantity |
+ Price |
+ GST Amount |
+
+ SubTotal |
+
+
+
+
+ ${order?.orderItems
+ ?.map(
+ (product, index) => `
+
+ ${
+ index + 1
+ } |
+
+ ${
+ product.name
+ } |
+  |
+
+ ${
+ product.quantity
+ } |
+ ₹${
+ product.price
+ } |
+ ₹${
+ product?.gst_amount
+ } |
+ ₹${
+ product.product_Subtotal
+ } |
+
+
+ `
+ )
+ .join("")}
+
+ Total Amount : |
+ ₹${
+ order?.total_amount
+ } |
+
+
+
+ We'll send you another email with the tracking details as soon as your order is dispatched. If you have any questions or need assistance, feel free to reply to this email.
+ Thank you for choosing Smellika!
+
+ Best regards,
+
+ Team Smellika`,
+ });
+ return res
+ .status(200)
+ .json({ status: "ok", message: "Order status updated successfully!" });
+ }
// else if (body.status === "dispatched") {
// const noBalanceRemaining =
// order?.sales_items?.filter((e) => Number(e?.balance_quantity) > 0)
@@ -176,24 +353,98 @@ export const updateOrderStatusById = async (req, res) => {
// { status: body.status, "status_timeline.delivered": currentDate }
// );
// }
- if (req.body.status === "dispatched") {
+ else if (req.body.status === "dispatched") {
body["courier_name"] = req.body.courierName;
body["courier_tracking_id"] = req.body.TrackingID;
await Order.findByIdAndUpdate(order._id, body);
await sendEmail({
- to: `${req.body.sendemail}`, // Change to your recipient
-
+ to: `${order?.user?.email}`, // Change to your recipient
from: `${process.env.SEND_EMAIL_FROM}`, // Change to your verified sender
+ subject: `Your Order #${order?.orderID} is On Its Way!`,
+ html: ` Hi ${
+ order?.shippingInfo?.first_Name
+ },
+ Exciting news! Your order #${
+ order?.orderID
+ } has been dispatched and is en route to you. 🚚 Here are the details:
- subject: `Your Order is On Its Way!`,
- html: ` Welcome to Smellika - Let the Shopping Begin!
- Hi ${req.body?.customerName},
+ Courier Name : ${
+ req.body.courierName
+ }
+ Courier Tracking ID : ${
+ req.body.TrackingID
+ }
- Great news! Your order has been confirmed. Here are the details
-
- Best regards,
-
- Team Smellika`,
+
+ Items :
+
+
+
+ S No. |
+
+ Product Name |
+ Image |
+
+ Quantity |
+ Price |
+ GST Amount |
+
+ SubTotal |
+
+
+
+
+ ${order?.orderItems
+ ?.map(
+ (product, index) => `
+
+ ${
+ index + 1
+ } |
+
+ ${
+ product.name
+ } |
+  |
+
+ ${
+ product.quantity
+ } |
+ ₹${
+ product.price
+ } |
+ ₹${
+ product?.gst_amount
+ } |
+ ₹${
+ product.product_Subtotal
+ } |
+
+
+ `
+ )
+ .join("")}
+
+ Total Amount : |
+ ₹${
+ order?.total_amount
+ } |
+
+
+
+ Order Status : Dispatched
+ If you have any questions or need assistance, feel free to reply to this email.
+
+Thanks for choosing Smellika! We hope you enjoy your purchase.
+
+
+ Best regards,
+
+ Team Smellika`,
});
return res
.status(200)
@@ -202,11 +453,97 @@ export const updateOrderStatusById = async (req, res) => {
body["isDelivered"] = true;
body["DeliveredDate"] = req.body.DDate;
await Order.findByIdAndUpdate(order._id, body);
+ await sendEmail({
+ to: `${order?.user?.email}`, // Change to your recipient
+ from: `${process.env.SEND_EMAIL_FROM}`, // Change to your verified sender
+ subject: `Your Order #${order?.orderID} Has Been Delivered!`,
+ html: ` Hi ${
+ order?.shippingInfo?.first_Name
+ },
+ Great news! Your order #${
+ order?.orderID
+ } has been successfully delivered to your doorstep. We hope everything is just as you expected!
+ Items :
+
+
+
+ S No. |
+
+ Product Name |
+ Image |
+
+ Quantity |
+ Price |
+ GST Amount |
+
+ SubTotal |
+
+
+
+
+ ${order?.orderItems
+ ?.map(
+ (product, index) => `
+
+ ${
+ index + 1
+ } |
+
+ ${
+ product.name
+ } |
+  |
+
+ ${
+ product.quantity
+ } |
+ ₹${
+ product.price
+ } |
+ ₹${
+ product?.gst_amount
+ } |
+ ₹${
+ product.product_Subtotal
+ } |
+
+
+ `
+ )
+ .join("")}
+
+ Total Amount : |
+ ₹${
+ order?.total_amount
+ } |
+
+
+
+ Delivery Date: ${
+ req.body.DDate
+ }
+ Your satisfaction is our priority, and we'd love to hear about your experience. Please take a moment to share your thoughts by leaving a review. Your feedback is invaluable to us!
+
+ If you have any questions or concerns about your order, feel free to reply to this email.
+
+ Thank you for choosing Smellika! We hope to serve you again soon.
+
+
+
+ Best regards,
+
+ Team Smellika`,
+ });
+
return res
.status(200)
.json({ status: "ok", message: "Order status updated successfully!" });
} else {
- await Order.findByIdAndUpdate(order._id, body);
+ // await Order.findByIdAndUpdate(order._id, body);
// console.log(order);
res
.status(200)
diff --git a/resources/Orders/orderModel.js b/resources/Orders/orderModel.js
index c360aba..b41e027 100644
--- a/resources/Orders/orderModel.js
+++ b/resources/Orders/orderModel.js
@@ -155,6 +155,13 @@ const orderSchema = new mongoose.Schema(
cancelled: { type: Date },
returned: { type: Date },
},
+ iscancelled: {
+ type: Boolean,
+ default: false,
+ },
+ order_Cancelled_Reason: {
+ type: String,
+ },
courier_name: { type: String },
courier_tracking_id: { type: String },
},
diff --git a/resources/Orders/orderRoute.js b/resources/Orders/orderRoute.js
index 89721b8..44cfa4b 100644
--- a/resources/Orders/orderRoute.js
+++ b/resources/Orders/orderRoute.js
@@ -47,11 +47,13 @@ router.route("/user/self").get(isAuthenticatedUser, getUserSelf);
router
.route("/getAll/:status")
.get(isAuthenticatedUser, authorizeRoles("admin"), getAllOrder);
- router
+router
.route("/getAll/")
.get(isAuthenticatedUser, authorizeRoles("admin"), getOrders);
router.route("/getOne/:id").get(isAuthenticatedUser, getSingleOrder);
-router.route("/change/status/:id").patch(updateOrderStatusById);
+router
+ .route("/change/status/:id")
+ .patch(isAuthenticatedUser, authorizeRoles("admin"), updateOrderStatusById);
router
.route("/delete/:id")
diff --git a/resources/Products/ProductController.js b/resources/Products/ProductController.js
index 9fb4748..5553fb2 100644
--- a/resources/Products/ProductController.js
+++ b/resources/Products/ProductController.js
@@ -79,8 +79,8 @@ export const getAllProduct = async (req, res) => {
export const getAllProductsDevicesFirst = async (req, res) => {
try {
// we want products with category name Device to be displayed first, so i have first found the products with category name Devices then made another request to find all products and filtered products with category devices , then merged both arrays so we get devices first then all other categories
-
- const categoryName = 'Devices';
+
+ const categoryName = "Devices";
// Find the category object by name first
const category = await CategoryModel.findOne({ categoryName });
@@ -88,8 +88,10 @@ export const getAllProductsDevicesFirst = async (req, res) => {
throw new Error("Category not found");
}
// products with device category
- const deviceProducts = await Product.find({ category: category._id }).populate('category');
-
+ const deviceProducts = await Product.find({
+ category: category._id,
+ }).populate("category");
+
// all products
const allProducts = await Product.find()
.populate({
@@ -99,11 +101,13 @@ export const getAllProductsDevicesFirst = async (req, res) => {
.sort({
createdAt: -1,
});
- // filtering out products with device category
- const filteredProducts = allProducts.filter((ele) => { return ele.category?.categoryName !== categoryName })
+ // filtering out products with device category
+ const filteredProducts = allProducts.filter((ele) => {
+ return ele.category?.categoryName !== categoryName;
+ });
// merging both deviceProcuts and filtered products
- const product = deviceProducts.concat(filteredProducts)
+ const product = deviceProducts.concat(filteredProducts);
if (product) {
return res.status(200).json({
success: true,
@@ -240,10 +244,10 @@ export const updateProduct = async (req, res) => {
category,
image,
gst_amount,
+ product_Status,
gst,
total_amount,
} = req.body;
-
try {
// Prepare an array for the images
const jsonArray = JSON.parse(image);
@@ -286,6 +290,7 @@ export const updateProduct = async (req, res) => {
$set: {
name,
description,
+ product_Status,
price,
category,
image: updatedImages,
@@ -388,7 +393,9 @@ export const getProductsByCategory = async (req, res) => {
if (!category) {
throw new Error("Category not found");
}
- const products = await Product.find({ category: category._id }).populate('category');
+ const products = await Product.find({ category: category._id }).populate(
+ "category"
+ );
// console.log(products);
if (products && products.length > 0) {
diff --git a/resources/Products/ProductModel.js b/resources/Products/ProductModel.js
index 4780c94..8d048b8 100644
--- a/resources/Products/ProductModel.js
+++ b/resources/Products/ProductModel.js
@@ -51,6 +51,11 @@ const productSchema = new Schema(
},
},
],
+ product_Status: {
+ type: String,
+ enum: ["Active", "Inactive"],
+ default: "Active",
+ },
addedBy: {
type: Schema.Types.ObjectId,
ref: "User",
From 6fa092e82ee3e3a73c551c7c65618c4eac59f848 Mon Sep 17 00:00:00 2001
From: syedmujahidahmed
Date: Wed, 10 Apr 2024 17:04:07 +0530
Subject: [PATCH 2/3] added home page panels
---
app.js | 6 +
resources/Panels/Panel1Model.js | 38 ++
resources/Panels/Panel2Model.js | 38 ++
resources/Panels/Panel3Model.js | 38 ++
resources/Panels/Panel4Model.js | 38 ++
resources/Panels/PanelController.js | 547 ++++++++++++++++++++++++++++
resources/Panels/PanelRoutes.js | 59 +++
7 files changed, 764 insertions(+)
create mode 100644 resources/Panels/Panel1Model.js
create mode 100644 resources/Panels/Panel2Model.js
create mode 100644 resources/Panels/Panel3Model.js
create mode 100644 resources/Panels/Panel4Model.js
create mode 100644 resources/Panels/PanelController.js
create mode 100644 resources/Panels/PanelRoutes.js
diff --git a/app.js b/app.js
index b93919e..6adea88 100644
--- a/app.js
+++ b/app.js
@@ -163,6 +163,8 @@ import SeoRoute from "./resources/SEO&Analytics/SEORouter.js";
import AffiliateRoute from "./resources/Affiliate&Coupon/Affiliate/AffiliateRoute.js";
//Blog Routes
import BlogRoute from "./resources/Blog/BlogRoute.js";
+// Panel Routes
+import PanelRoute from "./resources/Panels/PanelRoutes.js"
//Coupon Routes
import CouponRoute from "./resources/Affiliate&Coupon/Coupon/CouponRoute.js";
//short urls
@@ -222,6 +224,10 @@ app.use("/api/v1/affiliate", AffiliateRoute);
app.use("/api/v1/coupon", CouponRoute);
//Blog
app.use("/api/v1/blog", BlogRoute);
+// panels
+app.use("/api/panel", PanelRoute);
+
+
//config specialty
// app.use("/api/config/specialty", SpecialtiesRouter);
//specialties
diff --git a/resources/Panels/Panel1Model.js b/resources/Panels/Panel1Model.js
new file mode 100644
index 0000000..93a3d54
--- /dev/null
+++ b/resources/Panels/Panel1Model.js
@@ -0,0 +1,38 @@
+import mongoose from "mongoose";
+const { Schema, model } = mongoose;
+
+const panel1Schema = new Schema(
+ {
+ title: {
+ type: String,
+ default: ''
+ },
+ content: {
+ type: String,
+ default: ''
+ },
+ image: {
+ public_id: {
+ type: String,
+ },
+ url: {
+ type: String,
+ },
+ },
+ addedBy: {
+ type: mongoose.Schema.ObjectId,
+ ref: "User",
+ required: true,
+ },
+ displayPanel: {
+ type: Boolean,
+ default: false
+ }
+ },
+ { timestamps: true }
+);
+
+export const Panel1 = model(
+ "Panel1",
+ panel1Schema
+);
diff --git a/resources/Panels/Panel2Model.js b/resources/Panels/Panel2Model.js
new file mode 100644
index 0000000..c669721
--- /dev/null
+++ b/resources/Panels/Panel2Model.js
@@ -0,0 +1,38 @@
+import mongoose from "mongoose";
+const { Schema, model } = mongoose;
+
+const panel2Schema = new Schema(
+ {
+ title: {
+ type: String,
+ default: ''
+ },
+ content: {
+ type: String,
+ default: ''
+ },
+ image: {
+ public_id: {
+ type: String,
+ },
+ url: {
+ type: String,
+ },
+ },
+ addedBy: {
+ type: mongoose.Schema.ObjectId,
+ ref: "User",
+ required: true,
+ },
+ displayPanel: {
+ type: Boolean,
+ default: false
+ }
+ },
+ { timestamps: true }
+);
+
+export const Panel2 = model(
+ "Panel2",
+ panel2Schema
+);
diff --git a/resources/Panels/Panel3Model.js b/resources/Panels/Panel3Model.js
new file mode 100644
index 0000000..e5a573d
--- /dev/null
+++ b/resources/Panels/Panel3Model.js
@@ -0,0 +1,38 @@
+import mongoose from "mongoose";
+const { Schema, model } = mongoose;
+
+const panel3Schema = new Schema(
+ {
+ title: {
+ type: String,
+ default: ''
+ },
+ content: {
+ type: String,
+ default: ''
+ },
+ image: {
+ public_id: {
+ type: String,
+ },
+ url: {
+ type: String,
+ },
+ },
+ addedBy: {
+ type: mongoose.Schema.ObjectId,
+ ref: "User",
+ required: true,
+ },
+ displayPanel: {
+ type: Boolean,
+ default: false
+ }
+ },
+ { timestamps: true }
+);
+
+export const Panel3 = model(
+ "Panel3",
+ panel3Schema
+);
diff --git a/resources/Panels/Panel4Model.js b/resources/Panels/Panel4Model.js
new file mode 100644
index 0000000..1932078
--- /dev/null
+++ b/resources/Panels/Panel4Model.js
@@ -0,0 +1,38 @@
+import mongoose from "mongoose";
+const { Schema, model } = mongoose;
+
+const panel4Schema = new Schema(
+ {
+ title: {
+ type: String,
+ default: ''
+ },
+ content: {
+ type: String,
+ default: ''
+ },
+ image: {
+ public_id: {
+ type: String,
+ },
+ url: {
+ type: String,
+ },
+ },
+ addedBy: {
+ type: mongoose.Schema.ObjectId,
+ ref: "User",
+ required: true,
+ },
+ displayPanel: {
+ type: Boolean,
+ default: false
+ }
+ },
+ { timestamps: true }
+);
+
+export const Panel4 = model(
+ "Panel4",
+ panel4Schema
+);
diff --git a/resources/Panels/PanelController.js b/resources/Panels/PanelController.js
new file mode 100644
index 0000000..cd2a058
--- /dev/null
+++ b/resources/Panels/PanelController.js
@@ -0,0 +1,547 @@
+import cloudinary from "../../Utils/cloudinary.js";
+import { Panel1 } from "./Panel1Model.js";
+import { Panel2 } from "./Panel2Model.js";
+import { Panel3 } from "./Panel3Model.js";
+import { Panel4 } from "./Panel4Model.js";
+
+
+export const AddPanel1 = async (req, res) => {
+ try {
+ if (!req?.user) return res.status(400).json({ message: "please login !" });
+ // console.log(req?.user)
+
+ req.body.user = req.user._id;
+ const { content,title,displayPanel} = req.body;
+ let image; // To store Cloudinary image details
+
+ if (req.files && req.files.image) {
+ const imageFile = req.files.image;
+ const result = await cloudinary.v2.uploader.upload(
+ imageFile.tempFilePath,
+ {
+ folder: "smellica/blog",
+ }
+ );
+
+ image = {
+ public_id: result.public_id,
+ url: result.secure_url,
+ };
+ }
+
+ // Create the blog post
+ const panel1 = await Panel1.create({
+ title,
+ image,
+ content,
+ displayPanel,
+ addedBy: req.user._id,
+ });
+
+
+
+ res.status(201).json({
+ success: true,
+ panel1,
+ message: "Added successfully",
+ });
+ } catch (error) {
+ console.error(error)
+ res.status(500).json({
+ success: false,
+ message: error.message ? error.message : "Something went Wrong",
+ });
+ }
+};
+
+export const getPanel1 = async (req, res) => {
+ try {
+ // if (!req?.user) return res.status(400).json({ message: "please login !" });
+ // console.log(req?.user)
+
+ const panel1 = await Panel1.find();
+
+ res.status(200).json({
+ success: true,
+ panel1,
+ message: "Found successfully ",
+ });
+ } catch (error) {
+ res.status(500).json({
+ success: false,
+ message: error.message ? error.message : "Something went Wrong",
+ });
+ }
+};
+
+export const updatePanel1 = async (req, res) => {
+ try {
+ if (!req?.user) return res.status(400).json({ message: "please login !" });
+
+ // Check if the user is authenticated
+ if (!req.user) {
+ return res.status(400).json({ message: "Please login!" });
+ }
+
+ // Destructure request body
+ const { title, content,displayPanel } = req.body;
+
+ // Prepare an object for the updated testimonial data
+ const updatedPanel1Data = {
+ title,
+ content,
+ displayPanel
+ };
+
+ // Check if files are uploaded
+ if (req.files && req.files.image) {
+ // If image file is uploaded, upload it to cloudinary
+ const uploadedImage = req.files.image;
+ const result = await cloudinary.v2.uploader.upload(
+ uploadedImage.tempFilePath,
+ {
+ folder: "smellica/blog",
+ }
+ );
+
+ // Prepare the image object with public_id and url
+ const image = {
+ public_id: result.public_id,
+ url: result.secure_url,
+ };
+
+ // Assign the uploaded image to the Blog's image field
+ updatedPanel1Data.image = image;
+ }
+ const modifiedPanel = await Panel1.findOneAndUpdate(
+ { _id: req.params.id },
+ { $set: updatedPanel1Data },
+ { new: true }
+ );
+
+ return res.status(200).json({
+ success: true,
+ ModifyBlog: modifiedPanel,
+ });
+
+
+ } catch (error) {
+ res.status(500).json({
+ success: false,
+ message: error.message ? error.message : "Something went Wrong",
+ });
+ }
+};
+
+
+
+export const AddPanel2 = async (req, res) => {
+ try {
+ if (!req?.user) return res.status(400).json({ message: "please login !" });
+ // console.log(req?.user)
+
+ req.body.user = req.user._id;
+ const { content,title,displayPanel} = req.body;
+ let image; // To store Cloudinary image details
+
+ if (req.files && req.files.image) {
+ const imageFile = req.files.image;
+ const result = await cloudinary.v2.uploader.upload(
+ imageFile.tempFilePath,
+ {
+ folder: "smellica/blog",
+ }
+ );
+
+ image = {
+ public_id: result.public_id,
+ url: result.secure_url,
+ };
+ }
+
+ // Create the blog post
+ const panel2 = await Panel2.create({
+ title,
+ image,
+ content,
+ displayPanel,
+ addedBy: req.user._id,
+ });
+
+
+
+ res.status(201).json({
+ success: true,
+ panel2,
+ message: "Added successfully",
+ });
+ } catch (error) {
+ console.error(error)
+ res.status(500).json({
+ success: false,
+ message: error.message ? error.message : "Something went Wrong",
+ });
+ }
+};
+
+export const getPanel2 = async (req, res) => {
+ try {
+ // if (!req?.user) return res.status(400).json({ message: "please login !" });
+ // console.log(req?.user)
+
+ const panel2 = await Panel2.find();
+
+ res.status(200).json({
+ success: true,
+ panel2,
+ message: "Found successfully ",
+ });
+ } catch (error) {
+ res.status(500).json({
+ success: false,
+ message: error.message ? error.message : "Something went Wrong",
+ });
+ }
+};
+
+export const updatePanel2 = async (req, res) => {
+ try {
+ if (!req?.user) return res.status(400).json({ message: "please login !" });
+
+ // Check if the user is authenticated
+ if (!req.user) {
+ return res.status(400).json({ message: "Please login!" });
+ }
+
+ // Destructure request body
+ const { title, content,displayPanel } = req.body;
+
+ // Prepare an object for the updated testimonial data
+ const updatedPanel2Data = {
+ title,
+ content,
+ displayPanel
+ };
+
+ // Check if files are uploaded
+ if (req.files && req.files.image) {
+ // If image file is uploaded, upload it to cloudinary
+ const uploadedImage = req.files.image;
+ const result = await cloudinary.v2.uploader.upload(
+ uploadedImage.tempFilePath,
+ {
+ folder: "smellica/blog",
+ }
+ );
+
+ // Prepare the image object with public_id and url
+ const image = {
+ public_id: result.public_id,
+ url: result.secure_url,
+ };
+
+ // Assign the uploaded image to the Blog's image field
+ updatedPanel2Data.image = image;
+ }
+ const modifiedPanel = await Panel2.findOneAndUpdate(
+ { _id: req.params.id },
+ { $set: updatedPanel2Data },
+ { new: true }
+ );
+
+ return res.status(200).json({
+ success: true,
+ ModifyBlog: modifiedPanel,
+ });
+
+
+ } catch (error) {
+ res.status(500).json({
+ success: false,
+ message: error.message ? error.message : "Something went Wrong",
+ });
+ }
+};
+
+
+
+
+export const AddPanel3 = async (req, res) => {
+ try {
+ if (!req?.user) return res.status(400).json({ message: "please login !" });
+ // console.log(req?.user)
+
+ req.body.user = req.user._id;
+ const { content,title,displayPanel} = req.body;
+ let image; // To store Cloudinary image details
+
+ if (req.files && req.files.image) {
+ const imageFile = req.files.image;
+ const result = await cloudinary.v2.uploader.upload(
+ imageFile.tempFilePath,
+ {
+ folder: "smellica/blog",
+ }
+ );
+
+ image = {
+ public_id: result.public_id,
+ url: result.secure_url,
+ };
+ }
+
+ // Create the blog post
+ const panel3 = await Panel3.create({
+ title,
+ image,
+ content,
+ displayPanel,
+ addedBy: req.user._id,
+ });
+
+
+
+ res.status(201).json({
+ success: true,
+ panel3,
+ message: "Added successfully",
+ });
+ } catch (error) {
+ console.error(error)
+ res.status(500).json({
+ success: false,
+ message: error.message ? error.message : "Something went Wrong",
+ });
+ }
+};
+
+export const getPanel3 = async (req, res) => {
+ try {
+ // if (!req?.user) return res.status(400).json({ message: "please login !" });
+ // console.log(req?.user)
+
+ const panel3 = await Panel3.find();
+
+ res.status(200).json({
+ success: true,
+ panel3,
+ message: "Found successfully ",
+ });
+ } catch (error) {
+ res.status(500).json({
+ success: false,
+ message: error.message ? error.message : "Something went Wrong",
+ });
+ }
+};
+
+export const updatePanel3 = async (req, res) => {
+ try {
+ if (!req?.user) return res.status(400).json({ message: "please login !" });
+
+ // Check if the user is authenticated
+ if (!req.user) {
+ return res.status(400).json({ message: "Please login!" });
+ }
+
+ // Destructure request body
+ const { title, content,displayPanel } = req.body;
+
+ // Prepare an object for the updated testimonial data
+ const updatedPanel3Data = {
+ title,
+ content,
+ displayPanel
+ };
+
+ // Check if files are uploaded
+ if (req.files && req.files.image) {
+ // If image file is uploaded, upload it to cloudinary
+ const uploadedImage = req.files.image;
+ const result = await cloudinary.v2.uploader.upload(
+ uploadedImage.tempFilePath,
+ {
+ folder: "smellica/blog",
+ }
+ );
+
+ // Prepare the image object with public_id and url
+ const image = {
+ public_id: result.public_id,
+ url: result.secure_url,
+ };
+
+ // Assign the uploaded image to the Blog's image field
+ updatedPanel3Data.image = image;
+ }
+ const modifiedPanel = await Panel3.findOneAndUpdate(
+ { _id: req.params.id },
+ { $set: updatedPanel3Data },
+ { new: true }
+ );
+
+ return res.status(200).json({
+ success: true,
+ ModifyBlog: modifiedPanel,
+ });
+
+
+ } catch (error) {
+ res.status(500).json({
+ success: false,
+ message: error.message ? error.message : "Something went Wrong",
+ });
+ }
+};
+export const AddPanel4 = async (req, res) => {
+ try {
+ if (!req?.user) return res.status(400).json({ message: "please login !" });
+ // console.log(req?.user)
+
+ req.body.user = req.user._id;
+ const { content,title,displayPanel} = req.body;
+ let image; // To store Cloudinary image details
+
+ if (req.files && req.files.image) {
+ const imageFile = req.files.image;
+ const result = await cloudinary.v2.uploader.upload(
+ imageFile.tempFilePath,
+ {
+ folder: "smellica/blog",
+ }
+ );
+
+ image = {
+ public_id: result.public_id,
+ url: result.secure_url,
+ };
+ }
+
+ // Create the blog post
+ const panel4 = await Panel4.create({
+ title,
+ image,
+ content,
+ displayPanel,
+ addedBy: req.user._id,
+ });
+
+
+
+ res.status(201).json({
+ success: true,
+ panel4,
+ message: "Added successfully",
+ });
+ } catch (error) {
+ console.error(error)
+ res.status(500).json({
+ success: false,
+ message: error.message ? error.message : "Something went Wrong",
+ });
+ }
+};
+
+export const getPanel4 = async (req, res) => {
+ try {
+ // if (!req?.user) return res.status(400).json({ message: "please login !" });
+ // console.log(req?.user)
+
+ const panel4 = await Panel4.find();
+
+ res.status(200).json({
+ success: true,
+ panel4,
+ message: "Found successfully ",
+ });
+ } catch (error) {
+ res.status(500).json({
+ success: false,
+ message: error.message ? error.message : "Something went Wrong",
+ });
+ }
+};
+
+export const updatePanel4 = async (req, res) => {
+ try {
+ if (!req?.user) return res.status(400).json({ message: "please login !" });
+
+ // Check if the user is authenticated
+ if (!req.user) {
+ return res.status(400).json({ message: "Please login!" });
+ }
+
+ // Destructure request body
+ const { title, content,displayPanel } = req.body;
+
+ // Prepare an object for the updated testimonial data
+ const updatePanel4Data = {
+ title,
+ content,
+ displayPanel
+ };
+
+ // Check if files are uploaded
+ if (req.files && req.files.image) {
+ // If image file is uploaded, upload it to cloudinary
+ const uploadedImage = req.files.image;
+ const result = await cloudinary.v2.uploader.upload(
+ uploadedImage.tempFilePath,
+ {
+ folder: "smellica/blog",
+ }
+ );
+
+ // Prepare the image object with public_id and url
+ const image = {
+ public_id: result.public_id,
+ url: result.secure_url,
+ };
+
+ // Assign the uploaded image to the Blog's image field
+ updatePanel4Data.image = image;
+ }
+ const modifiedPanel = await Panel4.findOneAndUpdate(
+ { _id: req.params.id },
+ { $set: updatePanel4Data },
+ { new: true }
+ );
+
+ return res.status(200).json({
+ success: true,
+ ModifyBlog: modifiedPanel,
+ });
+
+
+ } catch (error) {
+ res.status(500).json({
+ success: false,
+ message: error.message ? error.message : "Something went Wrong",
+ });
+ }
+};
+
+export const deleteImageFromCloudinary = async (req, res) => {
+ const { public_id } = req.params;
+
+ try {
+ if (!public_id) {
+ return res.status(400).json({
+ success: false,
+ msg: "Please Provide Product ID!",
+ });
+ }
+ const response = await cloudinary.v2.uploader.destroy(public_id);
+ if (response) {
+ res.status(200).json({
+ success: true,
+ msg: "Deleted Successfully!!",
+ });
+ }
+ } catch (error) {
+ res.status(500).json({
+ success: false,
+ msg: error.message ? error.message : "Something went wrong!",
+ });
+ }
+ };
\ No newline at end of file
diff --git a/resources/Panels/PanelRoutes.js b/resources/Panels/PanelRoutes.js
new file mode 100644
index 0000000..bec781a
--- /dev/null
+++ b/resources/Panels/PanelRoutes.js
@@ -0,0 +1,59 @@
+import express from "express";
+
+import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
+import { AddPanel1, AddPanel2, AddPanel3, AddPanel4, deleteImageFromCloudinary, getPanel1, getPanel2, getPanel3, getPanel4, updatePanel1, updatePanel2, updatePanel3, updatePanel4 } from "./PanelController.js";
+
+const router = express.Router();
+
+router
+ .route("/panel1/add")
+ .post(isAuthenticatedUser, authorizeRoles("admin"), AddPanel1);
+router
+ .route("/panel1/get")
+ .get(getPanel1);
+
+router
+ .route("/panel1/update/:id")
+ .patch(isAuthenticatedUser, authorizeRoles("admin"), updatePanel1);
+
+router
+ .route("/panel2/add")
+ .post(isAuthenticatedUser, authorizeRoles("admin"), AddPanel2);
+router
+ .route("/panel2/get")
+ .get(getPanel2);
+
+router
+ .route("/panel2/update/:id")
+ .patch(isAuthenticatedUser, authorizeRoles("admin"), updatePanel2);
+
+router
+ .route("/panel3/add")
+ .post(isAuthenticatedUser, authorizeRoles("admin"), AddPanel3);
+router
+ .route("/panel3/get")
+ .get(getPanel3);
+
+router
+ .route("/panel3/update/:id")
+ .patch(isAuthenticatedUser, authorizeRoles("admin"), updatePanel3);
+
+router
+ .route("/panel4/add")
+ .post(isAuthenticatedUser, authorizeRoles("admin"), AddPanel4);
+router
+ .route("/panel4/get")
+ .get(getPanel4);
+
+router
+ .route("/panel4/update/:id")
+ .patch(isAuthenticatedUser, authorizeRoles("admin"), updatePanel4);
+
+router
+ .route("/deleteImage/jatinMor/panel/:public_id")
+ .delete(
+ isAuthenticatedUser,
+ authorizeRoles("admin"),
+ deleteImageFromCloudinary
+ );
+export default router;
\ No newline at end of file
From f84b8d769a718b094f12907444f8031cca2a1032 Mon Sep 17 00:00:00 2001
From: Sibunnayak
Date: Thu, 11 Apr 2024 11:13:49 +0530
Subject: [PATCH 3/3] order get all controller change
---
resources/Orders/orderController.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/resources/Orders/orderController.js b/resources/Orders/orderController.js
index 8056833..2b106b6 100644
--- a/resources/Orders/orderController.js
+++ b/resources/Orders/orderController.js
@@ -39,7 +39,7 @@ export const getAllOrder = async (req, res) => {
export const getOrders = async (req, res) => {
try {
const order = await Order.find({
- payment_status: "success",
+ // payment_status: "success",
})
.populate({
path: "user",