From f2f4cbfba51ba83f258cb5e15e90277abdfa506e Mon Sep 17 00:00:00 2001
From: 65160019 <65160019@go.buu.ac.th>
Date: Mon, 24 Mar 2025 20:36:18 +0700
Subject: [PATCH] greate note project v10

---
 Controllers/AuthController.js     | 197 ----------------------------
 Controllers/CategoryController.js | 129 -------------------
 Controllers/NoteController.js     | 206 ------------------------------
 Routes/web.js                     |  24 ++--
 index.js                          |   8 +-
 package.json                      |   8 +-
 6 files changed, 18 insertions(+), 554 deletions(-)
 delete mode 100644 Controllers/AuthController.js
 delete mode 100644 Controllers/CategoryController.js
 delete mode 100644 Controllers/NoteController.js

diff --git a/Controllers/AuthController.js b/Controllers/AuthController.js
deleted file mode 100644
index 6b003af..0000000
--- a/Controllers/AuthController.js
+++ /dev/null
@@ -1,197 +0,0 @@
-const User = require('../Models/User');
-const jwt = require('jsonwebtoken');
-const path = require('path');
-
-class AuthController {
-  // Show the login page
-  static showLoginPage(req, res) {
-    res.render('login', { error: null });
-  }
-
-  // Show the registration page
-  static showRegisterPage(req, res) {
-    res.render('register', { error: null });
-  }
-
-  // Register a new user
-  static signup(req, res) {
-    const { name, email, password, confirm_password } = req.body;
-
-    // Validate input
-    if (!name || !email || !password || !confirm_password) {
-      return res.render('register', { error: 'All fields are required' });
-    }
-
-    if (password !== confirm_password) {
-      return res.render('register', { error: 'Passwords do not match' });
-    }
-
-    // Check if email already exists
-    User.getByEmail(email, (err, user) => {
-      if (err) {
-        console.log(err);
-        return res.render('register', { error: 'Database error' });
-      }
-
-      if (user) {
-        return res.render('register', { error: 'Email already in use' });
-      }
-
-      // Create new user
-      User.create({ name, email, password }, (err, result) => {
-        if (err) {
-          console.log(err);
-          return res.render('register', { error: 'Failed to create user' });
-        }
-        
-        // Redirect to login page
-        return res.render('login', { error: null, success: 'Registration successful. Please login.' });
-      });
-    });
-  }
-
-  // API signup
-  static apiSignup(req, res) {
-    const { name, email, password } = req.body;
-
-    // Validate input
-    if (!name || !email || !password) {
-      return res.status(400).json({ error: 'All fields are required' });
-    }
-
-    // Check if email already exists
-    User.getByEmail(email, (err, user) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).json({ error: 'Database error' });
-      }
-
-      if (user) {
-        return res.status(400).json({ error: 'Email already in use' });
-      }
-
-      // Create new user
-      User.create({ name, email, password }, (err, result) => {
-        if (err) {
-          console.log(err);
-          return res.status(500).json({ error: 'Failed to create user' });
-        }
-        
-        res.status(201).json({ 
-          message: 'User created successfully',
-          userId: result.insertId
-        });
-      });
-    });
-  }
-
-  // Login a user
-  static login(req, res) {
-    const { email, password } = req.body;
-
-    // Validate input
-    if (!email || !password) {
-      return res.render('login', { error: 'Email and password are required' });
-    }
-
-    // Find user by email
-    User.getByEmail(email, (err, user) => {
-      if (err) {
-        console.log(err);
-        return res.render('login', { error: 'Database error' });
-      }
-
-      if (!user) {
-        return res.render('login', { error: 'Invalid email or password' });
-      }
-
-      // Verify password
-      User.verifyPassword(password, user.password, (err, isMatch) => {
-        if (err) {
-          console.log(err);
-          return res.render('login', { error: 'Authentication error' });
-        }
-
-        if (!isMatch) {
-          return res.render('login', { error: 'Invalid email or password' });
-        }
-
-        // Create token
-        const token = jwt.sign(
-          { id: user.id, name: user.name, email: user.email },
-          process.env.TOKEN_SECRET,
-          { expiresIn: '24h' }
-        );
-
-        // Set token in cookie
-        res.cookie('auth-token', token, { 
-          httpOnly: true, 
-          maxAge: 24 * 60 * 60 * 1000 // 24 hours
-        });
-
-        // Redirect to dashboard
-        res.redirect('/dashboard');
-      });
-    });
-  }
-
-  // API login
-  static apiLogin(req, res) {
-    const { email, password } = req.body;
-
-    // Validate input
-    if (!email || !password) {
-      return res.status(400).json({ error: 'Email and password are required' });
-    }
-
-    // Find user by email
-    User.getByEmail(email, (err, user) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).json({ error: 'Database error' });
-      }
-
-      if (!user) {
-        return res.status(400).json({ error: 'Invalid email or password' });
-      }
-
-      // Verify password
-      User.verifyPassword(password, user.password, (err, isMatch) => {
-        if (err) {
-          console.log(err);
-          return res.status(500).json({ error: 'Authentication error' });
-        }
-
-        if (!isMatch) {
-          return res.status(400).json({ error: 'Invalid email or password' });
-        }
-
-        // Create token
-        const token = jwt.sign(
-          { id: user.id, name: user.name, email: user.email },
-          process.env.TOKEN_SECRET,
-          { expiresIn: '24h' }
-        );
-
-        // Send response with token
-        res.status(200).json({ 
-          message: 'Login successful',
-          token: token,
-          user: {
-            id: user.id,
-            name: user.name,
-            email: user.email
-          }
-        });
-      });
-    });
-  }
-
-  // Logout a user
-  static logout(req, res) {
-    res.clearCookie('auth-token');
-    res.redirect('/');
-  }
-}
-
-module.exports = AuthController; 
\ No newline at end of file
diff --git a/Controllers/CategoryController.js b/Controllers/CategoryController.js
deleted file mode 100644
index 0e7202e..0000000
--- a/Controllers/CategoryController.js
+++ /dev/null
@@ -1,129 +0,0 @@
-const Category = require('../Models/Category');
-
-class CategoryController {
-  // Display all categories (web)
-  static index(req, res) {
-    Category.getByUserId(req.user.id, (err, categories) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).send('Error loading categories');
-      }
-      res.render('categories', { 
-        categories: categories,
-        user: req.user
-      });
-    });
-  }
-
-  // Get all categories (API)
-  static apiIndex(req, res) {
-    Category.getByUserId(req.user.id, (err, categories) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).json({ error: 'Database error' });
-      }
-      res.json(categories);
-    });
-  }
-
-  // Create a new category (web)
-  static create(req, res) {
-    const categoryData = {
-      name: req.body.name,
-      description: req.body.description,
-      userId: req.user.id
-    };
-
-    Category.create(categoryData, (err, result) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).send('Error creating category');
-      }
-      res.redirect('/categories');
-    });
-  }
-
-  // Create a new category (API)
-  static apiCreate(req, res) {
-    const categoryData = {
-      name: req.body.name,
-      description: req.body.description,
-      userId: req.user.id
-    };
-
-    Category.create(categoryData, (err, result) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).json({ error: 'Error creating category' });
-      }
-      res.status(201).json({ 
-        message: 'Category created successfully',
-        categoryId: result.insertId
-      });
-    });
-  }
-
-  // Update a category (web)
-  static update(req, res) {
-    const categoryId = req.body.category_id;
-    const categoryData = {
-      name: req.body.name,
-      description: req.body.description,
-      userId: req.user.id
-    };
-
-    Category.update(categoryId, categoryData, (err, result) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).send('Error updating category');
-      }
-      res.redirect('/categories');
-    });
-  }
-
-  // Update a category (API)
-  static apiUpdate(req, res) {
-    const categoryId = req.params.id;
-    const categoryData = {
-      name: req.body.name,
-      description: req.body.description,
-      userId: req.user.id
-    };
-
-    Category.update(categoryId, categoryData, (err, result) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).json({ error: 'Error updating category' });
-      }
-      res.json({ message: 'Category updated successfully' });
-    });
-  }
-
-  // Delete a category (web)
-  static delete(req, res) {
-    const categoryId = req.params.id;
-    
-    Category.delete(categoryId, req.user.id, (err, result) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).send('Error deleting category');
-      }
-      res.redirect('/categories');
-    });
-  }
-
-  // Delete a category (API)
-  static apiDelete(req, res) {
-    const categoryId = req.params.id;
-    
-    Category.delete(categoryId, req.user.id, (err, result) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).json({ error: 'Error deleting category' });
-      }
-      res.json({ message: 'Category deleted successfully' });
-    });
-  }
-}
-
-module.exports = CategoryController; 
\ No newline at end of file
diff --git a/Controllers/NoteController.js b/Controllers/NoteController.js
deleted file mode 100644
index acd4f0e..0000000
--- a/Controllers/NoteController.js
+++ /dev/null
@@ -1,206 +0,0 @@
-const Note = require('../Models/Note');
-const Category = require('../Models/Category');
-const jwt = require('jsonwebtoken');
-
-// NoteController - จัดการ Logic การทำงานของโน้ต
-class NoteController {
-  // แสดงหน้าแรกที่มีโน้ตทั้งหมด
-  static async index(req, res) {
-    // ดึงข้อมูลโน้ตทั้งหมด
-    Note.getAll(req.user.id, (err, notes) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).send('Error loading notes');
-      }
-      
-      // ดึงข้อมูล categories สำหรับ dropdown (เฉพาะของ user นี้)
-      Category.getByUserId(req.user.id, (err, categories) => {
-        if (err) {
-          console.log(err);
-          return res.status(500).send('Error loading categories');
-        }
-        
-        // ส่งข้อมูลไปแสดงที่หน้า dashboard
-        res.render('dashboard', { 
-          data: notes,
-          categories: categories,
-          user: req.user
-        });
-      });
-    });
-  }
-
-  // Get all notes (API)
-  static apiIndex(req, res) {
-    Note.getAll(req.user.id, (err, notes) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).json({ error: 'Database error' });
-      }
-      res.json(notes);
-    });
-  }
-
-  // สร้างโน้ตใหม่
-  static create(req, res) {
-    const noteData = {
-      title: req.body.title,
-      content: req.body.content,
-      userId: req.user.id,
-      categoryId: req.body.category_id || null
-    };
-
-    Note.create(noteData, (err, result) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).send('Error creating note');
-      }
-      res.redirect('/dashboard');
-    });
-  }
-
-  // Create a new note (API)
-  static apiCreate(req, res) {
-    const noteData = {
-      title: req.body.title,
-      content: req.body.content,
-      userId: req.user.id,
-      categoryId: req.body.category_id || null
-    };
-
-    Note.create(noteData, (err, result) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).json({ error: 'Error creating note' });
-      }
-      res.status(201).json({ 
-        message: 'Note created successfully',
-        noteId: result.insertId
-      });
-    });
-  }
-
-  // อัพเดทโน้ต
-  static update(req, res) {
-    const noteId = req.body.note_id;
-    const noteData = {
-      title: req.body.title,
-      content: req.body.content,
-      categoryId: req.body.category_id || null,
-      userId: req.user.id
-    };
-
-    Note.update(noteId, noteData, (err, result) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).send('Error updating note');
-      }
-      res.redirect('/dashboard');
-    });
-  }
-
-  // Update a note (API)
-  static apiUpdate(req, res) {
-    const noteId = req.params.id;
-    const noteData = {
-      title: req.body.title,
-      content: req.body.content,
-      categoryId: req.body.category_id || null,
-      userId: req.user.id
-    };
-
-    Note.update(noteId, noteData, (err, result) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).json({ error: 'Error updating note' });
-      }
-      res.json({ message: 'Note updated successfully' });
-    });
-  }
-
-  // ลบโน้ต
-  static delete(req, res) {
-    const noteId = req.params.id;
-    
-    Note.delete(noteId, req.user.id, (err, result) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).send('Error deleting note');
-      }
-      res.redirect('/dashboard');
-    });
-  }
-
-  // Delete a note (API)
-  static apiDelete(req, res) {
-    const noteId = req.params.id;
-    
-    Note.delete(noteId, req.user.id, (err, result) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).json({ error: 'Error deleting note' });
-      }
-      res.json({ message: 'Note deleted successfully' });
-    });
-  }
-
-  // Search notes by title or content (web)
-  static search(req, res) {
-    const searchTerm = req.query.searchTerm;
-    
-    if (!searchTerm) {
-      return res.redirect('/dashboard');
-    }
-
-    Note.search(searchTerm, req.user.id, (err, notes) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).send('Database error');
-      }
-      
-      Category.getByUserId(req.user.id, (err, categories) => {
-        if (err) {
-          console.log(err);
-          return res.status(500).send('Database error');
-        }
-        
-        res.render('dashboard', { 
-          data: notes,
-          categories: categories,
-          searchTerm: searchTerm,
-          user: req.user
-        });
-      });
-    });
-  }
-
-  // แสดงโน้ตของผู้ใช้ที่ล็อกอินอยู่
-  static myNotes(req, res) {
-    const userId = req.user.id;
-    
-    // ดึงโน้ตของผู้ใช้
-    Note.getByUserId(userId, (err, notes) => {
-      if (err) {
-        console.log(err);
-        return res.status(500).send('Error loading notes');
-      }
-      
-      // ดึง categories สำหรับ dropdown (เฉพาะของ user นี้)
-      Category.getByUserId(userId, (err, categories) => {
-        if (err) {
-          console.log(err);
-          return res.status(500).send('Error loading categories');
-        }
-        
-        res.render('dashboard', { 
-          data: notes,
-          categories: categories,
-          myNotes: true,
-          user: req.user
-        });
-      });
-    });
-  }
-}
-
-module.exports = NoteController; 
\ No newline at end of file
diff --git a/Routes/web.js b/Routes/web.js
index 2275ecb..7171e18 100644
--- a/Routes/web.js
+++ b/Routes/web.js
@@ -1,11 +1,8 @@
 const express = require('express');
 const router = express.Router();
-const webAuth = require('../middleware/webauth');
-
-// Import Controllers
-const AuthController = require('../controllers/authcontroller');
-const NoteController = require('../controllers/notecontroller');
-const CategoryController = require('../controllers/categorycontroller');
+const AuthController = require('../Controllers/AuthController');
+const NoteController = require('../Controllers/NoteController');
+const CategoryController = require('../Controllers/CategoryController');
 const jwt = require('jsonwebtoken');
 
 // Middleware ตรวจสอบการเข้าสู่ระบบแบบง่าย
@@ -27,8 +24,7 @@ const webAuth = (req, res, next) => {
 // Routes สำหรับหน้าเว็บ
 router.get('/', AuthController.showLoginPage);
 router.get('/register', AuthController.showRegisterPage);
-router.post('/register', AuthController.register);
-router.get('/login', AuthController.showLoginPage);
+router.post('/register', AuthController.signup);
 router.post('/login', AuthController.login);
 router.post('/logout', AuthController.logout);
 
@@ -36,14 +32,14 @@ router.post('/logout', AuthController.logout);
 router.get('/dashboard', webAuth, NoteController.index);
 router.get('/dashboard/my-notes', webAuth, NoteController.myNotes);
 router.get('/dashboard/search', webAuth, NoteController.search);
-router.post('/notes', webAuth, NoteController.store);
-router.put('/notes/:id', webAuth, NoteController.update);
-router.delete('/notes/:id', webAuth, NoteController.destroy);
+router.post('/dashboard/create', webAuth, NoteController.create);
+router.post('/dashboard/update', webAuth, NoteController.update);
+router.get('/dashboard/:id/delete', webAuth, NoteController.delete);
 
 // Routes สำหรับจัดการหมวดหมู่
 router.get('/categories', webAuth, CategoryController.index);
-router.post('/categories', webAuth, CategoryController.store);
-router.put('/categories/:id', webAuth, CategoryController.update);
-router.delete('/categories/:id', webAuth, CategoryController.destroy);
+router.post('/categories/create', webAuth, CategoryController.create);
+router.post('/categories/update', webAuth, CategoryController.update);
+router.get('/categories/:id/delete', webAuth, CategoryController.delete);
 
 module.exports = router; 
\ No newline at end of file
diff --git a/index.js b/index.js
index 2e18c7c..0d83c4d 100644
--- a/index.js
+++ b/index.js
@@ -1,11 +1,10 @@
 const express = require('express');
 const dotenv = require('dotenv');
 const cookieParser = require('cookie-parser');
-const path = require('path');
 
 // Import routes
-const webRoutes = require('./routes/web');
-const apiRoute = require('./routes/apiroute');
+const webRoutes = require('./Routes/web');
+const apiRoute = require('./Routes/apiRoute');
 
 // Load env variables
 dotenv.config();
@@ -19,8 +18,7 @@ app.use(express.urlencoded({ extended: true }));
 app.use(express.static('public'));
 app.use(cookieParser());
 
-// Set view engine and views directory
-app.set('views', path.join(__dirname, 'views'));
+// Set view engine
 app.set('view engine', 'ejs');
 
 // Routes
diff --git a/package.json b/package.json
index 631cb28..e026be5 100644
--- a/package.json
+++ b/package.json
@@ -11,14 +11,16 @@
   "license": "ISC",
   "dependencies": {
     "bcrypt": "^5.1.1",
+    "bcryptjs": "^2.4.3",
+    "body-parser": "^1.19.0",
     "cookie-parser": "^1.4.7",
+    "cors": "^2.8.5",
     "dotenv": "^8.2.0",
     "ejs": "^3.1.3",
     "express": "^4.17.1",
+    "express-session": "^1.17.1",
     "jsonwebtoken": "^8.5.1",
-    "mysql": "^2.18.1"
-  },
-  "devDependencies": {
+    "mysql": "^2.18.1",
     "nodemon": "^2.0.4"
   }
 }
-- 
GitLab