From 5037acf330659be75b468930964f563e88be292e Mon Sep 17 00:00:00 2001 From: Atiwit Pattanapukdee <65160394@go.buu.ac.th> Date: Sun, 16 Mar 2025 21:29:34 +0700 Subject: [PATCH] Project Round 2 --- controllers/authController.js | 21 -------------- controllers/tourController.js | 54 +++++++++++++++++++++++++++++++++++ models/tourModel.js | 35 +++++++++++++++++++++++ models/userModel.js | 38 ------------------------ server.js | 2 +- 5 files changed, 90 insertions(+), 60 deletions(-) delete mode 100644 controllers/authController.js delete mode 100644 models/userModel.js diff --git a/controllers/authController.js b/controllers/authController.js deleted file mode 100644 index 8f4fba1..0000000 --- a/controllers/authController.js +++ /dev/null @@ -1,21 +0,0 @@ -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 d8139ad..a6f5ca4 100644 --- a/controllers/tourController.js +++ b/controllers/tourController.js @@ -1,4 +1,5 @@ const Tour = require('../models/tourModel'); +const User = require('../models/tourModel'); exports.getTours = async (req, res) => { try { @@ -19,4 +20,57 @@ exports.getTourDetails = async (req, res) => { } }; +//User// +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 4e39654..8889f89 100644 --- a/models/tourModel.js +++ b/models/tourModel.js @@ -12,4 +12,39 @@ 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 deleted file mode 100644 index 65c7770..0000000 --- a/models/userModel.js +++ /dev/null @@ -1,38 +0,0 @@ -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/server.js b/server.js index fd81c0a..ff3eb69 100644 --- a/server.js +++ b/server.js @@ -15,7 +15,7 @@ app.use('/', tourRoutes); app.use('/login', tourRoutes); app.use('/register', tourRoutes); -const PORT = process.env.PORT || 3306; +const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); }); -- GitLab