diff --git a/java/roomBooking/src/main/java/com/uva/roomBooking/Controllers/HotelController.java b/java/roomBooking/src/main/java/com/uva/roomBooking/Controllers/HotelController.java index 587c57014ea64272b3be49cbed0706800bef484b..803edc35fdcbf2b5ec7fc96972e8ee2a7777391d 100644 --- a/java/roomBooking/src/main/java/com/uva/roomBooking/Controllers/HotelController.java +++ b/java/roomBooking/src/main/java/com/uva/roomBooking/Controllers/HotelController.java @@ -7,13 +7,16 @@ import java.time.LocalDate; import com.uva.roomBooking.Exceptions.HotelNotFoundException; import com.uva.roomBooking.Exceptions.InvalidDateRangeException; import com.uva.roomBooking.Exceptions.InvalidRequestException; +import com.uva.roomBooking.Models.Booking; import com.uva.roomBooking.Models.Hotel; import com.uva.roomBooking.Models.Room; +import com.uva.roomBooking.Repositories.BookingRepository; import com.uva.roomBooking.Repositories.HotelRepository; import com.uva.roomBooking.Repositories.RoomRepository; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @RestController @@ -22,10 +25,13 @@ import org.springframework.web.bind.annotation.*; public class HotelController { private final HotelRepository hotelRepository; private final RoomRepository roomRepository; + private final BookingRepository bookingRepository; - public HotelController(HotelRepository hotelRepository, RoomRepository roomRepository) { + public HotelController(HotelRepository hotelRepository, RoomRepository roomRepository, + BookingRepository bookingRepository) { this.hotelRepository = hotelRepository; this.roomRepository = roomRepository; + this.bookingRepository = bookingRepository; } // Obtener todos los hoteles @@ -50,9 +56,11 @@ public class HotelController { // Borrar un hotel junto con sus habitaciones (borrado en cascada) @DeleteMapping("/{id}") + @Transactional public ResponseEntity<Void> deleteHotel(@PathVariable Integer id) { Hotel target = hotelRepository.findById(id) .orElseThrow(() -> new HotelNotFoundException(id)); + bookingRepository.deleteAllByHotelId(id); hotelRepository.delete(target); return new ResponseEntity<>(HttpStatus.NO_CONTENT); } 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 b926175f84ff2d8748e4250e0bd8f574151ab25a..16c860a30fd168d4e03018ef02466dcd5adb7f99 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 @@ -3,6 +3,8 @@ package com.uva.roomBooking.Repositories; import com.uva.roomBooking.Models.Booking; +import jakarta.transaction.Transactional; + import java.time.LocalDate; import java.util.List; @@ -17,8 +19,14 @@ public interface BookingRepository extends JpaRepository<Booking, Integer> { List<Booking> findByRoomIdAndDateRange(@Param("roomId") int roomId, @Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate); + @Transactional @Modifying @Query("DELETE FROM Booking b WHERE b.id = ?1") void deleteBookingById(@Param("id") Integer id); + @Transactional + @Modifying + @Query("DELETE FROM Booking b WHERE b.roomId.hotel.id = ?1") + void deleteAllByHotelId(int hotelId); + }