From 3d64fdfc9e9053236296410418202b4e2f6787b2 Mon Sep 17 00:00:00 2001
From: 65160118 <65160118@go.buu.ac.th>
Date: Fri, 21 Mar 2025 22:05:13 +0700
Subject: [PATCH] commit 6

---
 controllers/bookController.js | 122 +++++++++++++++++++++-------------
 1 file changed, 77 insertions(+), 45 deletions(-)

diff --git a/controllers/bookController.js b/controllers/bookController.js
index 920a467..3b799f8 100644
--- a/controllers/bookController.js
+++ b/controllers/bookController.js
@@ -2,28 +2,6 @@ const BookModel = require('../models/bookModel');
 const multer = require('multer');
 const path = require('path');
 
-// Configure multer for file uploads
-const storage = multer.diskStorage({
-    destination: (req, file, cb) => {
-        cb(null, 'public/uploads/')
-    },
-    filename: (req, file, cb) => {
-        cb(null, `${Date.now()}-${file.originalname}`)
-    }
-});
-
-const upload = multer({ 
-    storage,
-    limits: { fileSize: 5 * 1024 * 1024 },
-    fileFilter: (req, file, cb) => {
-        const filetypes = /jpeg|jpg|png/;
-        const mimetype = filetypes.test(file.mimetype);
-        const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
-        if (mimetype && extname) return cb(null, true);
-        cb(new Error('Only .png, .jpg and .jpeg format allowed!'));
-    }
-}).single('image_file');
-
 exports.getBookLists = async (req, res) => {
     if (!req.session.user) {
         return res.redirect('/login');
@@ -144,31 +122,19 @@ exports.getAddBook = async (req, res) => {
 };
 
 exports.postBook = async (req, res) => {
-    if (!req.session.user) return res.redirect('/login');
-
-    upload(req, res, async (err) => {
-        if (err) {
-            console.error('Upload error:', err);
-            return res.status(400).send('Error uploading file: ' + err.message);
-        }
-
-        try {
-            const { bookname, author, category, type, list_id, imageOption } = req.body;
-            const image_url = imageOption === 'file' && req.file ? 
-                `/uploads/${req.file.filename}` : req.body.image_url;
+    if (!req.session.user) {
+        return res.redirect('/login');
+    }
 
-            const bookModel = new BookModel(req.db);
-            await bookModel.createBook({
-                bookname, author, category, type, image_url, list_id,
-                user_id: req.session.user.user_id
-            });
+    const { bookname, author, category, type, list_id, image_url } = req.body;
+    const bookModel = new BookModel(req.db);
 
-            res.redirect(`/books/${list_id}`);
-        } catch (error) {
-            console.error('Error creating book:', error);
-            res.status(500).send('เกิดข้อผิดพลาดในการเพิ่มหนังสือ');
-        }
-    });
+    try {
+        await bookModel.addBook(bookname, author, category, type, list_id, req.session.user.user_id, image_url);
+        res.redirect(`/books/${list_id}`);
+    } catch (error) {
+        res.status(500).send('เกิดข้อผิดพลาดในการเพิ่มหนังสือ');
+    }
 };
 
 exports.getEditBook = async (req, res) => {
@@ -285,4 +251,70 @@ exports.getBookInfo = async (req, res) => {
     } catch (error) {
         res.status(500).send('Error loading book information');
     }
+};
+// Configure multer for file uploads
+const storage = multer.diskStorage({
+    destination: (req, file, cb) => {
+        cb(null, 'public/uploads/')
+    },
+    filename: (req, file, cb) => {
+        cb(null, `${Date.now()}-${file.originalname}`)
+    }
+});
+
+const upload = multer({ 
+    storage: storage,
+    limits: {
+        fileSize: 5 * 1024 * 1024 // 5MB limit
+    },
+    fileFilter: (req, file, cb) => {
+        const filetypes = /jpeg|jpg|png/;
+        const mimetype = filetypes.test(file.mimetype);
+        const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
+
+        if (mimetype && extname) {
+            return cb(null, true);
+        }
+        cb(new Error('Only .png, .jpg and .jpeg format allowed!'));
+    }
+}).single('image_file');
+
+exports.postBook = async (req, res) => {
+    if (!req.session.user) {
+        return res.redirect('/login');
+    }
+
+    upload(req, res, async (err) => {
+        if (err) {
+            console.error('Upload error:', err);
+            return res.status(400).send('Error uploading file: ' + err.message);
+        }
+
+        try {
+            const { bookname, author, category, type, list_id, imageOption } = req.body;
+            let image_url = '';
+
+            if (imageOption === 'file' && req.file) {
+                image_url = `/uploads/${req.file.filename}`;
+            } else {
+                image_url = req.body.image_url;
+            }
+
+            const bookModel = new BookModel(req.db);
+            await bookModel.createBook({
+                bookname,
+                author,
+                category,
+                type,
+                image_url,
+                list_id,
+                user_id: req.session.user.user_id
+            });
+
+            res.redirect(`/books/${list_id}`);
+        } catch (error) {
+            console.error('Error creating book:', error);
+            res.status(500).send('เกิดข้อผิดพลาดในการเพิ่มหนังสือ');
+        }
+    });
 };
\ No newline at end of file
-- 
GitLab