const pool = require('../config/database'); const bcrypt = require('bcryptjs'); class Tour { // // ดึงทัวร์ทั้งหมด // static async getAllTours() { // try { // console.log('Fetching all tours...'); // const [rows] = await pool.query('SELECT * FROM tours'); // console.log('Tours fetched successfully:', rows); // return rows; // } catch (error) { // console.error('Error fetching tours:', error.message); // throw new Error('เกิดข้อผิดพลาดในการดึงข้อมูลทัวร์: ' + error.message); // } // } // // ดึงทัวร์ตาม ID // static async getTourById(id) { // try { // const [rows] = await pool.query('SELECT * FROM tours WHERE id = ?', [id]); // if (rows.length === 0) { // throw new Error('ไม่พบทัวร์ที่มี ID นี้'); // } // return rows[0]; // } catch (error) { // console.error('Error fetching tour by ID:', error); // throw new Error('เกิดข้อผิดพลาดในการดึงข้อมูลทัวร์'); // } // } // สร้างทัวร์ static async createTour(tourData) { const { name, description, price, duration } = tourData; // ตรวจสอบข้อมูล if (!name || !price || !duration) { throw new Error('ข้อมูลไม่ครบถ้วน กรุณากรอกข้อมูลให้ครบถ้วน'); } const query = 'INSERT INTO tours (name, description, price, duration) VALUES (?, ?, ?, ?)'; try { await pool.execute(query, [name, description, price, duration]); } catch (error) { console.error('Error creating tour:', error); throw new Error('เกิดข้อผิดพลาดในการสร้างทัวร์'); } } // อัปเดตทัวร์ static async updateTour(id, tourData) { const { name, description, price, duration } = tourData; // ตรวจสอบข้อมูล if (!name || !price || !duration) { throw new Error('ข้อมูลไม่ครบถ้วน กรุณากรอกข้อมูลให้ครบถ้วน'); } const query = 'UPDATE tours SET name = ?, description = ?, price = ?, duration = ? WHERE id = ?'; try { await pool.execute(query, [name, description, price, duration, id]); } catch (error) { console.error('Error updating tour:', error); throw new Error('เกิดข้อผิดพลาดในการอัปเดตทัวร์'); } } // ลบทัวร์ static async deleteTour(id) { const query = 'DELETE FROM tours WHERE id = ?'; try { await pool.execute(query, [id]); } catch (error) { console.error('Error deleting tour:', error); throw new Error('เกิดข้อผิดพลาดในการลบทัวร์'); } } } class User { static async findOne(email) { try { const [rows] = await pool.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 pool.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, Tour };