From dedf500c235cc4bd04ea502724e9e306eb0f4400 Mon Sep 17 00:00:00 2001 From: Atiwit Pattanapukdee <65160394@go.buu.ac.th> Date: Sun, 16 Mar 2025 18:31:54 +0700 Subject: [PATCH] Project Round 2 --- controllers/authController.js | 21 ++++++++++++++ controllers/tourController.js | 54 ----------------------------------- models/tourModel.js | 35 ----------------------- models/userModel.js | 38 ++++++++++++++++++++++++ routes/tourRoutes.js | 9 +++--- 5 files changed, 64 insertions(+), 93 deletions(-) create mode 100644 controllers/authController.js create mode 100644 models/userModel.js diff --git a/controllers/authController.js b/controllers/authController.js new file mode 100644 index 0000000..8f4fba1 --- /dev/null +++ b/controllers/authController.js @@ -0,0 +1,21 @@ +exports.postRegister = async (req, res) => { + const { name, email, password, confirmPassword } = req.body; + + if (password !== confirmPassword) { + return res.render('register', { message: 'Passwords do not match' }); + } + + try { + const existingUser = await User.findOne(email); + if (existingUser) { + return res.render('register', { message: 'Email already in use' }); + } + + const userId = await User.create(name, email, password); + req.session.userId = userId; + res.redirect('/login'); + } catch (err) { + console.error('❌ Error creating user:', err); + res.render('register', { message: 'Error creating user' }); + } +}; diff --git a/controllers/tourController.js b/controllers/tourController.js index 3150975..d8139ad 100644 --- a/controllers/tourController.js +++ b/controllers/tourController.js @@ -19,58 +19,4 @@ exports.getTourDetails = async (req, res) => { } }; -const User = require('../models/tourModel'); - -exports.getLogin = (req, res) => { - res.render('login', { message: null }); -}; - -exports.getRegister = (req, res) => { - res.render('register', { message: null }); -}; - -exports.postRegister = async (req, res) => { - const { name, email, password, confirmPassword } = req.body; - - if (password !== confirmPassword) { - return res.render('register', { message: 'Passwords do not match' }); - } - - try { - const existingUser = await User.findOne(email); - if (existingUser) { - return res.render('register', { message: 'Email already in use' }); - } - - const userId = await User.create(name, email, password); - req.session.userId = userId; - res.redirect('/login'); - } catch (err) { - console.error(err); - res.render('register', { message: 'Error creating user' }); - } -}; - -exports.postLogin = async (req, res) => { - const { email, password } = req.body; - - try { - const isMatch = await User.comparePassword(email, password); - if (!isMatch) { - return res.render('login', { message: 'Invalid email or password' }); - } - - req.session.userId = email; - res.redirect('/'); - } catch (err) { - console.error(err); - res.render('login', { message: 'Error logging in' }); - } -}; - -exports.logout = (req, res) => { - req.session.destroy(() => { - res.redirect('/login'); - }); -}; diff --git a/models/tourModel.js b/models/tourModel.js index 8889f89..4e39654 100644 --- a/models/tourModel.js +++ b/models/tourModel.js @@ -12,39 +12,4 @@ class Tour { } } -class User { - static async findOne(email) { - try { - const [rows] = await db.query('SELECT * FROM users WHERE email = ?', [email]); - return rows.length > 0 ? rows[0] : null; - } catch (err) { - throw err; - } - } - - static async create(name, email, password) { - try { - const hashedPassword = await bcrypt.hash(password, 10); - const [result] = await db.query( - 'INSERT INTO users (name, email, password) VALUES (?, ?, ?)', - [name, email, hashedPassword] - ); - return result.insertId; - } catch (err) { - throw err; - } - } - - static async comparePassword(email, password) { - try { - const user = await User.findOne(email); - if (!user) return false; - return await bcrypt.compare(password, user.password); - } catch (err) { - throw err; - } - } -} - -module.exports = User; module.exports = Tour; diff --git a/models/userModel.js b/models/userModel.js new file mode 100644 index 0000000..65c7770 --- /dev/null +++ b/models/userModel.js @@ -0,0 +1,38 @@ +const db = require('../config/database'); // เชื่อมต่อ MySQL +const bcrypt = require('bcryptjs'); + +class User { + static async findOne(email) { + try { + const [rows] = await db.query('SELECT * FROM users WHERE email = ?', [email]); + return rows.length > 0 ? rows[0] : null; + } catch (err) { + throw err; + } + } + + static async create(name, email, password) { + try { + const hashedPassword = await bcrypt.hash(password, 10); + const [result] = await db.query( + 'INSERT INTO users (name, email, password) VALUES (?, ?, ?)', + [name, email, hashedPassword] + ); + return result.insertId; + } catch (err) { + throw err; + } + } + + static async comparePassword(email, password) { + try { + const user = await User.findOne(email); + if (!user) return false; + return await bcrypt.compare(password, user.password); + } catch (err) { + throw err; + } + } +} + +module.exports = User; diff --git a/routes/tourRoutes.js b/routes/tourRoutes.js index 517bde7..ca500af 100644 --- a/routes/tourRoutes.js +++ b/routes/tourRoutes.js @@ -1,13 +1,14 @@ const express = require('express'); const router = express.Router(); const tourController = require('../controllers/tourController'); +const authController = require('../controllers/authController'); router.get('/', tourController.getTours); router.get('/tour/:id', tourController.getTourDetails); -router.get('/login', tourController.getLogin); -router.get('/register', tourController.getRegister); -router.post('/login', tourController.postLogin); -router.post('/register', tourController.postRegister); +router.get('/login', authController.getLogin); +router.get('/register', authController.getRegister); +router.post('/login', authController.postLogin); +router.post('/register', authController.postRegister); module.exports = router; -- GitLab