Initial Version
This commit is contained in:
155
server/controllers/orderController.js
Normal file
155
server/controllers/orderController.js
Normal file
@@ -0,0 +1,155 @@
|
||||
const asyncErrorHandler = require('../middlewares/helpers/asyncErrorHandler');
|
||||
const Order = require('../models/orderModel');
|
||||
const Product = require('../models/productModel');
|
||||
const ErrorHandler = require('../utils/errorHandler');
|
||||
const sendEmail = require('../utils/sendEmail');
|
||||
|
||||
// Create New Order
|
||||
exports.newOrder = asyncErrorHandler(async (req, res, next) => {
|
||||
|
||||
const {
|
||||
shippingInfo,
|
||||
orderItems,
|
||||
paymentInfo,
|
||||
totalPrice,
|
||||
} = req.body;
|
||||
|
||||
const orderExist = await Order.findOne({ paymentInfo });
|
||||
|
||||
if (orderExist) {
|
||||
return next(new ErrorHandler("Order Already Placed", 400));
|
||||
}
|
||||
|
||||
const order = await Order.create({
|
||||
shippingInfo,
|
||||
orderItems,
|
||||
paymentInfo,
|
||||
totalPrice,
|
||||
paidAt: Date.now(),
|
||||
user: req.user._id,
|
||||
});
|
||||
|
||||
await sendEmail({
|
||||
email: req.user.email,
|
||||
templateId: process.env.SENDGRID_ORDER_TEMPLATEID,
|
||||
data: {
|
||||
name: req.user.name,
|
||||
shippingInfo,
|
||||
orderItems,
|
||||
totalPrice,
|
||||
oid: order._id,
|
||||
}
|
||||
});
|
||||
|
||||
res.status(201).json({
|
||||
success: true,
|
||||
order,
|
||||
});
|
||||
});
|
||||
|
||||
// Get Single Order Details
|
||||
exports.getSingleOrderDetails = asyncErrorHandler(async (req, res, next) => {
|
||||
|
||||
const order = await Order.findById(req.params.id).populate("user", "name email");
|
||||
|
||||
if (!order) {
|
||||
return next(new ErrorHandler("Order Not Found", 404));
|
||||
}
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
order,
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// Get Logged In User Orders
|
||||
exports.myOrders = asyncErrorHandler(async (req, res, next) => {
|
||||
|
||||
const orders = await Order.find({ user: req.user._id });
|
||||
|
||||
if (!orders) {
|
||||
return next(new ErrorHandler("Order Not Found", 404));
|
||||
}
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
orders,
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
// Get All Orders ---ADMIN
|
||||
exports.getAllOrders = asyncErrorHandler(async (req, res, next) => {
|
||||
|
||||
const orders = await Order.find();
|
||||
|
||||
if (!orders) {
|
||||
return next(new ErrorHandler("Order Not Found", 404));
|
||||
}
|
||||
|
||||
let totalAmount = 0;
|
||||
orders.forEach((order) => {
|
||||
totalAmount += order.totalPrice;
|
||||
});
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
orders,
|
||||
totalAmount,
|
||||
});
|
||||
});
|
||||
|
||||
// Update Order Status ---ADMIN
|
||||
exports.updateOrder = asyncErrorHandler(async (req, res, next) => {
|
||||
|
||||
const order = await Order.findById(req.params.id);
|
||||
|
||||
if (!order) {
|
||||
return next(new ErrorHandler("Order Not Found", 404));
|
||||
}
|
||||
|
||||
if (order.orderStatus === "Delivered") {
|
||||
return next(new ErrorHandler("Already Delivered", 400));
|
||||
}
|
||||
|
||||
if (req.body.status === "Shipped") {
|
||||
order.shippedAt = Date.now();
|
||||
order.orderItems.forEach(async (i) => {
|
||||
await updateStock(i.product, i.quantity)
|
||||
});
|
||||
}
|
||||
|
||||
order.orderStatus = req.body.status;
|
||||
if (req.body.status === "Delivered") {
|
||||
order.deliveredAt = Date.now();
|
||||
}
|
||||
|
||||
await order.save({ validateBeforeSave: false });
|
||||
|
||||
res.status(200).json({
|
||||
success: true
|
||||
});
|
||||
});
|
||||
|
||||
async function updateStock(id, quantity) {
|
||||
const product = await Product.findById(id);
|
||||
product.stock -= quantity;
|
||||
await product.save({ validateBeforeSave: false });
|
||||
}
|
||||
|
||||
// Delete Order ---ADMIN
|
||||
exports.deleteOrder = asyncErrorHandler(async (req, res, next) => {
|
||||
|
||||
const order = await Order.findById(req.params.id);
|
||||
|
||||
if (!order) {
|
||||
return next(new ErrorHandler("Order Not Found", 404));
|
||||
}
|
||||
|
||||
await order.remove();
|
||||
|
||||
res.status(200).json({
|
||||
success: true,
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user