Select Git revision
cart.js 5.14 KiB
const express = require('express');
const router = express.Router();
const pool = require('../config/database');
// ฟังก์ชันช่วยคำนวณราคารวม
async function calculateTotal(sessionId) {
const [cartItems] = await pool.query(
`SELECT cart_items.*, products.price
FROM cart_items
JOIN products ON cart_items.product_id = products.id
WHERE cart_items.session_id = ?`,
[sessionId]
);
return cartItems.reduce((sum, item) => sum + (item.price * item.quantity), 0);
}
// แสดงตะกร้าสินค้า
router.get('/', async (req, res) => {
try {
if (!req.session.user) {
return res.status(401).send('Unauthorized');
}
const [cartItems] = await pool.query(
`SELECT cart_items.*, products.name, products.price, products.stock, products.description
FROM cart_items
JOIN products ON cart_items.product_id = products.id
WHERE cart_items.user_id = ?`,
[req.session.user.id]
);
const total = await calculateTotal(req.session.user.id);
res.render('cart', { cartItems, total });
} catch (error) {
console.error("Error fetching cart:", error);
res.status(500).send('Error fetching cart');
}
});
// เพิ่มสินค้าลงตะกร้า
router.post('/add', async (req, res) => {
console.log("Session User:", req.session.user);
console.log("Received Data:", req.body);
if (!req.session.user) {
return res.status(401).send('Unauthorized');
}
const { productId, quantity } = req.body;
try {
const [[product]] = await pool.query(
'SELECT stock FROM products WHERE id = ?', [productId]
);
if (!product) {
return res.status(404).send('Product not found');
}
if (quantity > product.stock) {
return res.status(400).send('สินค้ามีจำนวนไม่เพียงพอ');
}
const [[existingItem]] = await pool.query(
'SELECT id, quantity FROM cart_items WHERE user_id = ? AND product_id = ?',
[req.session.user.id, productId]
);
if (existingItem) {
const newQuantity = existingItem.quantity + parseInt(quantity);
if (newQuantity > product.stock) {