Untitled
unknown
plain_text
3 years ago
3.4 kB
7
Indexable
const createOrder = handleAsync(async (req, res) => {
const { products, price, qty } = req.body;
var fetchedProducts = [];
try {
fetchedProducts = await Promise.all(
products.map(
(order) =>
new Promise(async function (resolve, reject) {
const productExists = await Product.findByPk(order.id);
if (!productExists) reject("Invalid Id");
resolve(productExists);
})
)
);
} catch (error) {
return new ErrorResponse({ res, error: "Invalid Product Id" });
}
const finalAmount = fetchedProducts.reduce(
(acc, cv) => acc + cv.qty * cv.sellingPrice,
0
);
const finalQty = products.reduce((acc, cv) => acc + cv.qty, 0);
const transaction = await sequelize.transaction();
try {
const savedOrder = await Order.create(
{
finalPrice: finalAmount,
quantity: finalQty,
products: fetchedProducts,
},
{ transaction }
);
const test = fetchedProducts.map((product) => {
return {
orderId: savedOrder.orderId,
productId: product.productId,
};
});
await OrderProduct.bulkCreate(test, {
transaction,
});
await transaction.commit();
return new SuccessResponse({ res });
// if (savedOrderProducts) {
// }
} catch (error) {
console.log(error);
transaction.rollback();
return new ErrorResponse({ res });
}
});
Models
Order Model -
const Order = sequelize.define(
"Order",
{
orderId: {
type: Sequelize.UUID,
allowNull: false,
defaultValue: Sequelize.UUIDV4,
primaryKey: true,
},
quantity: {
type: Sequelize.INTEGER,
allowNull: false,
},
finalPrice: {
type: Sequelize.INTEGER,
allowNull: false,
},
},
{
timestamps: true,
}
);
Product Model -
const Product = sequelize.define(
"Product",
{
productId: {
type: Sequelize.UUID,
allowNull: false,
defaultValue: Sequelize.UUIDV4,
primaryKey: true,
},
title: {
type: Sequelize.STRING,
allowNull: false,
},
description: {
type: Sequelize.STRING,
allowNull: true,
},
mrpPrice: {
type: Sequelize.INTEGER,
allowNull: true,
},
costPrice: {
type: Sequelize.INTEGER,
allowNull: true,
},
sellingPrice: {
type: Sequelize.INTEGER,
allowNull: true,
},
stock: {
type: Sequelize.INTEGER,
allowNull: true,
},
itemCode: {
type: Sequelize.INTEGER,
autoIncrement: true,
allowNull: false,
},
isDisabled: {
type: Sequelize.BOOLEAN,
allowNull: false,
defaultValue: false,
},
},
{
timestamps: true,
initialAutoIncrement: 25000,
}
);
Order Product -
const OrderProduct = sequelize.define(
"OrderProduct",
{
orderProductId: {
type: Sequelize.UUID,
allowNull: false,
defaultValue: Sequelize.UUIDV4,
primaryKey: true,
},
},
{
timestamps: true,
}
);
Associations -
Order.belongsToMany(Product, {
foreignKey: "productId",
through: OrderProduct,
});
Product.belongsToMany(Order, {
through: OrderProduct,
foreignKey: "orderId",
});
Editor is loading...