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);
 }