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