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