This commit is contained in:
pawan-dot 2024-05-03 16:39:02 +05:30
commit 422230ee05
35 changed files with 1152 additions and 248 deletions

View File

@ -16,6 +16,7 @@ const sendToken = (user, statusCode, res) => {
success: true,
userId: user._id,
// userName: user.name,
// userEmail: user.email,
// userPhone: user.phone,

7
app.js
View File

@ -164,13 +164,14 @@ import AffiliateRoute from "./resources/Affiliate&Coupon/Affiliate/AffiliateRout
//Blog Routes
import BlogRoute from "./resources/Blog/BlogRoute.js";
// Panel Routes
import PanelRoute from "./resources/Panels/PanelRoutes.js"
import PanelRoute from "./resources/Panels/PanelRoutes.js";
//Coupon Routes
import CouponRoute from "./resources/Affiliate&Coupon/Coupon/CouponRoute.js";
//short urls
// import ShortUrlRouter from "./resources/Businesses/Short_Urls/ShortUrlRoute.js";
//support Ticket
import SupportRouter from "./resources/Supports/supportRoute.js";
// Point of Sale
app.use("/api/v1/", user);
//Product
@ -227,7 +228,6 @@ app.use("/api/v1/blog", BlogRoute);
// panels
app.use("/api/panel", PanelRoute);
//config specialty
// app.use("/api/config/specialty", SpecialtiesRouter);
//specialties
@ -237,5 +237,8 @@ app.use("/api/panel", PanelRoute);
//short urls
// app.use("/api/shorturl", ShortUrlRouter);
//Support
// Email CMS
// app.use("/api", RegisterEmail);
app.use("/api", SupportRouter);
export default app;

9
package-lock.json generated
View File

@ -5417,7 +5417,8 @@
"cloudinary-core": {
"version": "2.12.3",
"resolved": "https://registry.npmjs.org/cloudinary-core/-/cloudinary-core-2.12.3.tgz",
"integrity": "sha512-Ll4eDzcrIVn4zCttMh3Mdi+KNz07p5EEjBT2PQSRx8Eok1lKPt3uBBenOk/w88RKK3B8SFIWcEe/mN4BHQ0p8A=="
"integrity": "sha512-Ll4eDzcrIVn4zCttMh3Mdi+KNz07p5EEjBT2PQSRx8Eok1lKPt3uBBenOk/w88RKK3B8SFIWcEe/mN4BHQ0p8A==",
"requires": {}
},
"color-convert": {
"version": "2.0.1",
@ -6660,7 +6661,8 @@
"multer-storage-cloudinary": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/multer-storage-cloudinary/-/multer-storage-cloudinary-4.0.0.tgz",
"integrity": "sha512-25lm9R6o5dWrHLqLvygNX+kBOxprzpmZdnVKH4+r68WcfCt8XV6xfQaMuAg+kUE5Xmr8mJNA4gE0AcBj9FJyWA=="
"integrity": "sha512-25lm9R6o5dWrHLqLvygNX+kBOxprzpmZdnVKH4+r68WcfCt8XV6xfQaMuAg+kUE5Xmr8mJNA4gE0AcBj9FJyWA==",
"requires": {}
},
"mute-stream": {
"version": "0.0.8",
@ -7893,7 +7895,8 @@
"ws": {
"version": "7.4.6",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz",
"integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A=="
"integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==",
"requires": {}
},
"xregexp": {
"version": "2.0.0",

View File

@ -20,49 +20,49 @@ const router = express.Router();
router.post(
"/create",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
createAffiliate
);
router.get(
"/getall",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
listAllAffiliate
);
router.get(
"/getone/:id",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
getOneAffiliate
);
router.patch(
"/edit/:id",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
editAffiliate
);
router.patch(
"/suspend",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
suspendAffiliate
);
router.post(
"/pay/:id",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
payAffiliate
);
router.get(
"/getpay/:id",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
getOneAffiliateForPay
);
router.get(
"/history/:id",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
affiliatePayHistory
);

View File

@ -20,38 +20,38 @@ const router = express.Router();
router.get(
"/getall",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
listAllCoupon
);
router.patch(
"/create",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
createCoupon
);
router.get(
"/getaffiliate",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
listAffiliateCoupon
);
router.patch(
"/edit/:id",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
editCoupon
);
router.get(
"/getone/:id",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
getOneCoupon
);
router.get("/validcoupon/:coupon", validateCoupon);
router.patch(
"/suspend",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
suspendCoupon
);
router.patch(
@ -69,7 +69,7 @@ router.patch(
router.get(
"/history/:id",
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
couponPayHistory
);

View File

@ -11,13 +11,21 @@ const router = express.Router();
router
.route("/add")
.post(isAuthenticatedUser, authorizeRoles("admin"), addBanner);
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), addBanner);
router.route("/getBanners").get(getBanner);
router
.route("/update/:_id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateBanner);
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updateBanner
);
router
.route("/delete/:_id")
.delete(isAuthenticatedUser, authorizeRoles("admin"), deleteBanner);
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteBanner
);
export default router;

View File

@ -1,30 +1,33 @@
import express from "express";
import { createBlog, getAllBlog, getOneBlog, deleteBlog, deleteImageFromCloudinary, updateBlog } from "./BlogController.js";
import {
createBlog,
getAllBlog,
getOneBlog,
deleteBlog,
deleteImageFromCloudinary,
updateBlog,
} from "./BlogController.js";
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
const router = express.Router();
router
.route("/create")
.post(isAuthenticatedUser, authorizeRoles("admin"), createBlog);
router
.route("/getallblog")
.get(getAllBlog);
router
.route("/getoneblog/:id")
.get(getOneBlog);
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), createBlog);
router.route("/getallblog").get(getAllBlog);
router.route("/getoneblog/:id").get(getOneBlog);
router
.route("/deleteblog/:id")
.delete(isAuthenticatedUser, authorizeRoles("admin"), deleteBlog);
.delete(isAuthenticatedUser, authorizeRoles("admin", "Employee"), deleteBlog);
router
.route("/deleteImage/jatinMor/Blog/:public_id")
.delete(
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
deleteImageFromCloudinary
);
router
router
.route("/updateblog/:id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateBlog);
.patch(isAuthenticatedUser, authorizeRoles("admin", "Employee"), updateBlog);
export default router;

View File

@ -10,13 +10,21 @@ const router = express.Router();
router
.route("/add")
.post(isAuthenticatedUser, authorizeRoles("admin"), addCategory);
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), addCategory);
router.route("/getCategories").get(getCategories);
router
.route("/update/:_id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateCategory);
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updateCategory
);
router
.route("/delete/:_id")
.delete(isAuthenticatedUser, authorizeRoles("admin"), deleteCategory);
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteCategory
);
export default router;

View File

@ -14,7 +14,7 @@ import {
updateRefundPolicy,
AddAboutUs,
getAboutUs,
updateAboutUs
updateAboutUs,
} from "./ContentController.js";
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
@ -22,45 +22,69 @@ const router = express.Router();
router
.route("/terms-and-conditions")
.post(isAuthenticatedUser, authorizeRoles("admin"), AddTermsAndConditions);
.post(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
AddTermsAndConditions
);
router.route("/terms-and-conditions").get(getTermsAndCondition);
router
.route("/terms-and-condition-update")
.patch(
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
updateTermsAndConditions
);
router
.route("/privacy-and-policy")
.post(isAuthenticatedUser, authorizeRoles("admin"), AddPrivacyAndPolicy);
.post(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
AddPrivacyAndPolicy
);
router.route("/privacy-and-policy").get(getPrivacyPolicy);
router
.route("/privacy-and-policy-update")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updatePrivacyPolicy);
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updatePrivacyPolicy
);
router
.route("/shipping-and-policy")
.post(isAuthenticatedUser, authorizeRoles("admin"), AddShipping);
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), AddShipping);
router.route("/shipping-and-policy").get(getShipping);
router
.route("/shipping-and-policy-update")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateShipping);
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updateShipping
);
//refund Policy
router.route("/refund-policy").get(getRefundPolicy);
router
.route("/refund-policy")
.post(isAuthenticatedUser, authorizeRoles("admin"), RefundPolicy);
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), RefundPolicy);
router
.route("/refund-policy-update")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateRefundPolicy);
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updateRefundPolicy
);
//about us
router
.route("/about-us")
.post(isAuthenticatedUser, authorizeRoles("admin"), AddAboutUs);
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), AddAboutUs);
router.route("/about-us").get(getAboutUs);
router
.route("/about-us-update")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateAboutUs);
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updateAboutUs
);
export default router;

View File

@ -1,18 +1,16 @@
import express from 'express'
import express from "express";
import { AddNewFlight, FindAllFlight } from "./DepartureController.js";
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
const router = express.Router()
router.route("/flight/new").post(isAuthenticatedUser, authorizeRoles("admin"), AddNewFlight)
router.route("/flight/getAll").get(isAuthenticatedUser, authorizeRoles("admin"), FindAllFlight)
const router = express.Router();
router
.route("/flight/new")
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), AddNewFlight);
router
.route("/flight/getAll")
.get(isAuthenticatedUser, authorizeRoles("admin", "Employee"), FindAllFlight);
// router.route("/product/getAll/").get(getAllProduct)
export default router
export default router;

View File

@ -11,14 +11,14 @@
// router
// .route("/add")
// .post(isAuthenticatedUser, authorizeRoles("admin"), addDesign);
// .post(isAuthenticatedUser,authorizeRoles("admin", "Employee"), addDesign);
// router.route("/getDesigns").get(getDesign);
// router
// .route("/update/:_id")
// .patch(isAuthenticatedUser, authorizeRoles("admin"), updateDesign);
// .patch(isAuthenticatedUser,authorizeRoles("admin", "Employee"), updateDesign);
// router
// .route("/delete/:_id")
// .delete(isAuthenticatedUser, authorizeRoles("admin"), deleteDesign);
// .delete(isAuthenticatedUser,authorizeRoles("admin", "Employee"), deleteDesign);
// export default router;
import express from "express";
@ -61,13 +61,21 @@ const imageStorage = multer.diskStorage({
router
.route("/add")
.post(isAuthenticatedUser, authorizeRoles("admin"), addDesign);
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), addDesign);
router.route("/getDesigns").get(getDesign);
router
.route("/update/:_id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateDesign);
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updateDesign
);
router
.route("/delete/:_id")
.delete(isAuthenticatedUser, authorizeRoles("admin"), deleteDesign);
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteDesign
);
export default router;

View File

@ -0,0 +1,21 @@
import {
authorizeRoles,
isAuthenticatedUser,
} from "../../../middlewares/auth.js";
import {
GetRegisterEamilData,
RegisterEmailSend,
} from "./registerEmailController.js";
import express from "express";
const router = express.Router();
router
.route("/register-email")
.post(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
RegisterEmailSend
);
router.route("/get-email-data").get(GetRegisterEamilData);
export default router;

View File

@ -0,0 +1,64 @@
import { RegisterEmail } from "./registerEmailModal.js";
export const RegisterEmailSend = 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 registerEmailFindDoc = await RegisterEmail.find();
if (registerEmailFindDoc.length === 0) {
const registerEmaildata = await RegisterEmail.create({
subject: req.body.subject,
description: req.body.description,
addedBy: req.user._id,
});
if (registerEmaildata) {
return res.status(200).json({
success: true,
registerEmaildata,
message: "Added successfully",
});
}
} else {
const updateEmailData = await RegisterEmail.updateOne({
subject: req.body.subject,
description: req.body.description,
addedBy: req.user._id,
});
if (updateEmailData) {
return res.status(200).json({
success: true,
RegisterEmaildata: updateEmailData,
message: "updated successfully ",
});
}
}
} catch (error) {
res.status(500).json({
success: false,
message: error.message ? error.message : "Something went Wrong",
});
}
};
export const GetRegisterEamilData = async (req, res) => {
try {
// if (!req?.user) return res.status(400).json({ message: "please login !" });
// console.log(req?.user)
const registerEmaildata = await RegisterEmail.find();
res.status(200).json({
success: true,
registerEmaildata,
message: "Found successfully ",
});
} catch (error) {
res.status(500).json({
success: false,
message: error.message ? error.message : "Something went Wrong",
});
}
};

View File

@ -0,0 +1,26 @@
import mongoose from "mongoose";
const { Schema, model } = mongoose;
const registerEmailData = new mongoose.Schema(
{
subject: {
type: String,
required: [true, "Please Enter title "],
},
description: {
type: String,
maxLength: [500, "description cannot exceed 500 characters"],
required: [true, "Please Enter description"],
},
addedBy: {
type: mongoose.Schema.ObjectId,
ref: "User",
required: true,
},
},
{ timestamps: true, versionKey: false }
);
export const RegisterEmail = mongoose.model("RegisterEmail", registerEmailData);

View File

@ -1,18 +1,27 @@
import express from 'express'
import express from "express";
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
import { AddNewnIformation, FindAllInformation } from './InformationController.js';
const router = express.Router()
router.route("/new").post(isAuthenticatedUser, authorizeRoles("admin"), AddNewnIformation)
router.route("/getAll").get(isAuthenticatedUser, authorizeRoles("admin"), FindAllInformation)
import {
AddNewnIformation,
FindAllInformation,
} from "./InformationController.js";
const router = express.Router();
router
.route("/new")
.post(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
AddNewnIformation
);
router
.route("/getAll")
.get(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
FindAllInformation
);
// router.route("/product/getAll/").get(getAllProduct)
export default router
export default router;

View File

@ -2,18 +2,27 @@ import express from "express";
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
// import { addImage, deleteImage, getImage, updateImage } from "./RegistrationImageController.js";
import { addImage, deleteImage, getImage, updateImage } from "./LoginImageController.js";
import {
addImage,
deleteImage,
getImage,
updateImage,
} from "./LoginImageController.js";
const router = express.Router();
router
.route("/add")
.post(isAuthenticatedUser, authorizeRoles("admin"), addImage);
.route("/add")
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), addImage);
router.route("/getImage").get(getImage);
router
.route("/update/:_id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateImage);
.route("/update/:_id")
.patch(isAuthenticatedUser, authorizeRoles("admin", "Employee"), updateImage);
router
.route("/delete/:_id")
.delete(isAuthenticatedUser, authorizeRoles("admin"), deleteImage);
.route("/delete/:_id")
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteImage
);
export default router;

View File

@ -0,0 +1,225 @@
import { shippingAddress } from "../ShippingAddresses/ShippingAddressModel.js";
import { Order } from "./orderModel.js";
import sendEmail from "../../Utils/sendEmail.js";
//generate unique order id
const generateUniqueOrderId = async () => {
const currentYear = new Date().getFullYear();
// Find the latest order to get the last serial number
const latestOrder = await Order.findOne({}, {}, { sort: { orderID: -1 } });
let serialNumber = 1;
if (latestOrder) {
const lastYear = parseInt(latestOrder.orderID.substring(0, 4), 10);
if (lastYear === currentYear) {
// If the last order was in the current year, increment the serial number
serialNumber = parseInt(latestOrder.orderID.substring(4), 10) + 1;
}
}
// Pad the serial number with zeros and concatenate with the current year
const paddedSerialNumber = serialNumber.toString().padStart(7, "0");
const orderId = `${currentYear}${paddedSerialNumber}`;
return orderId;
};
export const poscreateOrderCheckout = async (req, res) => {
try {
const { userr, address, cart, subtotal, orderType } = req.body;
// Perform validation
if (cart.length < 1)
return res.status(400).json({ message: "Cart is empty!" });
if (!address)
return res
.status(404)
.json({ message: "Please select a shipping address!" });
if (!subtotal)
return res
.status(404)
.json({ message: "Please provide the product subtotal!" });
if (!userr) return res.status(400).json({ message: "User is not defined" });
// Retrieve shipping address from database
let addss = await shippingAddress.findById(address);
let shipping = {
first_Name: addss.first_Name,
last_Name: addss?.last_Name,
phone_Number: addss?.phone_Number,
street: addss?.street,
city: addss?.city,
state: addss?.state,
postalCode: addss?.postalCode,
country: addss?.country,
company_name: addss?.company_name,
gst_number: addss?.gst_number,
addressId: address,
};
// Construct order items array
const orderItems = cart.map((item) => ({
product: item.product._id,
name: item.product.name,
variant_Name: item.variant.variant_Name,
price: Number(item.variant.price),
total_price: item.quantity * Number(item.variant.price),
image: item.product.image,
quantity: item.quantity,
gst_amount: Number(
(Number(item.variant.price) * item.variant.gst_Id?.tax) / 100
)?.toFixed(3),
total_gst_amount: Number(
Number(item.quantity) *
Number((Number(item.variant.price) * item.variant.gst_Id?.tax) / 100)
)?.toFixed(3),
gst_rate: item.variant.gst_Id?.tax,
tax_Name: item.variant?.gst_Id?.name,
product_Subtotal: Number(
Number(item.quantity * Number(item.variant.price)) +
Number(
Number(item.quantity) *
Number(
(Number(item.variant.price) * item.variant.gst_Id?.tax) / 100
)
)
).toFixed(3),
}));
// Generate a unique order ID
const Id = await generateUniqueOrderId();
// Create the order document
const order = await Order.create({
orderID: Id,
total_amount: subtotal,
orderItems,
shippingInfo: shipping,
user: userr,
orderType,
paymentMode: "cod",
payment_status: "success",
isPaid: true,
paidAt: new Date().toISOString(),
});
// console.log(order);
// Find the user associated with the order
const orderWithUser = await Order.findById(order._id).populate("user");
if (!orderWithUser) {
return res
.status(404)
.json({ success: false, message: "Order not found" });
}
const user = orderWithUser.user;
const userEmail = user.email;
// Send email after order creation
await sendEmail({
to: userEmail,
from: `${process.env.SEND_EMAIL_FROM}`,
subject: `Your Order #${order?.orderID} Confirmation`,
html: ` <h1 style="color: #333; text-align: center; font-family: Arial, sans-serif;">Welcome to Smellika - Let the Shopping Begin!</h1>
<strong style="color: #1b03a3; font-size: 16px"> Hi ${
order?.shippingInfo?.first_Name
},</strong>
<p style="color: #555; font-size: 15px;">Great news! Your order #${
order?.orderID
} has been confirmed. Here are the details</p>
<h4 style="color: #333; font-family: Arial, sans-serif;">Shipping Address : ${
order?.shippingInfo?.first_Name
} ${order?.shippingInfo?.last_Name} , ${order?.shippingInfo?.street} ${
order?.shippingInfo?.city
} ${order?.shippingInfo?.state} ${order?.shippingInfo?.country}, PIN-${
order?.shippingInfo?.postalCode
}, Phone Number: ${order?.shippingInfo?.phone_Number}
${
order?.shippingInfo?.company_name
? ",Company Name :" + order?.shippingInfo?.company_name + ""
: ""
} ${
order?.shippingInfo?.gst_number
? ", GST_NO:" + order?.shippingInfo?.gst_number
: ""
}</h4>
<h4 style="color: #333; font-family: Arial, sans-serif;">Order Items :</h4>
<table style="border-collapse: collapse; width: 100%;">
<thead>
<tr>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">S No.</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Product Name</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Variant</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Image</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Quantity</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Price</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">GST Amount</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">SubTotal</th>
</tr>
</thead>
<tbody>
${order?.orderItems
?.map(
(product, index) => `
<tr>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
index + 1
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product.name
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product?.variant_Name
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;"><img src="${
product?.image[0]?.url
}" alt="${
product.name
}" style="max-width: 40px; height: auto;"></td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product.quantity
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product.price
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product?.gst_amount
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product?.product_Subtotal
}</td>
</tr>
`
)
.join("")}
<tr>
<th colspan="7" style="border: 1px solid #555; padding: 2px; text-align: right;">Total Amount :</th>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
order?.total_amount
}</td>
</tr>
</tbody>
</table>
<br/>
<span style="color: #555; font-size: 13px;">Best regards,</span><br/>
<span style="color: #555; font-size: 13px;">Team Smellika</span>`,
});
return res.status(201).json({ success: true, order });
} catch (error) {
console.error("Error creating order:", error);
return res
.status(500)
.json({ success: false, message: "Internal server error" });
}
};

View File

@ -31,6 +31,8 @@ const generateUniqueOrderId = async () => {
export const getRzpkey = async (req, res) => {
const { name, email } = req.user;
// console.log(name);
// console.log(email);
res.status(200).json({
success: true,
key: process.env.RAZERPAY_KEY_ID,
@ -38,9 +40,36 @@ export const getRzpkey = async (req, res) => {
email,
});
};
//point of sale order
export const getRazerpayKey = async (req, res) => {
try {
const { name, email } = req.params;
// console.log("name", name, "email", email);
if (!name || !email) {
throw new Error("Name and email are required parameters");
}
res.status(200).json({
success: true,
key: process.env.RAZERPAY_KEY_ID,
name,
email,
});
} catch (error) {
console.error("Error in getRzpKey:", error);
res
.status(500)
.json({
success: false,
message: error.message || "Internal server error",
});
}
};
export const checkout = async (req, res) => {
try {
const { address, cart, subtotal } = req.body;
const { userr,address, cart, subtotal,orderType } = req.body;
// console.log(req.body.cart[0].product);
// console.log(req.body.cart[0].variant);
if (cart.length < 1)
return res.status(400).json({ message: "cart is empty!" });
if (!address)
@ -55,12 +84,21 @@ export const checkout = async (req, res) => {
amount: Number(req.body.subtotal * 100),
currency: "INR",
};
// Determine the user ID
let User;
if (userr) {
User = userr; // Use provided user ID
} else {
User = req.user._id; // Use authenticated user ID
}
// console.log(User);
const order = await instance.orders.create(options);
// console.log(order);
//save order in database
if (order?.id) {
const { email } = req.user;
if (!email)
return res.status(400).send({ message: "Please enter the email" });
// const { email } = req.user;
// if (!email)
// return res.status(400).send({ message: "Please enter the email" });
let addss = await shippingAddress.findById(address);
let shipping = {
@ -161,15 +199,16 @@ export const checkout = async (req, res) => {
)?.toFixed(2),
}));
// console.log("line", lineItems[0]);
// console.log("Order", orderItems[0]);
const Id = await generateUniqueOrderId();
const orders = await Order.create({
orderID: Id,
total_amount: subtotal,
orderItems,
shippingInfo: shipping,
user: req.user._id,
user: User,
razorpay_order_id: order?.id,
orderType,
});
} else {
return res.status(400).json({
@ -353,6 +392,167 @@ export const paymentVerification = async (req, res) => {
});
}
};
// point of sale payment varification
export const pospaymentVerification = async (req, res) => {
const { razorpay_order_id, razorpay_payment_id, razorpay_signature } =
req.body;
const body = razorpay_order_id + "|" + razorpay_payment_id;
const expectedSignature = crypto
.createHmac("sha256", process.env.RAZERPAY_SECRET_KEY)
.update(body.toString())
.digest("hex");
const isAuthentic = expectedSignature === razorpay_signature;
if (isAuthentic) {
// Database comes here
let findSameOrder = await Order.findOne({
razorpay_order_id: razorpay_order_id,
}).populate({
path: "user",
select: "name email -_id",
});
// console.log("findSameOrder", findSameOrder);
if (findSameOrder) {
(findSameOrder.razorpay_payment_id = razorpay_payment_id), // await Payment.create({
(findSameOrder.isPaid = true),
(findSameOrder.paidAt = Date.now()),
(findSameOrder.razorpay_signature = razorpay_signature);
// await Payment.create({
findSameOrder.payment_status = "success";
findSameOrder.orderStatus = "new";
await findSameOrder.save();
}
//send email to customer
// console.log("findSameOrder", findSameOrder);
await sendEmail({
to: `${findSameOrder?.user?.email}`, // Change to your recipient
from: `${process.env.SEND_EMAIL_FROM}`, // Change to your verified sender
subject: `Your Order #${findSameOrder?.orderID} Confirmation`,
html: ` <h1 style="color: #333; text-align: center; font-family: Arial, sans-serif;">Welcome to Smellika - Let the Shopping Begin!</h1>
<strong style="color: #1b03a3; font-size: 16px"> Hi ${
findSameOrder?.shippingInfo?.first_Name
},</strong>
<p style="color: #555; font-size: 15px;">Great news! Your order #${
findSameOrder?.orderID
} has been confirmed. Here are the details</p>
<h4 style="color: #333; font-family: Arial, sans-serif;">Shipping Address : ${
findSameOrder?.shippingInfo?.first_Name
} ${findSameOrder?.shippingInfo?.last_Name} , ${
findSameOrder?.shippingInfo?.street
} ${findSameOrder?.shippingInfo?.city} ${
findSameOrder?.shippingInfo?.state
} ${findSameOrder?.shippingInfo?.country}, PIN-${
findSameOrder?.shippingInfo?.postalCode
}, Phone Number: ${findSameOrder?.shippingInfo?.phone_Number}
${
findSameOrder?.shippingInfo?.company_name
? ",Company Name :" + findSameOrder?.shippingInfo?.company_name + ""
: ""
} ${
findSameOrder?.shippingInfo?.gst_number
? ", GST_NO:" + findSameOrder?.shippingInfo?.gst_number
: ""
}</h4>
<h4 style="color: #333; font-family: Arial, sans-serif;">Order Items :</h4>
<table style="border-collapse: collapse; width: 100%;">
<thead>
<tr>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">S No.</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Product Name</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Variant</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Image</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Quantity</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">Price</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">GST Amount</th>
<th style="border: 1px solid #555; padding: 2px; text-align: center;">SubTotal</th>
</tr>
</thead>
<tbody>
${findSameOrder?.orderItems
?.map(
(product, index) => `
<tr>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
index + 1
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product.name
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product?.variant_Name
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;"><img src="${
product?.image[0]?.url
}" alt="${
product.name
}" style="max-width: 40px; height: auto;"></td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product.quantity
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product.price
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product?.gst_amount
}</td>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
product?.product_Subtotal
}</td>
</tr>
`
)
.join("")}
<tr>
<th colspan="7" style="border: 1px solid #555; padding: 2px; text-align: right;">Total Amount :</th>
<td style="border: 1px solid #555; padding: 2px; text-align: center;">${
findSameOrder?.total_amount
}</td>
</tr>
</tbody>
</table>
<br/>
<span style="color: #555; font-size: 13px;">Best regards,</span><br/>
<span style="color: #555; font-size: 13px;">Team Smellika</span>`,
});
// console.log("findSameOrder", findSameOrder);
// // findSameOrder.razorpay_payment_id=razorpay_payment_id,// await Payment.create({
// findOrder.paidAt = new Date(event.data.object.created * 1000);
// findOrder.isPaid = true;
// razorpay_signature: { type: String },
// razorpay_order_id,
// razorpay_payment_id,
// razorpay_signature,
// });
res.redirect(`https://admin.smellika.com/#/pos`);
// res.redirect(`http://localhost:3000/#/pos`);
} else {
res.status(400).json({
success: false,
});
}
};
export const handlePayment = async (req, res) => {
try {
const { email } = req.user;

View File

@ -124,7 +124,11 @@ const orderSchema = new mongoose.Schema(
enum: ["online", "cod"],
default: "online",
},
orderType: {
type: String,
enum: ["WebSite", "PointOfSale"],
default: "WebSite",
},
payment_status: {
type: String,
enum: ["pending", "success", "failed"],

View File

@ -22,12 +22,17 @@ app.use(bodyParser.raw({ type: "application/json" }));
import { handlePayment, webhook } from "./StripeCheckOutController.js";
import {
checkout,
getRazerpayKey,
getRzpkey,
paymentVerification,
pospaymentVerification,
} from "./RazerPayCheckoutController.js";
import { poscreateOrderCheckout } from "./PosCheckoutController.js";
const router = express.Router();
//checkout Routes-------------------------//
router.route("/checkout/").post(isAuthenticatedUser, createOrderCheckout);
//checkout Routes-------------------------//
router.route("/pos-checkout/").post(isAuthenticatedUser, poscreateOrderCheckout);
router.route("/clientid/get/").get(isAuthenticatedUser, getClientId);
router.route("/:orderID/capture/payment").post(captureOrderPayment);
// ---------------------------------------------------
@ -46,24 +51,33 @@ router.route("/user/self").get(isAuthenticatedUser, getUserSelf);
//admin route
router
.route("/getAll/:status")
.get(isAuthenticatedUser, authorizeRoles("admin"), getAllOrder);
.get(isAuthenticatedUser, authorizeRoles("admin", "Employee"), getAllOrder);
router
.route("/getAll/")
.get(isAuthenticatedUser, authorizeRoles("admin"), getOrders);
.get(isAuthenticatedUser, authorizeRoles("admin", "Employee"), getOrders);
router.route("/getOne/:id").get(isAuthenticatedUser, getSingleOrder);
router
.route("/change/status/:id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateOrderStatusById);
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updateOrderStatusById
);
router
.route("/delete/:id")
.delete(isAuthenticatedUser, authorizeRoles("admin"), deleteOneOrder);
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteOneOrder
);
//RAZERPAY checkout
router.route("/getRzpKey/:name/:email").get(isAuthenticatedUser, getRazerpayKey);
router.route("/getRzpKey/").get(isAuthenticatedUser, getRzpkey);
router.route("/Rzpcheckout/").post(isAuthenticatedUser, checkout);
router.route("/paymentverification").post(paymentVerification);
router.route("/pos-paymentverification").post(pospaymentVerification);
// router.route("/product/getAll/").get(getAllProduct)
export default router;

View File

@ -1,59 +1,81 @@
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";
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);
.route("/panel1/add")
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), AddPanel1);
router.route("/panel1/get").get(getPanel1);
router
.route("/panel1/update/:id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updatePanel1);
.route("/panel1/update/:id")
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updatePanel1
);
router
.route("/panel2/add")
.post(isAuthenticatedUser, authorizeRoles("admin"), AddPanel2);
router
.route("/panel2/get")
.get(getPanel2);
.route("/panel2/add")
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), AddPanel2);
router.route("/panel2/get").get(getPanel2);
router
.route("/panel2/update/:id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updatePanel2);
.route("/panel2/update/:id")
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updatePanel2
);
router
.route("/panel3/add")
.post(isAuthenticatedUser, authorizeRoles("admin"), AddPanel3);
router
.route("/panel3/get")
.get(getPanel3);
.route("/panel3/add")
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), AddPanel3);
router.route("/panel3/get").get(getPanel3);
router
.route("/panel3/update/:id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updatePanel3);
.route("/panel3/update/:id")
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updatePanel3
);
router
.route("/panel4/add")
.post(isAuthenticatedUser, authorizeRoles("admin"), AddPanel4);
router
.route("/panel4/get")
.get(getPanel4);
.route("/panel4/add")
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), AddPanel4);
router.route("/panel4/get").get(getPanel4);
router
.route("/panel4/update/:id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updatePanel4);
.route("/panel4/update/:id")
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updatePanel4
);
router
.route("/deleteImage/jatinMor/panel/:public_id")
.delete(
isAuthenticatedUser,
authorizeRoles("admin"),
deleteImageFromCloudinary
);
.route("/deleteImage/jatinMor/panel/:public_id")
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteImageFromCloudinary
);
export default router;

View File

@ -16,10 +16,18 @@ const router = express.Router();
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
router
.route("/product/create/")
.post(isAuthenticatedUser, authorizeRoles("admin"), createProduct);
.post(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
createProduct
);
router
.route("/product/getAll/admin/")
.get(isAuthenticatedUser, authorizeRoles("admin"), getAllProductAdmin);
.get(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
getAllProductAdmin
);
//change Product status
router.route("/product/admin/status/:id").patch(ChangeProductStatus);
@ -35,15 +43,23 @@ router
router.route("/product/getOne/:id").get(getOneProduct);
router
.route("/product/update/:id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateProduct);
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updateProduct
);
router
.route("/product/delete/:id")
.delete(isAuthenticatedUser, authorizeRoles("admin"), deleteProduct);
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteProduct
);
router
.route("/product/deleteImage/jatinMor/product/:public_id")
.delete(
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
deleteImageFromCloudinary
);
router.route("/products/category/:categoryName").get(getProductsByCategory);

View File

@ -1,18 +1,27 @@
import express from "express";
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
import { addImage, deleteImage, getImage, updateImage } from "./RegistrationImageController.js";
import {
addImage,
deleteImage,
getImage,
updateImage,
} from "./RegistrationImageController.js";
const router = express.Router();
router
.route("/add")
.post(isAuthenticatedUser, authorizeRoles("admin"), addImage);
.route("/add")
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), addImage);
router.route("/getImage").get(getImage);
router
.route("/update/:_id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateImage);
.route("/update/:_id")
.patch(isAuthenticatedUser, authorizeRoles("admin", "Employee"), updateImage);
router
.route("/delete/:_id")
.delete(isAuthenticatedUser, authorizeRoles("admin"), deleteImage);
.route("/delete/:_id")
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteImage
);
export default router;

View File

@ -6,7 +6,10 @@ const router = express.Router();
router
.route("/new")
.post(isAuthenticatedUser, authorizeRoles("admin"), AddNewSeoRequest);
.post(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
AddNewSeoRequest
);
export default router;

View File

@ -16,7 +16,7 @@ router
.route("/admin/new/:_id")
.post(
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
AddshippingAddressByAdmin
);
@ -28,7 +28,7 @@ router
.route("/user/address/:_id")
.get(
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
getSingleUserSippingAddressForAdmin
);

View File

@ -1,20 +1,29 @@
import express from "express";
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
import { addImage, deleteImage, getImage, updateImage } from "./ShopPageImageController.js";
import {
addImage,
deleteImage,
getImage,
updateImage,
} from "./ShopPageImageController.js";
// import { addImage, deleteImage, getImage, updateImage } from "./RegistrationImageController.js";
// import { addImage, deleteImage, getImage, updateImage } from "./LoginImageController.js";
const router = express.Router();
router
.route("/add")
.post(isAuthenticatedUser, authorizeRoles("admin"), addImage);
.route("/add")
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), addImage);
router.route("/getImage").get(getImage);
router
.route("/update/:_id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateImage);
.route("/update/:_id")
.patch(isAuthenticatedUser, authorizeRoles("admin", "Employee"), updateImage);
router
.route("/delete/:_id")
.delete(isAuthenticatedUser, authorizeRoles("admin"), deleteImage);
.route("/delete/:_id")
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteImage
);
export default router;

View File

@ -1,5 +1,13 @@
import bodyParser from "body-parser";
import { createSupport, deleteImageFromCloudinary, deleteSupport, getAllSupportTicket, getAllSupportTicketofuser, getOneSupportTicket, updateSupport } from "./supportController.js";
import {
createSupport,
deleteImageFromCloudinary,
deleteSupport,
getAllSupportTicket,
getAllSupportTicketofuser,
getOneSupportTicket,
updateSupport,
} from "./supportController.js";
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
import express from "express";
@ -10,21 +18,27 @@ app.use(bodyParser.raw({ type: "application/json" }));
const router = express.Router();
//checkout Routes-------------------------//
router.route("/support/create/").post(isAuthenticatedUser,createSupport);
router.route("/support/getAll/").get(isAuthenticatedUser, authorizeRoles("admin"),getAllSupportTicket);
router.route("/support/userticket/").get(isAuthenticatedUser,getAllSupportTicketofuser);
router.route("/support/create/").post(isAuthenticatedUser, createSupport);
router
.route("/support/getAll/")
.get(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
getAllSupportTicket
);
router
.route("/support/userticket/")
.get(isAuthenticatedUser, getAllSupportTicketofuser);
router.route("/support/delete/:id").delete(deleteSupport);
router
.route("/support/getOne/:id")
.get(isAuthenticatedUser, getOneSupportTicket);
router.route("/support/update/:id").patch(isAuthenticatedUser, updateSupport);
router
.route("/support/delete/:id")
.delete( deleteSupport);
router.route("/support/getOne/:id").get(isAuthenticatedUser, getOneSupportTicket);
router
.route("/support/update/:id")
.patch(isAuthenticatedUser, updateSupport);
router
.route("/support/deleteImage/jatinMor/CustomerSupport/:public_id")
.delete(
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
deleteImageFromCloudinary
);
// ---------------------------------------------------------

View File

@ -9,9 +9,15 @@ import {
} from "./tax_controller.js";
const router = Router();
router.route("/add_tax").post(isAuthenticatedUser, authorizeRoles("admin"), addTax);
router.route("/update_tax/:id").patch(isAuthenticatedUser, authorizeRoles("admin"), updateTax);
router.route("/delete_tax/:id").delete(isAuthenticatedUser, authorizeRoles("admin"), deleteTax);
router
.route("/add_tax")
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), addTax);
router
.route("/update_tax/:id")
.patch(isAuthenticatedUser, authorizeRoles("admin", "Employee"), updateTax);
router
.route("/delete_tax/:id")
.delete(isAuthenticatedUser, authorizeRoles("admin", "Employee"), deleteTax);
router.route("/view_tax/:id").get(isAuthenticatedUser, getTax);
router.route("/view_tax").get(isAuthenticatedUser, getTaxes);
export default router;

View File

@ -1,24 +1,28 @@
import { Router } from "express";
const router = Router();
import {
addFranchisee,
getAllFranchisees,
getFranchiseeById,
updateFranchisee,
deleteFranchiseeById,
getFranchiseeByIdWithoutPopulate,
getAllFranchiseesPopulated,
// getAllFranchiseesPopulatedWithOption,
addProductToFranchisee,
// addGradeToFranchisee,
getFranchiseeByIdPopulated,
FranchiseeLogin,
franchiseeForgotPassword,
franchiseeUpdatePassword,
getFransiDetails,
EditFranchiseeProfile,
addFranchisee,
getAllFranchisees,
getFranchiseeById,
updateFranchisee,
deleteFranchiseeById,
getFranchiseeByIdWithoutPopulate,
getAllFranchiseesPopulated,
// getAllFranchiseesPopulatedWithOption,
addProductToFranchisee,
// addGradeToFranchisee,
getFranchiseeByIdPopulated,
FranchiseeLogin,
franchiseeForgotPassword,
franchiseeUpdatePassword,
getFransiDetails,
EditFranchiseeProfile,
} from "./Franchisee_controller.js";
import { authorizeRoles, isAuthenticatedUser, isFranchiAuthenticated } from "../../middlewares/auth.js";
import {
authorizeRoles,
isAuthenticatedUser,
isFranchiAuthenticated,
} from "../../middlewares/auth.js";
import { FranchiseeVarificationFromAdmin } from "./Franchisee_controller.js";
import { FranchiseePriceLevelProduct } from "./Franchisee_controller.js";
import { createOrder } from "./Franchisee_controller.js";
@ -29,44 +33,62 @@ import { getAllOrder } from "./Franchisee_controller.js";
router.get("/", getAllFranchisees);
router.get("/withpopulate", isAuthenticatedUser, getAllFranchiseesPopulated);
// router.get("/withpopulate/:option", getAllFranchiseesPopulatedWithOption);
router.get("/withoutpopulate/:id", isAuthenticatedUser, getFranchiseeByIdWithoutPopulate);
router.get(
"/withoutpopulate/:id",
isAuthenticatedUser,
getFranchiseeByIdWithoutPopulate
);
router.get("/:id", isAuthenticatedUser, getFranchiseeById);
router.get("/arrayspopulate/:id", getFranchiseeByIdPopulated);
router.post("/", isAuthenticatedUser, authorizeRoles("admin"), addFranchisee);
router.post(
"/",
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
addFranchisee
);
router.patch("/product/:id", isAuthenticatedUser, addProductToFranchisee);
// router.patch("/grade/:id", addGradeToFranchisee);
router.patch("/:id", isAuthenticatedUser, authorizeRoles("admin"), updateFranchisee);
router.delete("/:id", isAuthenticatedUser, authorizeRoles("admin"), deleteFranchiseeById);
router.patch(
"/:id",
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updateFranchisee
);
router.delete(
"/:id",
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteFranchiseeById
);
//varify
router.get("/admin/verify/:id", isAuthenticatedUser, authorizeRoles("admin"), FranchiseeVarificationFromAdmin);
router.get(
"/admin/verify/:id",
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
FranchiseeVarificationFromAdmin
);
// ---------franchisee Auth ----------------------////////
franchiseeForgotPassword
franchiseeForgotPassword;
router.post("/login", FranchiseeLogin);
router.post("/password/forgot", franchiseeForgotPassword)
router.post("/password/forgot", franchiseeForgotPassword);
router.get("/getDetails/me", isFranchiAuthenticated, getFransiDetails);
router.patch("/edit/self", isFranchiAuthenticated, EditFranchiseeProfile);
router.route("/password/update").put(isFranchiAuthenticated, franchiseeUpdatePassword);
router
.route("/password/update")
.put(isFranchiAuthenticated, franchiseeUpdatePassword);
//fetch product franchisee Wise
router.route("/product/price_level").get(isFranchiAuthenticated, FranchiseePriceLevelProduct);
router
.route("/product/price_level")
.get(isFranchiAuthenticated, FranchiseePriceLevelProduct);
//product order
router.route("/order/create").post(isFranchiAuthenticated, createOrder)
router.route("/order/getAll").get(isFranchiAuthenticated, getAllOrder)
router.route("/order/getOne/:id").get(isFranchiAuthenticated, getSingleOrder)
router.route("/order/edit/:id").put(isFranchiAuthenticated, EditOrderBeforePayment)
router.route("/order/create").post(isFranchiAuthenticated, createOrder);
router.route("/order/getAll").get(isFranchiAuthenticated, getAllOrder);
router.route("/order/getOne/:id").get(isFranchiAuthenticated, getSingleOrder);
router
.route("/order/edit/:id")
.put(isFranchiAuthenticated, EditOrderBeforePayment);
export default router;

View File

@ -12,21 +12,27 @@ import {
const router = express.Router();
router.route("/new").post(isAuthenticatedUser, AddNewTestimonial);
router
.route("/getAll")
.get(FindAllTestimonial);
router.route("/getAll").get(FindAllTestimonial);
router.route("/getOne/:id").get(isAuthenticatedUser, FindOneTestimonial);
router
.route("/delete/:id")
.delete(isAuthenticatedUser, authorizeRoles("admin"), deleteTestimonial);
router
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteTestimonial
);
router
.route("/update/:id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updatetesTimonial);
router
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updatetesTimonial
);
router
.route("/deleteImage/GetSygnal/Testimonial/:public_id")
.delete(
isAuthenticatedUser,
authorizeRoles("admin"),
authorizeRoles("admin", "Employee"),
deleteImageFromCloudinary
);
export default router;

View File

@ -14,8 +14,10 @@ import {
} from "./Config_controller.js";
import { upload } from "../../../Utils/cloudinary.js";
import { authorizeRoles, isAuthenticatedUser } from "../../../middlewares/auth.js";
import {
authorizeRoles,
isAuthenticatedUser,
} from "../../../middlewares/auth.js";
const router = Router();
@ -25,21 +27,52 @@ const router = Router();
// { name: "Adminlogo", maxCount: 1 },
// ]);
// router.route("/gst").post(isAuthenticatedUser, authorizeRoles("admin"), addGST);
router.route("/social").post(isAuthenticatedUser, authorizeRoles("admin"), addSocialMedia);
router.route("/application/name").post(isAuthenticatedUser, authorizeRoles("admin"), addApplicationName);
router.route("/copyright/message").post(isAuthenticatedUser, authorizeRoles("admin"), addCopyRightMessage);
// router.route("/gst").post(isAuthenticatedUser,authorizeRoles("admin", "Employee"), addGST);
router
.route("/social")
.post(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
addSocialMedia
);
router
.route("/application/name")
.post(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
addApplicationName
);
router
.route("/copyright/message")
.post(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
addCopyRightMessage
);
router.route("/address").post(isAuthenticatedUser, authorizeRoles("admin"), addAddress);
// router.route("/scrollText").post(isAuthenticatedUser, authorizeRoles("admin"), addScrollText);
router.route("/logo").post(isAuthenticatedUser, authorizeRoles("admin"), addLogo);
router.route("/").get(getConfig).delete(isAuthenticatedUser, authorizeRoles("admin"), deleteConfig)
router
.route("/address")
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), addAddress);
// router.route("/scrollText").post(isAuthenticatedUser,authorizeRoles("admin", "Employee"), addScrollText);
router
.route("/logo")
.post(isAuthenticatedUser, authorizeRoles("admin", "Employee"), addLogo);
router
.route("/")
.get(getConfig)
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteConfig
);
router
.route("/termsofuse")
.get(isAuthenticatedUser, authorizeRoles("admin"), getTermsOfUse)
.patch(isAuthenticatedUser, authorizeRoles("admin"), addTermsOfUse);
.get(isAuthenticatedUser, authorizeRoles("admin", "Employee"), getTermsOfUse)
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
addTermsOfUse
);
export default router;

View File

@ -7,10 +7,12 @@ import crypto from "crypto";
import cloudinary from "cloudinary";
import password from "secure-random-password";
import { Order } from "../Orders/orderModel.js";
import { RegisterEmail } from "../EmailCMS/RegisterEmail/registerEmailModal.js";
import { Config } from "../setting/Configration/Config_model.js";
// 1.Register a User
export const registerUser = async (req, res) => {
try {
const { name, email, password, phone } = req.body;
const { name, email, password, phone, accessTo, role } = req.body;
// console.log("this is the password ", password, name, req.body);
let findUser = await User.findOne({ email });
@ -37,30 +39,45 @@ export const registerUser = async (req, res) => {
email,
password,
phone,
role,
accessTo,
// avatar: {
// public_id: myCloud.public_id,
// url: myCloud.secure_url,
// },
});
// const emailData = await RegisterEmail.find();
// let emailSubject = emailData[0]?.subject;
// let emailDescription = emailData[0]?.description;
const config = await Config.find();
let appName = config[0]?.appName;
await sendEmail({
to: `${email}`, // Change to your recipient
from: `${process.env.SEND_EMAIL_FROM}`, // Change to your verified sender
subject: `Welcome to Smellika - Let the Shopping Begin!`,
html: ` <h1 style="color: #333; text-align: left; font-family: Arial, sans-serif;">Welcome to Smellika - Let the Shopping Begin!</h1>
html: ` <h1 style="color: #333; text-align: left; font-family: Arial, sans-serif;">Welcome to ${appName} - Let the Shopping Begin!</h1>
<strong style="color: #1b03a3; font-size: 16px"> Hey ${name},</strong>
<p style="color: #555; font-size: 15px;">Welcome to Smellika! We're thrilled to have you on board. Get ready for a world of exclusive deals, exciting products, and seamless shopping experiences. Start exploring now!</p>
<p style="color: #555; font-size: 15px;">
Welcome to Smellika - Let the Shopping Begin!
</p>
<br/>
<p style="color: #555; font-size: 15px;">You can login into : https://smellika.com</p>
<p style="color: #555; font-size: 15px;">You can login into :${
role === "Employee" || role === "admin"
? `https://admin.smellika.com/`
: `https://smellika.com`
} </p>
<br/>
<p style="color: #555; font-size: 15px;">Below are your login credentials:</p>
<p style="color: #555; font-size: 15px;">Email: ${email}</p>
<p style="color: #555; font-size: 15px;">Password: ${password}</p>
<span style="color: #555; font-size: 13px;">Happy shopping,</span><br/>
<span style="color: #555; font-size: 13px;">Team Smellika</span>`,
<span style="color: #555; font-size: 13px;">Team ${appName}</span>`,
});
sendToken(user, 201, res);
} catch (e) {
@ -353,3 +370,81 @@ export const getAllUser = catchAsyncErrors(async (req, res, next) => {
users,
});
});
export const getAllEmployee = catchAsyncErrors(async (req, res, next) => {
// Assuming your User model is imported as 'User'
const employee = await User.find({ role: "Employee" });
res.status(200).json({
success: true,
employee,
});
});
export const deleteEmployeeById = catchAsyncErrors(async (req, res, next) => {
// console.log("request came here", req.params);
// Extract the employee ID from the request parameters
const { id } = req.params;
try {
// Find the employee by ID and delete it
const deletedEmployee = await User.findByIdAndDelete(id);
if (!deletedEmployee) {
// If the employee with the provided ID is not found, return an error
return res.status(404).json({
success: false,
message: "Employee not found",
});
}
// If deletion is successful, return success response
res.status(200).json({
success: true,
message: "Employee deleted successfully",
});
} catch (error) {
// Handle any errors that occur during deletion
return res.status(500).json({
success: false,
message: "Error deleting employee",
error: error.message,
});
}
});
// Update employee
// Import necessary modules and set up your User model
export const updateEmployeeById = catchAsyncErrors(async (req, res, next) => {
// Extract the employee ID from the request parameters
const { id } = req.params;
try {
// Find the employee by ID and update its fields
const updatedEmployee = await User.findByIdAndUpdate(
id,
{ $set: req.body }, // Update fields based on the request body
{ new: true } // Return the updated document
);
if (!updatedEmployee) {
// If the employee with the provided ID is not found, return an error
return res.status(404).json({
success: false,
message: "Employee not found",
});
}
// If update is successful, return success response with updated employee data
res.status(200).json({
success: true,
message: "Employee updated successfully",
employee: updatedEmployee,
});
} catch (error) {
// Handle any errors that occur during update
return res.status(500).json({
success: false,
message: "Error updating employee",
error: error.message,
});
}
});

View File

@ -46,6 +46,7 @@ const userSchema = new mongoose.Schema(
type: String,
default: "user",
},
accessTo: {},
// createdAt: {
// type: Date,
// default: Date.now,

View File

@ -11,6 +11,9 @@ import {
getSingleUser,
getAllUser,
getUserOrderForAdmin,
getAllEmployee,
deleteEmployeeById,
updateEmployeeById,
} from "./userController.js";
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
@ -30,14 +33,39 @@ router.route("/user/details").get(isAuthenticatedUser, getUserDetails);
router
.route("/admin/users")
.get(isAuthenticatedUser, authorizeRoles("admin"), getAllUser);
.get(isAuthenticatedUser, authorizeRoles("admin", "Employee"), getAllUser);
router
.route("/admin/delete-employee/:id")
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteEmployeeById
);
router
.route("/admin/employee")
.get(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
getAllEmployee
);
router
.route("/admin/update-employee/:id")
.put(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updateEmployeeById
);
router
.route("/admin/users/orders/:id")
.get(isAuthenticatedUser, authorizeRoles("admin"), getUserOrderForAdmin);
.get(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
getUserOrderForAdmin
);
router
.route("/admin/user/:id")
.get(isAuthenticatedUser, authorizeRoles("admin"), getSingleUser);
.get(isAuthenticatedUser, authorizeRoles("admin", "Employee"), getSingleUser);
router.route("/user/password/update").put(isAuthenticatedUser, updatePassword);

View File

@ -12,14 +12,26 @@ const router = express.Router();
router
.route("/addAddress")
.post(isAuthenticatedUser, authorizeRoles("admin"), addUserAddress);
.post(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
addUserAddress
);
router.route("/getAddressess").get(getUserAddress);
router.route("/getOneAddress/:_id").get(getOneAddress);
router
.route("/updateAddress/:_id")
.patch(isAuthenticatedUser, authorizeRoles("admin"), updateAddress);
.patch(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
updateAddress
);
router
.route("/deleteAddress/:_id")
.delete(isAuthenticatedUser, authorizeRoles("admin"), deleteUserAddress);
.delete(
isAuthenticatedUser,
authorizeRoles("admin", "Employee"),
deleteUserAddress
);
export default router;