From e77945e7d4f4d800c5575ef887b59c1dc0fcc3ac Mon Sep 17 00:00:00 2001 From: Hugo <hugo.cubino@estudiantes.uva.es> Date: Fri, 1 Nov 2024 17:46:00 +0100 Subject: [PATCH] =?UTF-8?q?A=C3=B1adidas=20comprobaciones=20al=20hacer=20l?= =?UTF-8?q?a=20reserva?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/BookingController.java | 22 +++++++++++++++++-- .../Repositories/BookingRepository.java | 9 ++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) 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 b3b78e3..c5bd2cb 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 121da32..f0a0027 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); } -- GitLab