Untitled
unknown
javascript
a year ago
3.0 kB
11
Indexable
const connection = require("../config/connection");
// Chuyển đổi connection.query thành hàm trả về Promise
function queryDatabase(query, params = []) {
return new Promise((resolve, reject) => {
connection.query(query, params, (err, results) => {
if (err) {
return reject(err);
}
resolve(results);
});
});
}
// Tạo một order
exports.createOrder = async (req, res) => {
const { centre_id, table_id, items } = req.body;
// Kiểm tra table_id
if (!Number.isInteger(table_id) || table_id <= 0) {
return res.status(400).json({
status: "Failed",
message: "Table ID must be an integer greater than 0",
});
}
try {
// Kiểm tra xem centre_id có hợp lệ không
const centres = await queryDatabase('SELECT * FROM restaurant_centre WHERE centre_id = ?', [centre_id]);
if (centres.length === 0) {
return res.status(404).json({
status: "Failed",
message: "No restaurant centre found",
});
}
const table_quantity = centres[0].quantity_table;
if (table_id > table_quantity) {
return res.status(404).json({
status: "Failed",
message: "No active tables available",
});
}
// Kiểm tra xem có đơn hàng nào cho bàn này không
const orders = await queryDatabase('SELECT * FROM orders WHERE table_id = ? AND centre_id = ?', [table_id, centre_id]);
// Kiểm tra xem bàn có đang được sử dụng không
function isAvailableTable(result) {
return result.every(i => i.active !== 1);
}
if (orders.length === 0 || isAvailableTable(orders)) {
// Tạo đơn hàng mới
await queryDatabase(
`INSERT INTO orders (orders_id, table_id, centre_id)
SELECT COALESCE(MAX(orders_id), 0) + 1, ?, ?
FROM orders`,
[table_id, centre_id]
);
}
// Lấy giá của từng món
async function getPrice(item_id) {
const result = await queryDatabase('SELECT price FROM menu WHERE item_id = ?', [item_id]);
if (result.length === 0) {
throw new Error("No menu item found");
}
return result[0].price;
}
// Tạo mảng giá cho từng món
const itemPrices = await Promise.all(
items.map(async (item) => {
const price = await getPrice(item.item_id);
return [centre_id, table_id, item.item_id, item.quantity, price];
})
);
// Tạo bản ghi order_item
await queryDatabase(
`INSERT INTO order_item (centre_id, table_id, item_id, quantity, price_item)
VALUES ?`,
[itemPrices]
);
return res.status(200).json({
status: "Success",
message: "Order created successfully",
});
} catch (error) {
console.error('Error:', error);
return res.status(500).json({
status: "Failed",
error: error.message,
});
} finally {
connection.end();
}
};
Editor is loading...
Leave a Comment