From 51911cebdece4681c288f5c3305f8695fd297dc6 Mon Sep 17 00:00:00 2001 From: migudel <miguel.moras@estudiantes.uva.es> Date: Sun, 3 Nov 2024 00:46:17 +0100 Subject: [PATCH] =?UTF-8?q?Refinamiento=20en=20b=C3=BAsqueda=20de=20habita?= =?UTF-8?q?ciones=20y=20comprobaci=C3=B3n=20de=20creaci=C3=B3n=20de=20rese?= =?UTF-8?q?rva=20a=20trav=C3=A9s=20de=20web?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/app/booking/booking.component.html | 12 +++++++++++- .../src/app/booking/booking.component.ts | 19 ++++++++++--------- .../src/app/shared/booking.service.ts | 12 +++--------- .../app/shared/cliente-api-rest.service.ts | 6 +++--- .../Controllers/BookingController.java | 6 ------ .../com/uva/roomBooking/Models/Booking.java | 1 - .../Repositories/RoomRepository.java | 7 +++++-- 7 files changed, 32 insertions(+), 31 deletions(-) diff --git a/angular/RestClient/src/app/booking/booking.component.html b/angular/RestClient/src/app/booking/booking.component.html index fd95865..f091457 100644 --- a/angular/RestClient/src/app/booking/booking.component.html +++ b/angular/RestClient/src/app/booking/booking.component.html @@ -2,7 +2,7 @@ <h2>Crear Reserva</h2> <form [formGroup]="bookingForm" (ngSubmit)="submitBooking()"> <div class="form-group"> - <label for="userId">Usuario:</label> + <label for="userId">ID del Usuario:</label> <input type="number" id="userId" @@ -11,6 +11,16 @@ /> </div> + <div class="form-group"> + <label for="roomId">ID del Hotel:</label> + <input + type="number" + id="roomId" + formControlName="roomId" + class="form-control" + /> + </div> + <div class="form-group"> <label for="roomType">Tipo de Habitación:</label> <select id="roomType" formControlName="roomType" class="form-control"> diff --git a/angular/RestClient/src/app/booking/booking.component.ts b/angular/RestClient/src/app/booking/booking.component.ts index c928803..ff85d89 100644 --- a/angular/RestClient/src/app/booking/booking.component.ts +++ b/angular/RestClient/src/app/booking/booking.component.ts @@ -5,15 +5,10 @@ import { FormBuilder, Validators, } from '@angular/forms'; -interface BookingRequest { - userId: number; // ID del usuario que realiza la reserva - hotelId: number; // ID del hotel en el que se realiza la reserva - roomType: string; // Tipo de habitación (single, double, suite) - startDate: string; // Fecha de inicio de la reserva - endDate: string; // Fecha de fin de la reserva// Asegúrate de ajustar la ruta -} + import { BookingService } from '../shared/booking.service'; // Asegúrate de que el servicio exista import { ActivatedRoute } from '@angular/router'; +import { Booking } from '../../types'; @Component({ standalone: true, @@ -34,7 +29,7 @@ export class BookingComponent implements OnInit { // Inicialización del formulario con validaciones this.bookingForm = this.fb.group({ userId: ['', Validators.required], - hotelId: ['', Validators.required], + roomId: ['', Validators.required], roomType: ['', Validators.required], startDate: ['', Validators.required], endDate: ['', Validators.required], @@ -49,7 +44,13 @@ export class BookingComponent implements OnInit { submitBooking() { if (this.bookingForm.valid) { - const bookingRequest: BookingRequest = this.bookingForm.value; + const formValue = this.bookingForm.value; + const bookingRequest: Booking = { + ...formValue, + userId: { id: formValue.userId }, + roomId: { id: formValue.roomId }, + }; + console.warn(bookingRequest); // Llama al servicio para crear una nueva reserva this.bookingService.createBooking(bookingRequest).subscribe( diff --git a/angular/RestClient/src/app/shared/booking.service.ts b/angular/RestClient/src/app/shared/booking.service.ts index 3a4db3f..fe01d96 100644 --- a/angular/RestClient/src/app/shared/booking.service.ts +++ b/angular/RestClient/src/app/shared/booking.service.ts @@ -2,25 +2,19 @@ import { Injectable } from '@angular/core'; import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Observable } from 'rxjs'; -interface BookingRequest { - userId: number; // ID del usuario que realiza la reserva - hotelId: number; // ID del hotel en el que se realiza la reserva - roomType: string; // Tipo de habitación (single, double, suite) - startDate: string; // Fecha de inicio de la reserva - endDate: string; // Fecha de fin de la reserva -} + import { Booking } from '../../types/Booking'; // Ajusta la ruta a tu modelo Booking @Injectable({ providedIn: 'root', // Esto hace que el servicio esté disponible en toda la aplicación }) export class BookingService { - private apiUrl = 'http://localhost:8080/api/bookings'; + private apiUrl = 'http://localhost:8080/bookings'; constructor(private http: HttpClient) {} // Método para crear una nueva reserva - createBooking(bookingRequest: BookingRequest): Observable<Booking> { + createBooking(bookingRequest: Booking): Observable<Booking> { return this.http.post<Booking>(this.apiUrl, bookingRequest, { headers: new HttpHeaders({ 'Content-Type': 'application/json', diff --git a/angular/RestClient/src/app/shared/cliente-api-rest.service.ts b/angular/RestClient/src/app/shared/cliente-api-rest.service.ts index 2ef2d20..6cfa26d 100644 --- a/angular/RestClient/src/app/shared/cliente-api-rest.service.ts +++ b/angular/RestClient/src/app/shared/cliente-api-rest.service.ts @@ -59,9 +59,9 @@ export class ClienteApiRestService { getRoomsAvailableInDateRange(hotelId: number, start: Date, end: Date) { const startStr = start.toISOString().split('T')[0]; const endStr = end.toISOString().split('T')[0]; - return this.http.get<Room[]>( - `${ClienteApiRestService.HOTEL_URI}/${hotelId}/rooms?start=${startStr}&end=${endStr}` - ); + const url = `${ClienteApiRestService.HOTEL_URI}/${hotelId}/rooms?start=${startStr}&end=${endStr}`; + console.warn(url); + return this.http.get<Room[]>(url); } getAllUsers() { 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 c5bd2cb..e3c13ce 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 @@ -40,11 +40,6 @@ public class BookingController { 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()); @@ -63,5 +58,4 @@ public class BookingController { bookingRepository.deleteById(id); } - } diff --git a/java/roomBooking/src/main/java/com/uva/roomBooking/Models/Booking.java b/java/roomBooking/src/main/java/com/uva/roomBooking/Models/Booking.java index c2b36c9..86a712f 100644 --- a/java/roomBooking/src/main/java/com/uva/roomBooking/Models/Booking.java +++ b/java/roomBooking/src/main/java/com/uva/roomBooking/Models/Booking.java @@ -20,7 +20,6 @@ import java.time.LocalDate; public class Booking { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Basic(optional = false) private int id; // TODO revisar si lo de cascade es estrictamente necesario @JoinColumn(name = "user_id", referencedColumnName = "id") diff --git a/java/roomBooking/src/main/java/com/uva/roomBooking/Repositories/RoomRepository.java b/java/roomBooking/src/main/java/com/uva/roomBooking/Repositories/RoomRepository.java index 71b439f..3df9937 100644 --- a/java/roomBooking/src/main/java/com/uva/roomBooking/Repositories/RoomRepository.java +++ b/java/roomBooking/src/main/java/com/uva/roomBooking/Repositories/RoomRepository.java @@ -16,7 +16,6 @@ public interface RoomRepository extends JpaRepository<Room, Integer> { List<Room> findAllByHotelId(int hotelId); // Encontrar habitaciones disponibles de un hotel en un rango de fechas - // TODO revisar los límites en las fechas @Query(""" SELECT r FROM Room r WHERE r.hotel.id = ?1 @@ -24,7 +23,11 @@ public interface RoomRepository extends JpaRepository<Room, Integer> { AND NOT EXISTS ( SELECT b FROM Booking b WHERE b.roomId.id = r.id - AND (b.startDate < ?3 AND b.endDate > ?2) + AND ( + b.endDate > ?2 + OR + b.startDate > ?3 + ) ) """) List<Room> findAvailableRoomsByHotelAndDates( -- GitLab