order create and fetch with payment
This commit is contained in:
parent
145c44302c
commit
a10e0d3b7b
254
resources/Orders/CheckoutController.js
Normal file
254
resources/Orders/CheckoutController.js
Normal file
@ -0,0 +1,254 @@
|
|||||||
|
import { Order } from "./orderModel.js";
|
||||||
|
const { PAYPAL_CLIENT_ID, PAYPAL_CLIENT_SECRET } = process.env;
|
||||||
|
const base = "https://api-m.sandbox.paypal.com";
|
||||||
|
import axios from "axios";
|
||||||
|
import mongoose from "mongoose";
|
||||||
|
//paypal client id get
|
||||||
|
export const getClientId = async (req, res) => {
|
||||||
|
try {
|
||||||
|
res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
clientId: PAYPAL_CLIENT_ID,
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
res.status(500).json({
|
||||||
|
success: false,
|
||||||
|
message: error.message ? error.message : "Something went Wrong",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
//generate unique order id
|
||||||
|
const generateOrderId = 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;
|
||||||
|
};
|
||||||
|
|
||||||
|
//* Generate an OAuth 2.0 access token for authenticating with PayPal REST APIs.
|
||||||
|
// https://developer.paypal.com/api/rest/authentication/
|
||||||
|
// */
|
||||||
|
const generateAccessToken = async () => {
|
||||||
|
const credentials = `${PAYPAL_CLIENT_ID}:${PAYPAL_CLIENT_SECRET}`;
|
||||||
|
const base64Credentials = Buffer.from(credentials).toString("base64");
|
||||||
|
|
||||||
|
const headers = {
|
||||||
|
"Content-Type": "application/x-www-form-urlencoded",
|
||||||
|
Authorization: `Basic ${base64Credentials}`,
|
||||||
|
};
|
||||||
|
|
||||||
|
const data = "grant_type=client_credentials";
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await axios.post(`${base}/v1/oauth2/token`, data, {
|
||||||
|
headers: headers,
|
||||||
|
});
|
||||||
|
// console.log("response.data", response.data);
|
||||||
|
const accessToken = response.data?.access_token;
|
||||||
|
return accessToken;
|
||||||
|
} catch (error) {
|
||||||
|
console.error(
|
||||||
|
"Error getting access token:",
|
||||||
|
error.response ? error.response.data : error.message
|
||||||
|
);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleResponse = async (response) => {
|
||||||
|
try {
|
||||||
|
if (response.status >= 200 && response.status < 300) {
|
||||||
|
return {
|
||||||
|
success: true,
|
||||||
|
responseData: response.data,
|
||||||
|
httpStatusCode: response.status,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
const errorMessage = await response.statusText;
|
||||||
|
throw new Error(errorMessage);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// https://developer.paypal.com/docs/api/orders/v2/#orders_create
|
||||||
|
|
||||||
|
export const createOrderCheckout = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { address, cart, subtotal } = req.body;
|
||||||
|
if (cart.length < 1)
|
||||||
|
return res.status(400).json({ message: "cart is empty!" });
|
||||||
|
switch (true) {
|
||||||
|
//validation
|
||||||
|
case !address: {
|
||||||
|
return res.status(404).json({ msg: "please provide shipping address" });
|
||||||
|
}
|
||||||
|
case !subtotal: {
|
||||||
|
return res.status(404).json({ msg: "please provide product subtotal" });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const orderItems = await cart.map((item) => ({
|
||||||
|
product: item.product._id,
|
||||||
|
name: item.product.name,
|
||||||
|
price: item.product.price,
|
||||||
|
image: item.product.image,
|
||||||
|
quantity: item.quantity,
|
||||||
|
product_subtotal: item.subtotal,
|
||||||
|
price_With_Tax: 0,
|
||||||
|
taxId: "",
|
||||||
|
}));
|
||||||
|
req.body.user = req.user._id;
|
||||||
|
const Id = await generateOrderId();
|
||||||
|
const order = await Order.create({
|
||||||
|
orderID: Id,
|
||||||
|
total_amount: subtotal,
|
||||||
|
orderItems,
|
||||||
|
shippingInfo: address,
|
||||||
|
user: req.user._id,
|
||||||
|
});
|
||||||
|
if (order) {
|
||||||
|
const accessToken = await generateAccessToken();
|
||||||
|
const url = `${base}/v2/checkout/orders`;
|
||||||
|
const createOrderRequest = {
|
||||||
|
intent: "CAPTURE",
|
||||||
|
purchase_units: [
|
||||||
|
{
|
||||||
|
amount: {
|
||||||
|
currency_code: "USD",
|
||||||
|
value: subtotal, //"60.00" Replace with the actual amount
|
||||||
|
//optional product product total value
|
||||||
|
// breakdown: {
|
||||||
|
// item_total: {
|
||||||
|
// currency_code: "USD",
|
||||||
|
// value: "60.00", // Replace with the total value of all items
|
||||||
|
// },
|
||||||
|
// },
|
||||||
|
},
|
||||||
|
//optional give product product also show in paypal dashboard
|
||||||
|
// items: [
|
||||||
|
// {
|
||||||
|
// name: "Apple",
|
||||||
|
// unit_amount: {
|
||||||
|
// currency_code: "USD",
|
||||||
|
// value: "60.00", // Replace with the actual item price
|
||||||
|
// },
|
||||||
|
// quantity: 1,
|
||||||
|
// },
|
||||||
|
// ],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
};
|
||||||
|
const response = await axios.post(
|
||||||
|
url,
|
||||||
|
JSON.stringify(createOrderRequest),
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
Authorization: `Bearer ${accessToken}`,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
if (response.status >= 200 && response.status < 300) {
|
||||||
|
let paymentOrderId = await Order.findById(order?._id);
|
||||||
|
paymentOrderId.paypal_payment_id = response.data?.id;
|
||||||
|
await paymentOrderId.save();
|
||||||
|
return res.status(201).json({
|
||||||
|
success: true,
|
||||||
|
responseData: response.data,
|
||||||
|
product_orderId: order?._id,
|
||||||
|
httpStatusCode: response.status,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Handle errors or unexpected status codes
|
||||||
|
console.error("Error:", response.status, response.statusText);
|
||||||
|
|
||||||
|
// Optionally, you can parse the error response as JSON if available
|
||||||
|
try {
|
||||||
|
const errorData = response.data;
|
||||||
|
console.error("Error Data:", errorData);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Error parsing error data:", error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
const errorMessage = await error.message;
|
||||||
|
return res.status(500).json({
|
||||||
|
success: false,
|
||||||
|
message: errorMessage,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Capture payment for the created order to complete the transaction.
|
||||||
|
* //see https://developer.paypal.com/docs/api/orders/v2/#orders_capture
|
||||||
|
*/
|
||||||
|
|
||||||
|
const captureOrder = async (orderID) => {
|
||||||
|
const accessToken = await generateAccessToken();
|
||||||
|
const url = `${base}/v2/checkout/orders/${orderID}/capture`;
|
||||||
|
const response = await axios.post(
|
||||||
|
url,
|
||||||
|
{},
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
Authorization: `Bearer ${accessToken}`,
|
||||||
|
// Uncomment one of these to force an error for negative testing (in sandbox mode only). Documentation:
|
||||||
|
// https://developer.paypal.com/tools/sandbox/negative-testing/request-headers/
|
||||||
|
// "PayPal-Mock-Response": '{"mock_application_codes": "INSTRUMENT_DECLINED"}'
|
||||||
|
// "PayPal-Mock-Response": '{"mock_application_codes": "TRANSACTION_REFUSED"}'
|
||||||
|
// "PayPal-Mock-Response": '{"mock_application_codes": "INTERNAL_SERVER_ERROR"}'
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return handleResponse(response);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const captureOrderPayment = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { orderID } = req.params;
|
||||||
|
|
||||||
|
const { responseData, httpStatusCode } = await captureOrder(orderID);
|
||||||
|
const payment = await Order.findOne({
|
||||||
|
paypal_payment_id: responseData?.id,
|
||||||
|
});
|
||||||
|
// Handle different transaction statuses
|
||||||
|
if (responseData?.status === "COMPLETED") {
|
||||||
|
payment.paypal_payer_id = responseData.payer?.payer_id;
|
||||||
|
payment.paidAt = Date.now();
|
||||||
|
payment.isPaid = true;
|
||||||
|
payment.payment_status = "success";
|
||||||
|
payment.orderStatus = "new";
|
||||||
|
await payment.save();
|
||||||
|
} else if (responseData?.status === "PENDING") {
|
||||||
|
console.log("Payment is pending.");
|
||||||
|
payment.paypal_payer_id = responseData.payer?.payer_id;
|
||||||
|
payment.paidAt = Date.now();
|
||||||
|
payment.payment_status = "pending";
|
||||||
|
await payment.save();
|
||||||
|
} else if (responseData?.status === "FAILED") {
|
||||||
|
payment.paypal_payer_id = responseData.payer?.payer_id;
|
||||||
|
payment.paidAt = Date.now();
|
||||||
|
payment.payment_status = "failed";
|
||||||
|
await payment.save();
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.status(httpStatusCode).json(responseData);
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Failed to create order:", error);
|
||||||
|
res.status(500).json({ error: "Failed to capture order." });
|
||||||
|
}
|
||||||
|
};
|
@ -1,76 +1,22 @@
|
|||||||
import { Order } from "./orderModel.js";
|
import { Order } from "./orderModel.js";
|
||||||
import { generate } from "generate-password";
|
|
||||||
const { PAYPAL_CLIENT_ID, PAYPAL_CLIENT_SECRET } = process.env;
|
|
||||||
const base = "https://api-m.sandbox.paypal.com";
|
|
||||||
import axios from "axios";
|
|
||||||
|
|
||||||
export const getClientId = async (req, res) => {
|
|
||||||
try {
|
|
||||||
res.status(200).json({
|
|
||||||
success: true,
|
|
||||||
clientId: PAYPAL_CLIENT_ID,
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
res.status(500).json({
|
|
||||||
success: false,
|
|
||||||
message: error.message ? error.message : "Something went Wrong",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const createOrder = async (req, res) => {
|
|
||||||
try {
|
|
||||||
if (!req?.user) return res.status(400).json({ message: "please login !" });
|
|
||||||
// console.log(req?.user)
|
|
||||||
let isUnique = false;
|
|
||||||
let order_id = generate({
|
|
||||||
length: 9,
|
|
||||||
numbers: true,
|
|
||||||
lowercase: false,
|
|
||||||
uppercase: false,
|
|
||||||
});
|
|
||||||
|
|
||||||
while (!isUnique) {
|
|
||||||
const unqOrder = await Order.findOne({ order_id });
|
|
||||||
if (!unqOrder) {
|
|
||||||
isUnique = true;
|
|
||||||
} else {
|
|
||||||
order_id = generate({
|
|
||||||
length: 9,
|
|
||||||
numbers: true,
|
|
||||||
lowercase: false,
|
|
||||||
uppercase: false,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
req.body.user = req.user._id;
|
|
||||||
req.body.order_id = order_id;
|
|
||||||
const order = await Order.create(req.body);
|
|
||||||
|
|
||||||
res.status(201).json({
|
|
||||||
success: true,
|
|
||||||
order,
|
|
||||||
message: "order Created",
|
|
||||||
});
|
|
||||||
} catch (error) {
|
|
||||||
res.status(500).json({
|
|
||||||
success: false,
|
|
||||||
message: error.message ? error.message : "Something went Wrong",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getAllOrder = async (req, res) => {
|
export const getAllOrder = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
if (!req?.user) return res.status(400).json({ message: "please login !" });
|
const order = await Order.find({
|
||||||
// console.log(req?.user)
|
payment_status: { $in: ["success", "failed"] },
|
||||||
|
})
|
||||||
const order = await Order.find()
|
|
||||||
.populate({
|
.populate({
|
||||||
path: "user",
|
path: "user",
|
||||||
select: "name -_id",
|
select: "name -_id",
|
||||||
})
|
})
|
||||||
|
.populate({
|
||||||
|
path: "shippingInfo",
|
||||||
|
|
||||||
|
// populate: {
|
||||||
|
// path: "Franchisee",
|
||||||
|
// select: "banner price_Lable ",
|
||||||
|
// },
|
||||||
|
})
|
||||||
.sort({ createdAt: -1 });
|
.sort({ createdAt: -1 });
|
||||||
if (order) {
|
if (order) {
|
||||||
res.status(201).json({
|
res.status(201).json({
|
||||||
@ -86,6 +32,7 @@ export const getAllOrder = async (req, res) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getSingleOrder = async (req, res) => {
|
export const getSingleOrder = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
if (!req?.user) return res.status(400).json({ message: "please login !" });
|
if (!req?.user) return res.status(400).json({ message: "please login !" });
|
||||||
@ -122,44 +69,21 @@ export const getSingleOrder = async (req, res) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const EditOrderBeforePayment = async (req, res) => {
|
//get self User Order
|
||||||
|
export const getUserSelf = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
if (!req?.user) return res.status(400).json({ message: "please login !" });
|
const order = await Order.find({
|
||||||
// console.log(req?.user)
|
user: req.user._id,
|
||||||
if (!req.params.id)
|
payment_status: "success",
|
||||||
return res.status(400).json({ message: "please Provide Order Id" });
|
})
|
||||||
|
.populate("shippingInfo")
|
||||||
const order = await Order.findById(req.params.id);
|
.sort({ createdAt: -1 });
|
||||||
if (order) {
|
if (order) {
|
||||||
if (order.isPaid === false) {
|
return res.status(200).json({
|
||||||
if (order.user.toString() === req.user._id.toString()) {
|
success: true,
|
||||||
req.body.user = req.user._id;
|
order,
|
||||||
|
message: "self Order fetched",
|
||||||
const ModifyOrder = await Order.findByIdAndUpdate(
|
});
|
||||||
req.params.id,
|
|
||||||
req.body,
|
|
||||||
|
|
||||||
{
|
|
||||||
new: true,
|
|
||||||
runValidators: true,
|
|
||||||
useFindAndModify: false,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
res.status(200).json({
|
|
||||||
success: true,
|
|
||||||
order: ModifyOrder,
|
|
||||||
message: " Order Updated",
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
return res.status(400).json({
|
|
||||||
message: "You not created This So You Can not Edit this Order !! ",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return res
|
|
||||||
.status(400)
|
|
||||||
.json({ message: "order can not Edited Because Payment Done !! " });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
res.status(500).json({
|
res.status(500).json({
|
||||||
@ -194,169 +118,3 @@ export const deleteOneOrder = async (req, res) => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// parse post params sent in body in json format
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generate an OAuth 2.0 access token for authenticating with PayPal REST APIs.
|
|
||||||
// https://developer.paypal.com/api/rest/authentication/
|
|
||||||
*/
|
|
||||||
const generateAccessToken = async () => {
|
|
||||||
const credentials = `${PAYPAL_CLIENT_ID}:${PAYPAL_CLIENT_SECRET}`;
|
|
||||||
const base64Credentials = Buffer.from(credentials).toString("base64");
|
|
||||||
|
|
||||||
const headers = {
|
|
||||||
"Content-Type": "application/x-www-form-urlencoded",
|
|
||||||
Authorization: `Basic ${base64Credentials}`,
|
|
||||||
};
|
|
||||||
|
|
||||||
const data = "grant_type=client_credentials";
|
|
||||||
|
|
||||||
try {
|
|
||||||
const response = await axios.post(
|
|
||||||
"https://api.sandbox.paypal.com/v1/oauth2/token",
|
|
||||||
data,
|
|
||||||
{
|
|
||||||
headers: headers,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
// console.log("response.data", response.data);
|
|
||||||
const accessToken = response.data?.access_token;
|
|
||||||
return accessToken;
|
|
||||||
// console.log("Access Token:", accessToken);
|
|
||||||
} catch (error) {
|
|
||||||
console.error(
|
|
||||||
"Error getting access token:",
|
|
||||||
error.response ? error.response.data : error.message
|
|
||||||
);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
// } catch (error) {
|
|
||||||
// console.error("Failed to generate Access Token:");
|
|
||||||
// }
|
|
||||||
// };
|
|
||||||
|
|
||||||
const handleResponse = async (response) => {
|
|
||||||
try {
|
|
||||||
if (response.status >= 200 && response.status < 300) {
|
|
||||||
return {
|
|
||||||
success: true,
|
|
||||||
responseData: response.data,
|
|
||||||
httpStatusCode: response.status,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
const errorMessage = await response.statusText;
|
|
||||||
throw new Error(errorMessage);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// https://developer.paypal.com/docs/api/orders/v2/#orders_create
|
|
||||||
|
|
||||||
export const createOrderCheckout = async (rea, res) => {
|
|
||||||
try {
|
|
||||||
// const { cart } = req.body;
|
|
||||||
// use the cart information passed from the front-end to calculate the purchase unit details
|
|
||||||
// console.log(
|
|
||||||
// "shopping cart information passed from the frontend createOrder() callback:",
|
|
||||||
// cart
|
|
||||||
// );
|
|
||||||
const accessToken = await generateAccessToken();
|
|
||||||
const url = `https://api.sandbox.paypal.com/v2/checkout/orders`;
|
|
||||||
const createOrderRequest = {
|
|
||||||
intent: "CAPTURE",
|
|
||||||
purchase_units: [
|
|
||||||
{
|
|
||||||
amount: {
|
|
||||||
currency_code: "USD",
|
|
||||||
value: "60.00", // Replace with the actual amount
|
|
||||||
breakdown: {
|
|
||||||
item_total: {
|
|
||||||
currency_code: "USD",
|
|
||||||
value: "60.00", // Replace with the total value of all items
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
items: [
|
|
||||||
{
|
|
||||||
name: "Apple",
|
|
||||||
unit_amount: {
|
|
||||||
currency_code: "USD",
|
|
||||||
value: "60.00", // Replace with the actual item price
|
|
||||||
},
|
|
||||||
quantity: 1,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
};
|
|
||||||
const response = await axios.post(url, JSON.stringify(createOrderRequest), {
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
Authorization: `Bearer ${accessToken}`,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
if (response.status >= 200 && response.status < 300) {
|
|
||||||
return res.status(201).json({
|
|
||||||
success: true,
|
|
||||||
responseData: response.data,
|
|
||||||
httpStatusCode: response.status,
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
// Handle errors or unexpected status codes
|
|
||||||
console.error("Error:", response.status, response.statusText);
|
|
||||||
|
|
||||||
// Optionally, you can parse the error response as JSON if available
|
|
||||||
try {
|
|
||||||
const errorData = response.data;
|
|
||||||
console.error("Error Data:", errorData);
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Error parsing error data:", error.message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
const errorMessage = await response.statusText;
|
|
||||||
return res.status(500).json({
|
|
||||||
success: false,
|
|
||||||
message: errorMessage,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Capture payment for the created order to complete the transaction.
|
|
||||||
* //see https://developer.paypal.com/docs/api/orders/v2/#orders_capture
|
|
||||||
*/
|
|
||||||
|
|
||||||
const captureOrder = async (orderID) => {
|
|
||||||
const accessToken = await generateAccessToken();
|
|
||||||
const url = `${base}/v2/checkout/orders/${orderID}/capture`;
|
|
||||||
const response = await axios.post(
|
|
||||||
url,
|
|
||||||
{},
|
|
||||||
{
|
|
||||||
headers: {
|
|
||||||
"Content-Type": "application/json",
|
|
||||||
Authorization: `Bearer ${accessToken}`,
|
|
||||||
// Uncomment one of these to force an error for negative testing (in sandbox mode only). Documentation:
|
|
||||||
// https://developer.paypal.com/tools/sandbox/negative-testing/request-headers/
|
|
||||||
// "PayPal-Mock-Response": '{"mock_application_codes": "INSTRUMENT_DECLINED"}'
|
|
||||||
// "PayPal-Mock-Response": '{"mock_application_codes": "TRANSACTION_REFUSED"}'
|
|
||||||
// "PayPal-Mock-Response": '{"mock_application_codes": "INTERNAL_SERVER_ERROR"}'
|
|
||||||
},
|
|
||||||
}
|
|
||||||
);
|
|
||||||
return handleResponse(response);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const captureOrderPayment = async (req, res) => {
|
|
||||||
try {
|
|
||||||
const { orderID } = req.params;
|
|
||||||
const { responseData, httpStatusCode } = await captureOrder(orderID);
|
|
||||||
return res.status(httpStatusCode).json(responseData);
|
|
||||||
} catch (error) {
|
|
||||||
console.error("Failed to create order:", error);
|
|
||||||
res.status(500).json({ error: "Failed to capture order." });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
@ -1,158 +1,110 @@
|
|||||||
import mongoose from "mongoose";
|
import mongoose from "mongoose";
|
||||||
|
|
||||||
|
|
||||||
const orderSchema = new mongoose.Schema(
|
const orderSchema = new mongoose.Schema(
|
||||||
{
|
{
|
||||||
order_id: { type: String },
|
orderID: {
|
||||||
user: {
|
type: String,
|
||||||
type: mongoose.Schema.ObjectId,
|
required: true,
|
||||||
ref: "User",
|
unique: true,
|
||||||
required: true,
|
|
||||||
},
|
|
||||||
|
|
||||||
shippingInfo: {
|
|
||||||
name: { type: String, required: true, },
|
|
||||||
address: {
|
|
||||||
type: String,
|
|
||||||
default: '',
|
|
||||||
},
|
|
||||||
contact_Person_Name: { type: String, default: "" },
|
|
||||||
city: {
|
|
||||||
type: String,
|
|
||||||
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
|
|
||||||
state: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
pinCode: {
|
|
||||||
type: Number,
|
|
||||||
default: '',
|
|
||||||
},
|
|
||||||
contact_Number: {
|
|
||||||
type: Number,
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
|
|
||||||
Franchisee: {
|
|
||||||
type: mongoose.Schema.ObjectId,
|
|
||||||
ref: "Temple",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
orderItems: [
|
|
||||||
{
|
|
||||||
name: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
price: {
|
|
||||||
type: Number,
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
quantity: {
|
|
||||||
type: Number,
|
|
||||||
default: '',
|
|
||||||
default: 1
|
|
||||||
},
|
|
||||||
image: {
|
|
||||||
type: String,
|
|
||||||
default: '',
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
price_With_Tax: {
|
|
||||||
type: Number,
|
|
||||||
default: '',
|
|
||||||
},
|
|
||||||
|
|
||||||
taxId: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
|
|
||||||
product: {
|
|
||||||
type: mongoose.Schema.ObjectId,
|
|
||||||
ref: "Product",
|
|
||||||
|
|
||||||
},
|
|
||||||
},
|
|
||||||
],
|
|
||||||
|
|
||||||
shipping_charge: { type: Number, default: 0 },
|
|
||||||
tax_amount: { type: Number, default: 0 },
|
|
||||||
total_amount: { type: Number, default: 0 },
|
|
||||||
weight: { type: Number, default: 0 },
|
|
||||||
|
|
||||||
paymentMode: {
|
|
||||||
type: String,
|
|
||||||
default: ''
|
|
||||||
},
|
|
||||||
paymentInfo: {
|
|
||||||
id: {
|
|
||||||
type: String,
|
|
||||||
// required: true,
|
|
||||||
default: ""
|
|
||||||
},
|
|
||||||
status: {
|
|
||||||
type: String,
|
|
||||||
enum: ["pending", "success", "failed"],
|
|
||||||
},
|
|
||||||
paymentTime: {
|
|
||||||
type: Date,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
isPaid: {
|
|
||||||
type: Boolean,
|
|
||||||
default: false
|
|
||||||
},
|
|
||||||
paidAt: {
|
|
||||||
type: Date,
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
orderStatus: {
|
|
||||||
type: String,
|
|
||||||
enum: [
|
|
||||||
"new",
|
|
||||||
"processing",
|
|
||||||
"dispatched",
|
|
||||||
"delivered",
|
|
||||||
"cancelled",
|
|
||||||
"returned",
|
|
||||||
],
|
|
||||||
default: "new",
|
|
||||||
},
|
|
||||||
|
|
||||||
// razorpay_order_id: { type: String },
|
|
||||||
// razorpay_payment_id: { type: String },
|
|
||||||
// razorpay_signature: { type: String },
|
|
||||||
// order_used: { type: Boolean, default: false },
|
|
||||||
// isDelivered: { type: Boolean,required:true,default:false },
|
|
||||||
// deliveredAt: { type: Date },
|
|
||||||
status_timeline: {
|
|
||||||
new: { type: Date },
|
|
||||||
processing: { type: Date },
|
|
||||||
dispatched: { type: Date },
|
|
||||||
delivered: { type: Date },
|
|
||||||
cancelled: { type: Date },
|
|
||||||
returned: { type: Date },
|
|
||||||
},
|
|
||||||
// courier_name: { type: String },
|
|
||||||
// tracking_id: { type: String },
|
|
||||||
},
|
},
|
||||||
{ timestamps: true, versionKey: false }
|
user: {
|
||||||
|
type: mongoose.Schema.ObjectId,
|
||||||
|
ref: "User",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
shippingInfo: {
|
||||||
|
type: mongoose.Schema.ObjectId,
|
||||||
|
ref: "ShippingAddress",
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
|
orderItems: [
|
||||||
|
{
|
||||||
|
name: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
price: {
|
||||||
|
type: Number,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
quantity: {
|
||||||
|
type: Number,
|
||||||
|
default: "",
|
||||||
|
default: 1,
|
||||||
|
},
|
||||||
|
image: [{}],
|
||||||
|
|
||||||
|
price_With_Tax: {
|
||||||
|
type: Number,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
|
||||||
|
taxId: {
|
||||||
|
type: String,
|
||||||
|
default: "",
|
||||||
|
},
|
||||||
|
|
||||||
|
product: {
|
||||||
|
type: mongoose.Schema.ObjectId,
|
||||||
|
ref: "Product",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
],
|
||||||
|
|
||||||
|
shipping_charge: { type: Number, default: 0 },
|
||||||
|
tax_amount: { type: Number, default: 0 },
|
||||||
|
total_amount: { type: Number, default: 0 },
|
||||||
|
weight: { type: Number, default: 0 },
|
||||||
|
|
||||||
|
paymentMode: {
|
||||||
|
type: String,
|
||||||
|
enum: ["online", "cod"],
|
||||||
|
default: "online",
|
||||||
|
},
|
||||||
|
|
||||||
|
payment_status: {
|
||||||
|
type: String,
|
||||||
|
enum: ["pending", "success", "failed"],
|
||||||
|
},
|
||||||
|
isPaid: {
|
||||||
|
type: Boolean,
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
|
paidAt: {
|
||||||
|
type: Date,
|
||||||
|
},
|
||||||
|
|
||||||
|
orderStatus: {
|
||||||
|
type: String,
|
||||||
|
enum: [
|
||||||
|
"new",
|
||||||
|
"processing",
|
||||||
|
"dispatched",
|
||||||
|
"delivered",
|
||||||
|
"cancelled",
|
||||||
|
"returned",
|
||||||
|
],
|
||||||
|
// default: "new",
|
||||||
|
},
|
||||||
|
|
||||||
|
paypal_payer_id: { type: String },
|
||||||
|
paypal_payment_id: { type: String },
|
||||||
|
// paypal_signature: { type: String },
|
||||||
|
// order_used: { type: Boolean, default: false },
|
||||||
|
// isDelivered: { type: Boolean,required:true,default:false },
|
||||||
|
// deliveredAt: { type: Date },
|
||||||
|
status_timeline: {
|
||||||
|
new: { type: Date },
|
||||||
|
processing: { type: Date },
|
||||||
|
dispatched: { type: Date },
|
||||||
|
delivered: { type: Date },
|
||||||
|
cancelled: { type: Date },
|
||||||
|
returned: { type: Date },
|
||||||
|
},
|
||||||
|
// courier_name: { type: String },
|
||||||
|
// tracking_id: { type: String },
|
||||||
|
},
|
||||||
|
{ timestamps: true }
|
||||||
);
|
);
|
||||||
|
|
||||||
export const Order = mongoose.model("Order", orderSchema);
|
export const Order = mongoose.model("Order", orderSchema);
|
||||||
|
@ -1,34 +1,33 @@
|
|||||||
import {
|
import {
|
||||||
captureOrderPayment,
|
|
||||||
createOrder,
|
|
||||||
createOrderCheckout,
|
|
||||||
deleteOneOrder,
|
deleteOneOrder,
|
||||||
EditOrderBeforePayment,
|
|
||||||
getAllOrder,
|
getAllOrder,
|
||||||
getSingleOrder,
|
getSingleOrder,
|
||||||
getClientId,
|
getUserSelf,
|
||||||
} from "./orderController.js";
|
} from "./orderController.js";
|
||||||
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
|
import { isAuthenticatedUser, authorizeRoles } from "../../middlewares/auth.js";
|
||||||
import express from "express";
|
import express from "express";
|
||||||
|
import {
|
||||||
|
captureOrderPayment,
|
||||||
|
createOrderCheckout,
|
||||||
|
getClientId,
|
||||||
|
} from "./CheckoutController.js";
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
router.route("/checkout/").post(createOrderCheckout);
|
//checkout Routes-------------------------//
|
||||||
router.route("/clientid/get/").get(getClientId);
|
router.route("/checkout/").post(isAuthenticatedUser, createOrderCheckout);
|
||||||
|
router.route("/clientid/get/").get(isAuthenticatedUser, getClientId);
|
||||||
router.route("/:orderID/capture/payment").post(captureOrderPayment);
|
router.route("/:orderID/capture/payment").post(captureOrderPayment);
|
||||||
|
// ---------------------------------------------------
|
||||||
|
//get user self
|
||||||
|
router.route("/user/self").get(isAuthenticatedUser, getUserSelf);
|
||||||
|
|
||||||
// .capturePayment(orderID)
|
//admin route
|
||||||
router
|
|
||||||
.route("/order/create")
|
|
||||||
.post(isAuthenticatedUser, authorizeRoles("admin"), createOrder);
|
|
||||||
router
|
router
|
||||||
.route("/order/getAll")
|
.route("/order/getAll")
|
||||||
.get(isAuthenticatedUser, authorizeRoles("admin"), getAllOrder);
|
.get(isAuthenticatedUser, authorizeRoles("admin"), getAllOrder);
|
||||||
router
|
router.route("/order/getOne/:id").get(isAuthenticatedUser, getSingleOrder);
|
||||||
.route("/order/getOne/:id")
|
// router
|
||||||
.get(isAuthenticatedUser, authorizeRoles("admin"), getSingleOrder);
|
// .route("/order/edit/:id")
|
||||||
router
|
// .put(isAuthenticatedUser, authorizeRoles("admin"), EditOrderBeforePayment);
|
||||||
.route("/order/edit/:id")
|
|
||||||
.put(isAuthenticatedUser, authorizeRoles("admin"), EditOrderBeforePayment);
|
|
||||||
|
|
||||||
router
|
router
|
||||||
.route("/order/delete/:id")
|
.route("/order/delete/:id")
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
import { shippingAddress } from "./ShippingAddressModel.js";
|
import { shippingAddress } from "./ShippingAddressModel.js";
|
||||||
import { generate } from "generate-password";
|
|
||||||
|
|
||||||
export const AddshippingAddress = async (req, res) => {
|
export const AddshippingAddress = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
const {
|
const {
|
||||||
@ -13,7 +11,6 @@ export const AddshippingAddress = async (req, res) => {
|
|||||||
postalCode,
|
postalCode,
|
||||||
country,
|
country,
|
||||||
} = req.body;
|
} = req.body;
|
||||||
console.log("hiiii");
|
|
||||||
switch (true) {
|
switch (true) {
|
||||||
//validation
|
//validation
|
||||||
case !first_Name: {
|
case !first_Name: {
|
||||||
@ -41,46 +38,7 @@ export const AddshippingAddress = async (req, res) => {
|
|||||||
return res.status(404).json({ msg: "please provide country" });
|
return res.status(404).json({ msg: "please provide country" });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// let isUnique = false;
|
|
||||||
// let Machine_ID = generate({
|
|
||||||
// length: 8,
|
|
||||||
// numbers: true,
|
|
||||||
// lowercase: false,
|
|
||||||
// uppercase: false,
|
|
||||||
// });
|
|
||||||
// let Tablet_ID = generate({
|
|
||||||
// length: 8,
|
|
||||||
// numbers: true,
|
|
||||||
// lowercase: false,
|
|
||||||
// uppercase: false,
|
|
||||||
// });
|
|
||||||
|
|
||||||
// while (!isUnique) {
|
|
||||||
// const unqmachine = await shippingAddress.findOne({ Machine_ID });
|
|
||||||
// if (!unqmachine) {
|
|
||||||
// isUnique = true;
|
|
||||||
// console.log(unqmachine);
|
|
||||||
// } else {
|
|
||||||
// Machine_ID = generate({
|
|
||||||
// length: 8,
|
|
||||||
// numbers: true,
|
|
||||||
// lowercase: false,
|
|
||||||
// uppercase: false,
|
|
||||||
// });
|
|
||||||
// Tablet_ID = generate({
|
|
||||||
// length: 8,
|
|
||||||
// numbers: true,
|
|
||||||
// lowercase: false,
|
|
||||||
// uppercase: false,
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
req.body.user = req.user._id;
|
req.body.user = req.user._id;
|
||||||
// req.body.Machine_ID = Machine_ID;
|
|
||||||
// req.body.Tablet_ID = Tablet_ID;
|
|
||||||
|
|
||||||
const address = await shippingAddress.create(req.body);
|
const address = await shippingAddress.create(req.body);
|
||||||
|
|
||||||
res.status(201).json({
|
res.status(201).json({
|
||||||
@ -96,167 +54,17 @@ export const AddshippingAddress = async (req, res) => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const getAllmachine = async (req, res) => {
|
export const getSingleUserSippingAddress = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
if (!req?.user) return res.status(400).json({ message: "please login !" });
|
const UserShippingAddress = await shippingAddress
|
||||||
// console.log(req?.user)
|
.find({ user: req.user._id })
|
||||||
|
|
||||||
const machine = await shippingAddress
|
|
||||||
.find()
|
|
||||||
.populate({
|
|
||||||
path: "user",
|
|
||||||
select: "name -_id",
|
|
||||||
})
|
|
||||||
.populate({
|
|
||||||
path: "Allocated_To",
|
|
||||||
select: "name _id",
|
|
||||||
})
|
|
||||||
.sort({ createdAt: -1 });
|
.sort({ createdAt: -1 });
|
||||||
if (machine) {
|
if (UserShippingAddress) {
|
||||||
res.status(201).json({
|
res.status(201).json({
|
||||||
success: true,
|
success: true,
|
||||||
machine,
|
UserShippingAddress,
|
||||||
message: "All machine Fetched",
|
message: "All User Shipping Address Fetched",
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
res.status(500).json({
|
|
||||||
success: false,
|
|
||||||
message: error.message ? error.message : "Something went Wrong",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
export const getSinglemachine = async (req, res) => {
|
|
||||||
try {
|
|
||||||
if (!req?.user) return res.status(400).json({ message: "please login !" });
|
|
||||||
// console.log(req?.user)
|
|
||||||
if (!req.params.id)
|
|
||||||
return res.status(400).json({ message: "please Provide machine Id" });
|
|
||||||
|
|
||||||
const machine = await shippingAddress
|
|
||||||
.findById(req.params.id)
|
|
||||||
.populate({
|
|
||||||
path: "user",
|
|
||||||
select: "name -_id",
|
|
||||||
})
|
|
||||||
.populate({
|
|
||||||
path: "Allocated_To",
|
|
||||||
select: "name _id",
|
|
||||||
});
|
|
||||||
if (machine) {
|
|
||||||
res.status(201).json({
|
|
||||||
success: true,
|
|
||||||
machine,
|
|
||||||
message: " machine Fetched",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
res.status(500).json({
|
|
||||||
success: false,
|
|
||||||
message: error.message ? error.message : "Something went Wrong",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
export const EditMachine = async (req, res) => {
|
|
||||||
try {
|
|
||||||
if (!req?.user) return res.status(400).json({ message: "please login !" });
|
|
||||||
// console.log(req?.user)
|
|
||||||
|
|
||||||
const { Allocated_To, Allocated_On } = req.body;
|
|
||||||
switch (true) {
|
|
||||||
//validation
|
|
||||||
|
|
||||||
case !Allocated_To: {
|
|
||||||
return res.status(404).json({ msg: "please provide Allocated To" });
|
|
||||||
}
|
|
||||||
case !Allocated_On: {
|
|
||||||
return res.status(404).json({ msg: "please provide AllocatedOn Date" });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const machine = await shippingAddress.findById(req.params.id);
|
|
||||||
if (machine) {
|
|
||||||
const Modifymachine = await shippingAddress.findByIdAndUpdate(
|
|
||||||
req.params.id,
|
|
||||||
req.body,
|
|
||||||
|
|
||||||
{
|
|
||||||
new: true,
|
|
||||||
runValidators: true,
|
|
||||||
useFindAndModify: false,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
res.status(200).json({
|
|
||||||
success: true,
|
|
||||||
machine: Modifymachine,
|
|
||||||
message: " shippingAddress Updated",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
res.status(500).json({
|
|
||||||
success: false,
|
|
||||||
message: error.message ? error.message : "Something went Wrong",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
//varification
|
|
||||||
export const machineVarificationFromAdmin = async (req, res) => {
|
|
||||||
try {
|
|
||||||
if (!req?.user) return res.status(400).json({ message: "please login !" });
|
|
||||||
// console.log(req?.user)
|
|
||||||
if (!req.params.id)
|
|
||||||
return res.status(400).json({ message: "please Provide machine Id" });
|
|
||||||
const getMachine = await shippingAddress.findById(req.params.id);
|
|
||||||
if (getMachine) {
|
|
||||||
if (req.user.role === "admin") {
|
|
||||||
if (getMachine.Status === false) {
|
|
||||||
getMachine.Status = true;
|
|
||||||
} else {
|
|
||||||
getMachine.Status = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
getMachine.save();
|
|
||||||
|
|
||||||
return res.status(200).json({
|
|
||||||
success: true,
|
|
||||||
message: `shippingAddress status change successfully`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
return res.status(400).json({ message: "Only Admin Change Status" });
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
// console.log(err)
|
|
||||||
return res
|
|
||||||
.status(500)
|
|
||||||
.json({ message: err.message ? err.message : "Something went wrong." });
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//get machine using franchisee id
|
|
||||||
|
|
||||||
export const getMachineDetails = async (req, res) => {
|
|
||||||
try {
|
|
||||||
if (!req?.franchi)
|
|
||||||
return res.status(400).json({ message: "please login !" });
|
|
||||||
|
|
||||||
const machine = await shippingAddress
|
|
||||||
.find({
|
|
||||||
Allocated_To: req.franchi._id,
|
|
||||||
Status: true,
|
|
||||||
})
|
|
||||||
.populate({
|
|
||||||
path: "Allocated_To",
|
|
||||||
select: "name _id",
|
|
||||||
});
|
|
||||||
if (machine) {
|
|
||||||
res.status(201).json({
|
|
||||||
success: true,
|
|
||||||
machine,
|
|
||||||
message: " machine Fetched",
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -268,27 +76,32 @@ export const getMachineDetails = async (req, res) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
///
|
///
|
||||||
export const deleteOneMachine = async (req, res) => {
|
export const deleteSelfShippingAddress = async (req, res) => {
|
||||||
try {
|
try {
|
||||||
if (!req?.user) return res.status(400).json({ message: "please login !" });
|
|
||||||
if (!req.params.id)
|
if (!req.params.id)
|
||||||
return res
|
return res
|
||||||
.status(400)
|
.status(400)
|
||||||
.json({ message: "please Provide shippingAddress Id" });
|
.json({ message: "please Provide shipping Address Id" });
|
||||||
const getmachine = await shippingAddress.findById(req.params.id);
|
const getselfAddress = await shippingAddress.findById(req.params.id);
|
||||||
if (!getmachine) {
|
if (!getselfAddress) {
|
||||||
return res.status(404).json({
|
return res.status(404).json({
|
||||||
success: false,
|
success: false,
|
||||||
message: "No shippingAddress Found!",
|
message: "No shipping Address Found!",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (getselfAddress?.user.toString() === req.user._id.toString()) {
|
||||||
|
const address = await shippingAddress.findByIdAndDelete(req.params.id);
|
||||||
|
await address.remove();
|
||||||
|
return res.status(200).json({
|
||||||
|
success: true,
|
||||||
|
message: "shipping Address Deleted Successfully!!",
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
return res.status(400).json({
|
||||||
|
success: false,
|
||||||
|
message: "you can only delete self shipping address!!",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
const machine = await shippingAddress.findByIdAndDelete(req.params.id);
|
|
||||||
|
|
||||||
await machine.remove();
|
|
||||||
res.status(200).json({
|
|
||||||
success: true,
|
|
||||||
message: "shippingAddress Deleted Successfully!!",
|
|
||||||
});
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
res.status(500).json({
|
res.status(500).json({
|
||||||
success: false,
|
success: false,
|
||||||
|
@ -1,30 +1,19 @@
|
|||||||
import express from "express";
|
import express from "express";
|
||||||
import { AddshippingAddress } from "./ShippingAddressController.js";
|
import {
|
||||||
|
AddshippingAddress,
|
||||||
|
getSingleUserSippingAddress,
|
||||||
|
deleteSelfShippingAddress,
|
||||||
|
} from "./ShippingAddressController.js";
|
||||||
import { isAuthenticatedUser } from "../../middlewares/auth.js";
|
import { isAuthenticatedUser } from "../../middlewares/auth.js";
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
router.route("/new").post(isAuthenticatedUser, AddshippingAddress);
|
router.route("/new").post(isAuthenticatedUser, AddshippingAddress);
|
||||||
// router
|
router
|
||||||
// .route("/getAll")
|
.route("/user/address/")
|
||||||
// .get(isAuthenticatedUser, getAllmachine);
|
.get(isAuthenticatedUser, getSingleUserSippingAddress);
|
||||||
// router
|
|
||||||
// .route("/getOne/:id")
|
|
||||||
// .get(isAuthenticatedUser, getSinglemachine);
|
|
||||||
// router
|
|
||||||
// .route("/edit/:id")
|
|
||||||
// .put(isAuthenticatedUser, EditMachine);
|
|
||||||
|
|
||||||
// router
|
router
|
||||||
// .route("/delete/:id")
|
.route("/delete/:id")
|
||||||
// .delete(isAuthenticatedUser, deleteOneMachine);
|
.delete(isAuthenticatedUser, deleteSelfShippingAddress);
|
||||||
// router
|
|
||||||
// .route("/admin/verify/:id")
|
|
||||||
// .get(
|
|
||||||
// isAuthenticatedUser,
|
|
||||||
// authorizeRoles("admin"),
|
|
||||||
// machineVarificationFromAdmin
|
|
||||||
// );
|
|
||||||
|
|
||||||
//
|
|
||||||
|
|
||||||
export default router;
|
export default router;
|
||||||
|
Loading…
Reference in New Issue
Block a user