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)); } }); 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("📸 Uploaded file:", req.file); try { const { name, price, stock, description } = req.body; const priceNum = parseFloat(price); const stockNum = parseInt(stock, 10); if (isNaN(priceNum) || isNaN(stockNum)) { return res.status(400).send("❌ Price and stock must be valid numbers."); } const imagePath = req.file ? "/uploads/" + req.file.filename : null; await pool.execute( "INSERT INTO products (name, price, stock, description, image_url) VALUES (?, ?, ?, ?, ?)", [name, priceNum, stockNum, description, imagePath] ); 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, oldImage } = req.body; const priceNum = parseFloat(price); const stockNum = parseInt(stock, 10); if (isNaN(priceNum) || isNaN(stockNum)) { return res.status(400).send("❌ Price and stock must be valid numbers."); } // ใช้รูปเดิม ถ้าไม่ได้อัปโหลดใหม่ let imagePath = oldImage || null; if (req.file) { imagePath = "/uploads/" + req.file.filename; } console.log("🛠 Updating Product:", { name, priceNum, stockNum, description, imagePath, id: req.params.id }); await pool.execute( "UPDATE products SET name=?, price=?, stock=?, description=?, image_url=? WHERE id=?", [name ?? null, priceNum ?? null, stockNum ?? null, description ?? null, imagePath, req.params.id] ); res.redirect("/products"); } catch (error) { console.error("❌ Error updating product:", error); res.status(500).send("Error updating product."); } }); module.exports = router;