Gitlab@Informatics

Skip to content
Snippets Groups Projects
Commit 4316d4aa authored by 65160381's avatar 65160381
Browse files

Update 3 files

- /controllers/productController.js
- /controllers/cartController.js
- /controllers/indexController.js
parent e6a3cd08
No related branches found
No related tags found
No related merge requests found
const pool = require('../db');
exports.addToCart = (req, res) => {
const { product_id, price } = req.body;
const quantity = parseInt(req.body.quantity) || 1;
if (!req.session.cart) {
req.session.cart = [];
}
const existingProduct = req.session.cart.find(item => item.product_id === product_id);
if (existingProduct) {
existingProduct.quantity += quantity;
} else {
req.session.cart.push({ product_id, quantity, price });
}
res.redirect('/cart');
};
exports.viewCart = async (req, res) => {
const cart = req.session.cart || [];
if (cart.length === 0) {
return res.render('cart', { cart: [], products: [] });
}
const productIds = cart.map(item => item.product_id);
try {
const [products] = await pool.query('SELECT * FROM products WHERE product_id IN (?)', [productIds]);
// ผูกข้อมูลสินค้าเข้ากับตะกร้า
const cartWithDetails = cart.map(item => {
const product = products.find(p => p.product_id == item.product_id);
// ตรวจสอบว่าเจอสินค้าไหม
if (product) {
return { ...item, product_name: product.product_name, image: product.image };
} else {
// ถ้าไม่พบสินค้า, คืนค่าด้วยค่า default หรือข้อความ
return { ...item, product_name: 'ไม่พบสินค้า', image: 'default_image.jpg' };
}
});
res.render('cart', { cart: cartWithDetails });
} catch (err) {
res.status(500).send('เกิดข้อผิดพลาดในการโหลดตะกร้าสินค้า: ' + err.message);
}
};
exports.removeFromCart = (req, res) => {
const product_id = req.params.id;
req.session.cart = req.session.cart.filter(item => item.product_id !== product_id);
res.redirect('/cart');
};
exports.checkout = async (req, res) => {
if (!req.session.userIdEmail) {
return res.status(401).send('กรุณาเข้าสู่ระบบก่อนทำการสั่งซื้อ');
}
const cart = req.session.cart || [];
if (cart.length === 0) {
return res.redirect('/cart');
}
try {
const totalAmount = cart.reduce((sum, item) => sum + item.price * item.quantity, 0);
const userEmail = req.session.userIdEmail;
// ดึง user_id จาก email
const [user] = await pool.query('SELECT id FROM users WHERE email = ?', [userEmail]);
if (user.length === 0) {
return res.status(404).send('ไม่พบผู้ใช้งาน');
}
const userId = user[0].id;
// สร้างคำสั่งซื้อใน Orders
const [orderResult] = await pool.query('INSERT INTO orders (user_id, total_amount) VALUES (?, ?)', [userId, totalAmount]);
const orderId = orderResult.insertId;
// เพิ่มรายการสินค้าลงใน Order_Items
const orderItems = cart.map(item => [orderId, item.product_id, item.quantity, item.price]);
await pool.query('INSERT INTO order_items (order_id, book_id, quantity, price) VALUES ?', [orderItems]);
// ล้างตะกร้าหลังจาก Checkout สำเร็จ
req.session.cart = [];
res.redirect('/orderConfirmation');
} catch (err) {
res.status(500).send('เกิดข้อผิดพลาดในการสั่งซื้อ: ' + err.message);
}
};
\ No newline at end of file
const pool = require('../db');
module.exports = (req, res) => {
res.render('index', { message: req.flash('message') });
exports.getProducts = async (req, res) => {
try {
const [rows] = await pool.query('SELECT * FROM products');
res.render('index', { products: rows });
} catch (err) {
res.status(500).send('Database error: ' + err.message);
}
};
exports.getProductDetail = async (req, res) => {
const productId = req.params.id;
try {
const [rows] = await pool.query(`
SELECT p.*, u.email AS owner
FROM products p
LEFT JOIN users u ON p.owner = u.email
WHERE p.product_id = ?`, [productId]);
if (rows.length === 0) {
return res.status(404).send('ไม่พบสินค้านี้');
}
res.render('product', { product: rows[0], currentUserEmail: req.session.userIdEmail || '' });
} catch (err) {
res.status(500).send('Database error: ' + err.message);
}
};
\ No newline at end of file
const pool = require('../db');
exports.showAddProductForm = (req, res) => {
if (!req.session.userIdEmail) {
return res.redirect('/login');
}
res.render('addProduct');
};
exports.createProduct = async (req, res) => {
const { product_name, price, image, description } = req.body;
const owner = req.session.userIdEmail;
const owner = req.session.userIdEmail; // เราต้องเก็บ email ตอน login ด้วยนะครับ
try {
const sql = 'INSERT INTO products (product_name, price, image, description, owner) VALUES (?, ?, ?, ?, ?)';
await pool.query(sql, [product_name, price, image, description, owner]);
......@@ -19,11 +16,9 @@ exports.createProduct = async (req, res) => {
}
};
exports.showUpdateProductForm = async (req, res) => {
const productId = req.params.id;
if (!req.session.userIdEmail) {
return res.redirect('/login');
}
try {
const [rows] = await pool.query('SELECT * FROM products WHERE product_id = ?', [productId]);
if (rows.length === 0) {
......@@ -63,6 +58,7 @@ exports.deleteProduct = async (req, res) => {
const productId = req.params.id;
const currentUserEmail = req.session.userIdEmail;
try {
// ตรวจสอบว่าผู้ใช้นี้เป็นเจ้าของหรือไม่
const [rows] = await pool.query('SELECT * FROM products WHERE product_id = ?', [productId]);
if (rows.length === 0) {
return res.status(404).send('ไม่พบสินค้านี้');
......@@ -72,20 +68,21 @@ exports.deleteProduct = async (req, res) => {
return res.status(403).send('คุณไม่มีสิทธิ์ลบสินค้านี้');
}
// ลบสินค้าได้
await pool.query('DELETE FROM products WHERE product_id = ?', [productId]);
res.redirect('/');
} catch (err) {
res.status(500).send('เกิดข้อผิดพลาดในการลบสินค้า: ' + err.message);
res.status(500).send('Database error: ' + err.message);
}
};
exports.searchProducts = async (req, res) => {
const searchQuery = req.query.q;
const searchQuery = req.query.q; // รับค่าค้นหาจาก query parameter
try {
const sql = 'SELECT * FROM products WHERE product_name LIKE ?';
const [rows] = await pool.query(sql, [`%${searchQuery}%`]);
const [rows] = await pool.query(sql, [`%${searchQuery}%`]); // ค้นหาชื่อสินค้าที่คล้ายกัน
res.render('searchResults', { products: rows, searchQuery });
res.render('searchResults', { products: rows, searchQuery }); // ส่งผลลัพธ์ไปยังหน้า searchResults.ejs
} catch (err) {
res.status(500).send('เกิดข้อผิดพลาดในการค้นหา: ' + err.message);
}
......@@ -93,28 +90,31 @@ exports.searchProducts = async (req, res) => {
exports.orderHistory = async (req, res) => {
if (!req.session.userIdEmail) {
return res.redirect('/login');
return res.status(401).send('กรุณาเข้าสู่ระบบเพื่อดูประวัติการสั่งซื้อ');
}
try {
const userEmail = req.session.userIdEmail;
// ดึง user_id จาก email
const [user] = await pool.query('SELECT id FROM users WHERE email = ?', [userEmail]);
if (user.length === 0) {
return res.status(404).send('ไม่พบผู้ใช้งาน');
}
const userId = user[0].id;
// ดึงคำสั่งซื้อทั้งหมดของผู้ใช้
const [orders] = await pool.query(
'SELECT * FROM orders WHERE user_id = ? ORDER BY created_at DESC',
[userId]
);
// ดึงรายการสินค้าสำหรับแต่ละคำสั่งซื้อ
for (let order of orders) {
const [items] = await pool.query(
`SELECT oi.*, p.product_name, p.image
FROM order_items oi
JOIN products p ON oi.product_id = p.product_id
JOIN products p ON oi.book_id = p.product_id
WHERE oi.order_id = ?`,
[order.order_id]
);
......@@ -126,3 +126,6 @@ exports.orderHistory = async (req, res) => {
res.status(500).send('เกิดข้อผิดพลาดในการดึงประวัติการสั่งซื้อ: ' + err.message);
}
};
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment