diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/controllers/BookingController.java b/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/controllers/BookingController.java
index fb61c1841d43ae67f0536717eae3bb69cfada116..602f16a2f96e27d3e855440136cbcb41f9b57ab0 100644
--- a/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/controllers/BookingController.java
+++ b/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/controllers/BookingController.java
@@ -1,19 +1,11 @@
-// BookingController.java
 package com.uva.monolith.services.bookings.controllers;
 
-import jakarta.transaction.Transactional;
-
+import com.uva.monolith.services.bookings.models.Booking;
+import com.uva.monolith.services.bookings.services.BookingService;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
-import com.uva.monolith.services.bookings.models.Booking;
-import com.uva.monolith.services.bookings.repositories.BookingRepository;
-import com.uva.monolith.services.hotels.models.Room;
-import com.uva.monolith.services.hotels.repositories.RoomRepository;
-import com.uva.monolith.services.users.models.User;
-import com.uva.monolith.services.users.repositories.UserRepository;
-
 import java.time.LocalDate;
 import java.util.List;
 
@@ -22,89 +14,38 @@ import java.util.List;
 @CrossOrigin(origins = "*")
 public class BookingController {
 
-    private final BookingRepository bookingRepository;
-    private final UserRepository userRepository;
-    private final RoomRepository roomRepository;
+    private final BookingService bookingService;
 
-    public BookingController(BookingRepository bookingRepository, UserRepository userRepository,
-            RoomRepository roomRepository) {
-        this.bookingRepository = bookingRepository;
-        this.userRepository = userRepository;
-        this.roomRepository = roomRepository;
+    public BookingController(BookingService bookingService) {
+        this.bookingService = bookingService;
     }
 
-    @GetMapping()
+    @GetMapping
     public List<Booking> getAllBookings(
             @RequestParam(required = false) LocalDate start,
             @RequestParam(required = false) LocalDate end,
             @RequestParam(required = false) Integer roomId,
             @RequestParam(required = false) Integer userId) {
-
-        List<Booking> bookings = null;
-        if (start != null && end != null) {
-            bookings = bookingRepository.findByDateRange(start, end);
-        }
-        if (roomId != null) {
-            if (bookings == null) {
-                bookings = bookingRepository.findByRoomId(roomId);
-            } else {
-                bookings = bookings.stream()
-                        .filter(booking -> booking.getRoomId().getId() == roomId)
-                        .toList();
-            }
-        }
-        if (userId != null) {
-            if (bookings == null) {
-                bookings = bookingRepository.findByUserId(userId);
-            } else {
-                bookings = bookings.stream()
-                        .filter(booking -> booking.getUserId().getId() == userId)
-                        .toList();
-            }
-        }
-        if (start == null & end == null && roomId == null && userId == null) {
-            bookings = bookingRepository.findAll();
-        }
-        return bookings;
+        return bookingService.getBookings(start, end, roomId, userId);
     }
 
     @PostMapping
     public Booking createBooking(@RequestBody Booking booking) {
-        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"));
-
-        // 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);
+        return bookingService.createBooking(booking);
     }
 
     @GetMapping("/{id}")
     public Booking getBookingById(@PathVariable Integer id) {
-        return bookingRepository.findById(id)
-                .orElseThrow(() -> new RuntimeException("Booking not found"));
+        return bookingService.getBookingById(id);
     }
 
     @DeleteMapping("/{id}")
-    @Transactional
     public ResponseEntity<Void> deleteBooking(@PathVariable Integer id) {
         try {
-            if (!bookingRepository.existsById(id))
-                return new ResponseEntity<>(HttpStatus.NOT_FOUND);
-
-            bookingRepository.deleteBookingById(id);
+            bookingService.deleteBooking(id);
             return new ResponseEntity<>(HttpStatus.ACCEPTED);
-        } catch (Exception e) {
-            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+        } catch (RuntimeException e) {
+            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
         }
     }
 }
diff --git a/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/services/BookingService.java b/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/services/BookingService.java
new file mode 100644
index 0000000000000000000000000000000000000000..b897e471671f17ede09f11d063292929ea527eae
--- /dev/null
+++ b/java/roomBooking/src/main/java/com/uva/monolith/services/bookings/services/BookingService.java
@@ -0,0 +1,88 @@
+package com.uva.monolith.services.bookings.services;
+
+import com.uva.monolith.services.bookings.models.Booking;
+import com.uva.monolith.services.bookings.repositories.BookingRepository;
+import com.uva.monolith.services.hotels.models.Room;
+import com.uva.monolith.services.hotels.repositories.RoomRepository;
+import com.uva.monolith.services.users.models.User;
+import com.uva.monolith.services.users.repositories.UserRepository;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDate;
+import java.util.List;
+
+@Service
+public class BookingService {
+
+    private final BookingRepository bookingRepository;
+    private final UserRepository userRepository;
+    private final RoomRepository roomRepository;
+
+    public BookingService(BookingRepository bookingRepository, UserRepository userRepository, RoomRepository roomRepository) {
+        this.bookingRepository = bookingRepository;
+        this.userRepository = userRepository;
+        this.roomRepository = roomRepository;
+    }
+
+    public List<Booking> getBookings(LocalDate start, LocalDate end, Integer roomId, Integer userId) {
+        List<Booking> bookings = null;
+
+        if (start != null && end != null) {
+            bookings = bookingRepository.findByDateRange(start, end);
+        }
+        if (roomId != null) {
+            if (bookings == null) {
+                bookings = bookingRepository.findByRoomId(roomId);
+            } else {
+                bookings = bookings.stream()
+                        .filter(booking -> booking.getRoomId().getId() == roomId)
+                        .toList();
+            }
+        }
+        if (userId != null) {
+            if (bookings == null) {
+                bookings = bookingRepository.findByUserId(userId);
+            } else {
+                bookings = bookings.stream()
+                        .filter(booking -> booking.getUserId().getId() == userId)
+                        .toList();
+            }
+        }
+        if (start == null && end == null && roomId == null && userId == null) {
+            bookings = bookingRepository.findAll();
+        }
+
+        return bookings;
+    }
+
+    public Booking createBooking(Booking booking) {
+        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"));
+
+        // Check availability
+        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);
+    }
+
+    public Booking getBookingById(Integer id) {
+        return bookingRepository.findById(id)
+                .orElseThrow(() -> new RuntimeException("Booking not found"));
+    }
+
+    public void deleteBooking(Integer id) {
+        if (!bookingRepository.existsById(id)) {
+            throw new RuntimeException("Booking not found");
+        }
+        bookingRepository.deleteBookingById(id);
+    }
+}