const express = require("express"); const pool = require("../config/database"); const multer = require("multer"); const path = require("path"); const fs = require("fs"); const router = express.Router(); // ตั้งค่าที่เก็บไฟล์รูป const uploadDir = "public/uploads"; if (!fs.existsSync(uploadDir)) { fs.mkdirSync(uploadDir, { recursive: true }); } // ตั้งค่า Multer สำหรับอัปโหลดรูป const storage = multer.diskStorage({ destination: (req, file, cb) => { cb(null, uploadDir); }, filename: (req, file, cb) => { cb(null, Date.now() + path.extname(file.originalname)); // ตั้งชื่อไฟล์เป็น timestamp } }); const upload = multer({ storage: storage }); // ดึงสินค้าทั้งหมด router.get("/", async (req, res) => { try { const [products] = await pool.execute("SELECT * FROM products"); res.render("product", { products }); } catch (error) { console.error("Error fetching products:", error); res.status(500).send("Error loading products."); } }); // แสดงฟอร์มเพิ่มสินค้า router.get("/add", (req, res) => { res.render("product_add", { message: "" }); }); // เพิ่มสินค้าใหม่พร้อมรูป router.post("/add", upload.single("image"), async (req, res) => { console.log("req.file:", req.file); // ดูว่า multer ได้รับไฟล์ไหม console.log("req.body:", req.body); // ดูค่าที่ส่งมาจากฟอร์ม try { const { name, price, stock, description } = req.body; if (!req.file) { console.error("Error: No file uploaded!"); return res.status(400).send("File upload failed"); } const imagePath = "/uploads/" + req.file.filename; console.log("imagePath:", imagePath); // ตรวจสอบพาธไฟล์รูป try { await pool.execute( "INSERT INTO products (name, price, stock, description, image_url) VALUES (?, ?, ?, ?, ?)", [name, price, stock, description, imagePath] ); } catch (error) { console.error("Database Error:", error); return res.status(500).json({ error: "Database Error", details: error }); } res.redirect("/products"); } catch (error) { console.error("Error adding product:", error); res.status(500).send("Error adding product."); } }); // ดึงข้อมูลสินค้าตาม ID และแสดงหน้าแก้ไข router.get("/edit/:id", async (req, res) => { try { const [rows] = await pool.execute("SELECT * FROM products WHERE id = ?", [req.params.id]); if (rows.length === 0) { return res.status(404).send("ไม่พบสินค้า"); } res.render("product_edit", { product: rows[0] }); } catch (error) { console.error("Error fetching product:", error); res.status(500).send("Error loading product."); } }); // อัปเดตข้อมูลสินค้า router.post("/edit/:id", upload.single("image"), async (req, res) => { try { const { name, price, stock, description } = req.body; let imagePath = req.body.oldImage; // ใช้รูปเดิมถ้าไม่มีการอัปโหลดใหม่ // ถ้ามีการอัปโหลดรูปใหม่ ให้ใช้ไฟล์ใหม่ if (req.file) { imagePath = "/uploads/" + req.file.filename; } console.log("Update values:", { name, price, stock, description, imagePath, id: req.params.id }); await pool.execute( "UPDATE products SET name=?, price=?, stock=?, description=?, image_url=? WHERE id=?", [ name ?? null, price ?? null, stock ?? null, description ?? null, imagePath ?? null, req.params.id ?? null ] ); res.redirect("/products"); // กลับไปยังหน้ารายการสินค้า } catch (error) { console.error("Error updating product:", error); res.status(500).send("Error updating product."); } }); module.exports = router;