Gitlab@Informatics

Skip to content
Snippets Groups Projects
Select Git revision
  • main default protected
1 result

tourController.js

Blame
  • tourController.js 10.51 KiB
    const { User, Tour , Booking } = require('../models/tourModel');
    const pool = require('../config/database');
    
    exports.getTours = async (req, res) => {
      try {
        const tours = await Tour.getAllTours(req.session.userId); // ดึงทัวร์ที่สร้างโดยผู้ใช้ที่ล็อกอิน
        res.render('index', { tours, session: req.session });
      } catch (error) {
        res.status(500).send(error.message);
      }
    };
      
    exports.getTourDetails = async (req, res) => {
      try {
        const tour = await Tour.getTourById(req.params.userId);
        res.render('tour-details', { tour });
      } catch (error) {
        res.status(500).send(error.message);
      }
    };
    
    //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 user = await User.findOne(email); // หาผู้ใช้จากฐานข้อมูล
    
          if (!user) {
              return res.render('login', { message: 'Invalid email or password' });
          }
    
          const isMatch = await User.comparePassword(email, password); // ตรวจสอบรหัสผ่าน
          if (!isMatch) {
              return res.render('login', { message: 'Invalid email or password' });
          }
    
          req.session.userId = user.id; // เก็บ email ใน session
          req.session.userName = user.name; // เก็บชื่อผู้ใช้ใน session
          res.redirect('/'); // เมื่อ login สำเร็จให้ไปหน้า home
      } catch (err) {
          console.error(err);
          res.render('login', { message: 'Error logging in' });
      }
    };
    
    exports.Logout = (req, res) => {
      req.session.destroy((err) => {
        if (err) {
          return res.status(500).send('เกิดข้อผิดพลาดในการออกจากระบบ');
        }
        res.redirect('/login'); // หลังจาก logout สำเร็จ ให้ redirect ไปหน้า login
      });
    };
    
    
    //Profile
    exports.getProfilePage = (req, res) => {
      if (req.session.userId) {
        const user = req.session.userName;
        res.render('profile', { user, session: req.session });
      } else {
        res.redirect('/login');
      }
    };
    
    exports.getEditProfilePage = async (req, res) => {
      if (!req.session.userId) {
        return res.redirect('/profile');
      }
    
      try {
        const user = await User.findById(req.session.userId);
        res.render('edit-profile', { user });
      } catch (err) {
        console.error(err);
        res.redirect('/profile');
      }
    };
    
    exports.updateProfile = async (req, res) => {
      const { name, email, password } = req.body;
    
      if (!name || !email) {
        return res.status(400).send('Name and Email are required');
      }
    
      try {
        let user = await User.findById(req.session.userId);
    
        // อัปเดตชื่อและอีเมล
        user.name = name;
        user.email = email;
    
        // อัปเดตพาสเวิร์ดถ้ามีการกรอก
        if (password) {
          user.password = await bcrypt.hash(password, 10);
        }
    
        await user.save();
        res.redirect('/profile');
      } catch (err) {
        console.error(err);
        res.status(500).send('Error updating profile');
      }
    };
    
    //CRUD
    // แสดงฟอร์มสร้างทัวร์
    exports.getCreateTour = (req, res) => {
      res.render('createtour'); 
    };
    
    // บันทึกทัวร์ใหม่
    exports.createTour = async (req, res) => {
      const { name, description, price, duration } = req.body;
    
      if (!name || !description || !price || !duration) {
        return res.status(400).send('กรุณากรอกข้อมูลให้ครบทุกช่อง');
      }
      // แปลง userId ให้เป็นตัวเลข
      const userId = parseInt(req.session.userId, 10);
    
      if (isNaN(userId)) {
        return res.status(400).send('User ID is not valid');
      }
      // ตรวจสอบค่าที่ได้รับจาก req.session และ body
      console.log('Received Values:');
      console.log('UserID:', userId);
      console.log('Tour Details:');
      console.log('Name:', name);
      console.log('Description:', description);
      console.log('Price:', price);
      console.log('Duration:', duration);
      try {
        // ส่ง userId ที่เก็บไว้ใน session ไปพร้อมกับข้อมูลทัวร์
        await Tour.createTour(name, description, price, duration, req.session.userId);
        res.redirect('/'); // กลับไปหน้าแรกหลังจากสร้างทัวร์
      } catch (error) {
        console.error('Error creating tour:', error);
        res.status(500).send('เกิดข้อผิดพลาดในการสร้างทัวร์');
      }
    };
    // ฟังก์ชั่นสำหรับสร้างทัวร์
    exports.postCreateTour = async (req, res) => {
      const { name, description, price, duration } = req.body;
      
      if (!name || !price || !duration) {
        return res.render('createtour', { message: 'ข้อมูลไม่ครบถ้วน' });
      }
    
      try {
        // ใช้ฟังก์ชันจากโมเดลในการสร้างทัวร์
        await Tour.createTour(name, description, price, duration, req.session.userId);
        res.redirect('/'); // กลับไปหน้าแรกหลังจากสร้างเสร็จ
      } catch (error) {
        console.error(error);
        res.render('createtour', { message: 'เกิดข้อผิดพลาดในการสร้างทัวร์' });
      }
    };
    exports.getEditTour = async (req, res) => {
      try {
        const tour = await Tour.getTourById(req.params.id);
        if (!tour) return res.status(404).send('ไม่พบข้อมูลทัวร์');
        if (tour.userId !== req.session.userId) {
          return res.status(403).send('คุณไม่มีสิทธิ์แก้ไขทัวร์นี้');
        }
        res.render('edittour', { tour });
      } catch (error) {
        res.status(500).send('เกิดข้อผิดพลาด');
      }
    };
      
    exports.postEditTour = async (req, res) => {
      const { name, description, price, duration } = req.body;
      console.log('📥 Data received:', req.body);  // ตรวจสอบข้อมูลที่ได้รับจากฟอร์ม
    
      // ตรวจสอบว่ามีค่าครบถ้วนหรือไม่
      if (!name || !description || !price || !duration) {
        return res.status(400).send('กรุณากรอกข้อมูลให้ครบทุกช่อง');
      }
    
      const tourData = { name, description, price, duration };
      const tourId = req.params.userId;  
      if (!tourId) {
        return res.status(400).send('ไม่พบข้อมูลทัวร์');
      }
    
      try {
        await Tour.updateTour(tourId, tourData); 
        res.redirect('/tour/' + tourId); // ไปที่หน้ารายละเอียดทัวร์
      } catch (error) {
        console.error('Error updating tour:', error);  // ข้อผิดพลาด
        res.status(500).send('เกิดข้อผิดพลาดในการแก้ไขทัวร์');
      }
    };
    
    exports.deleteTour = async (req, res) => {
      try {
        const tour = await Tour.getTourById(req.params.userId);
        if (!tour) return res.status(404).send('ไม่พบข้อมูลทัวร์');
        if (tour.userId !== req.session.userId) {
          return res.status(403).send('คุณไม่มีสิทธิ์ลบทัวร์นี้');
        }
        await Tour.deleteTour(req.params.userId); // ลบทัวร์ที่ผู้ใช้เป็นเจ้าของ
        res.redirect('/'); // ไปที่หน้า home
      } catch (error) {
        res.status(500).send('เกิดข้อผิดพลาดในการลบทัวร์');
      }
    };
    
    //ค้นหาทัวร์
    exports.searchTours = async (req, res) => {
      try {
        const searchQuery = req.query.query;
        const tours = await Tour.searchTours(searchQuery);
    
        // ตรวจสอบว่าผลลัพธ์จาก Tour.searchTours เป็นอาร์เรย์หรือไม่
        if (!Array.isArray(tours)) {
          console.log('ผลลัพธ์จาก searchTours ไม่ใช่ Array:', tours);
          return res.render('search', { tours: [], session: req.session }); // ส่งอาร์เรย์ว่างไปหากไม่ใช่ Array
        }
    
        res.render('search', { tours, session: req.session });
      } catch (error) {
        console.error('Error searching tours:', error);
        res.status(500).send("Error searching tours");
      }
    };
    
    //จองทัวร์
    exports.getUserBookings = async (req, res) => {
      try {
          const bookings = await Booking.getUserBookings(req.session.userId);
          res.render('myBookings', { bookings });
      } catch (error) {
          res.status(500).json({ message: 'เกิดข้อผิดพลาดในการดึงข้อมูลการจอง' });
      }
    };
    
    exports.createBooking = async (req, res) => {
      const { tourId } = req.body;
      try {
          await Booking.createBooking(req.session.userId, tourId);
          res.redirect('/bookings/my-bookings');
      } catch (error) {
          res.status(500).json({ message: 'เกิดข้อผิดพลาดในการจองทัวร์' });
      }
    };
    
    exports.cancelBooking = async (req, res) => {
      try {
          const deleted = await Booking.cancelBooking(req.session.userId, req.params.id);
          if (deleted === 0) return res.status(403).json({ message: 'ไม่มีสิทธิ์ยกเลิกการจองนี้' });
          res.redirect('/bookings/my-bookings');
      } catch (error) {
          res.status(500).json({ message: 'เกิดข้อผิดพลาดในการยกเลิกการจอง' });
      }
    };