diff --git a/java/roomBooking/src/main/java/com/uva/roomBooking/Controllers/BookingController.java b/java/roomBooking/src/main/java/com/uva/roomBooking/Controllers/BookingController.java index b3b78e3543d2dd533c1423d27c5e2e291552a729..c5bd2cbd629e28aae1a037ddbe248a507271f1dd 100644 --- a/java/roomBooking/src/main/java/com/uva/roomBooking/Controllers/BookingController.java +++ b/java/roomBooking/src/main/java/com/uva/roomBooking/Controllers/BookingController.java @@ -35,8 +35,24 @@ public class BookingController { @PostMapping public Booking createBooking(@RequestBody Booking booking) { - User user = userRepository.findById(booking.getUserId().getId()).orElseThrow(); - Room room = roomRepository.findById(booking.getRoomId().getId()).orElseThrow(); + User user = userRepository.findById(booking.getUserId().getId()) + .orElseThrow(() -> new RuntimeException("User not found")); + Room room = roomRepository.findById(booking.getRoomId().getId()) + .orElseThrow(() -> new RuntimeException("Room not found")); + + // Validar el tipo de habitación + if (!room.getType().equals(booking.getRoomId().getType())) { + throw new RuntimeException("Room type does not match the requested type"); + } + + // Verificar disponibilidad + List<Booking> existingBookings = bookingRepository.findByRoomIdAndDateRange( + room.getId(), booking.getStartDate(), booking.getEndDate()); + + if (!existingBookings.isEmpty()) { + throw new RuntimeException("Room is not available for the selected dates"); + } + booking.setUserId(user); booking.setRoomId(room); return bookingRepository.save(booking); @@ -46,4 +62,6 @@ public class BookingController { public void deleteBooking(@PathVariable Integer id) { bookingRepository.deleteById(id); } + + } diff --git a/java/roomBooking/src/main/java/com/uva/roomBooking/Repositories/BookingRepository.java b/java/roomBooking/src/main/java/com/uva/roomBooking/Repositories/BookingRepository.java index 121da32b226cdb31dcd79f3c91dec26e8f207497..f0a00276192f2ee34db29aa79b58936c1e6df0fa 100644 --- a/java/roomBooking/src/main/java/com/uva/roomBooking/Repositories/BookingRepository.java +++ b/java/roomBooking/src/main/java/com/uva/roomBooking/Repositories/BookingRepository.java @@ -2,7 +2,16 @@ package com.uva.roomBooking.Repositories; import com.uva.roomBooking.Models.Booking; + +import java.time.LocalDate; +import java.util.List; + import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; public interface BookingRepository extends JpaRepository<Booking, Integer> { + + @Query("SELECT b FROM Booking b WHERE b.room.id = :roomId AND b.startDate < :endDate AND b.endDate > :startDate") + List<Booking> findByRoomIdAndDateRange(@Param("roomId") int roomId, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate); }