Untitled

 avatar
unknown
javascript
a year ago
3.0 kB
8
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