Gitlab@Informatics

Skip to content
Snippets Groups Projects
Select Git revision
  • a2671713be1762f76c4bdb3c6f33bda986863fb0
  • master default
  • main protected
3 results

product.js

Blame
  • 65160270's avatar
    65160270 authored
    a2671713
    History
    product.js 4.09 KiB
    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) => {
        try {
            console.log("Debugging Data:", req.body);
            console.log("File Upload:", req.file);
    
            const { name, price, stock, description } = req.body;
            if (!name || !price || !stock || !description || !req.file) {
                throw new Error("Missing required fields");
            }
    
            const imagePath = "/uploads/" + req.file.filename;
    
            await pool.execute("INSERT INTO products (name, price, stock, description, image_url) VALUES (?, ?, ?, ?, ?)", 
                [name, price, stock, description, imagePath]);
    
            console.log("Product added successfully!");
            res.redirect("/products");
        } catch (error) {
            console.error("Error adding product:", error);
            res.status(500).json({ message: "Internal Server Error", error: error.message });
        }
    });
    
    
    // ดึงข้อมูลสินค้าตาม 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;