From abf85c79ec9e3337cc1cab2911590954ddbd21a8 Mon Sep 17 00:00:00 2001
From: migudel <miguel.moras@estudiantes.uva.es>
Date: Sun, 3 Nov 2024 11:24:15 +0100
Subject: [PATCH] Cambios en la estructura

---
 .gitignore                                    |  3 ++
 angular/RestClient/src/app/app.component.ts   |  2 +-
 angular/RestClient/src/app/app.routes.ts      | 25 +++++++-----
 .../booking-list/booking-list.component.css   |  0
 .../booking-list/booking-list.component.html  |  0
 .../booking-list.component.spec.ts            |  0
 .../booking-list/booking-list.component.ts    |  8 ++--
 .../bookings}/booking/booking.component.css   |  0
 .../bookings}/booking/booking.component.html  |  0
 .../booking/booking.component.spec.ts         |  2 +-
 .../bookings}/booking/booking.component.ts    |  4 +-
 .../hotel-list/hotel-list.component.css       |  0
 .../hotel-list/hotel-list.component.html      |  0
 .../hotel-list/hotel-list.component.spec.ts   |  0
 .../hotel}/hotel-list/hotel-list.component.ts |  4 +-
 .../hotel-register.component.css              |  0
 .../hotel-register.component.html             |  0
 .../hotel-register.component.spec.ts          |  0
 .../hotel-register.component.ts               |  4 +-
 .../user}/main-page/main-page.component.css   |  0
 .../user}/main-page/main-page.component.html  |  0
 .../main-page/main-page.component.spec.ts     |  0
 .../user}/main-page/main-page.component.ts    | 14 ++++---
 .../user-booking-list.component.css           |  0
 .../user-booking-list.component.html          |  1 +
 .../user-booking-list.component.spec.ts       | 23 +++++++++++
 .../user-booking-list.component.ts            | 12 ++++++
 .../navigation/navigation.component.css       |  0
 .../navigation/navigation.component.html      |  4 +-
 .../navigation/navigation.component.spec.ts   |  0
 .../navigation/navigation.component.ts        |  0
 .../Controllers/UserController.java           | 40 +++++++++++++------
 .../com/uva/roomBooking/Models/Booking.java   |  4 +-
 .../uva/roomBooking/Models/UserStatus.java    |  1 -
 .../Repositories/BookingRepository.java       |  3 ++
 35 files changed, 108 insertions(+), 46 deletions(-)
 create mode 100644 .gitignore
 rename angular/RestClient/src/app/{ => core/features/bookings}/booking-list/booking-list.component.css (100%)
 rename angular/RestClient/src/app/{ => core/features/bookings}/booking-list/booking-list.component.html (100%)
 rename angular/RestClient/src/app/{ => core/features/bookings}/booking-list/booking-list.component.spec.ts (100%)
 rename angular/RestClient/src/app/{ => core/features/bookings}/booking-list/booking-list.component.ts (87%)
 rename angular/RestClient/src/app/{ => core/features/bookings}/booking/booking.component.css (100%)
 rename angular/RestClient/src/app/{ => core/features/bookings}/booking/booking.component.html (100%)
 rename angular/RestClient/src/app/{ => core/features/bookings}/booking/booking.component.spec.ts (96%)
 rename angular/RestClient/src/app/{ => core/features/bookings}/booking/booking.component.ts (92%)
 rename angular/RestClient/src/app/{ => core/features/hotel}/hotel-list/hotel-list.component.css (100%)
 rename angular/RestClient/src/app/{ => core/features/hotel}/hotel-list/hotel-list.component.html (100%)
 rename angular/RestClient/src/app/{ => core/features/hotel}/hotel-list/hotel-list.component.spec.ts (100%)
 rename angular/RestClient/src/app/{ => core/features/hotel}/hotel-list/hotel-list.component.ts (95%)
 rename angular/RestClient/src/app/{ => core/features/hotel}/hotel-register/hotel-register.component.css (100%)
 rename angular/RestClient/src/app/{ => core/features/hotel}/hotel-register/hotel-register.component.html (100%)
 rename angular/RestClient/src/app/{ => core/features/hotel}/hotel-register/hotel-register.component.spec.ts (100%)
 rename angular/RestClient/src/app/{ => core/features/hotel}/hotel-register/hotel-register.component.ts (96%)
 rename angular/RestClient/src/app/{ => core/features/user}/main-page/main-page.component.css (100%)
 rename angular/RestClient/src/app/{ => core/features/user}/main-page/main-page.component.html (100%)
 rename angular/RestClient/src/app/{ => core/features/user}/main-page/main-page.component.spec.ts (100%)
 rename angular/RestClient/src/app/{ => core/features/user}/main-page/main-page.component.ts (69%)
 create mode 100644 angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.css
 create mode 100644 angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.html
 create mode 100644 angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.spec.ts
 create mode 100644 angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.ts
 rename angular/RestClient/src/app/{ => core}/navigation/navigation.component.css (100%)
 rename angular/RestClient/src/app/{ => core}/navigation/navigation.component.html (58%)
 rename angular/RestClient/src/app/{ => core}/navigation/navigation.component.spec.ts (100%)
 rename angular/RestClient/src/app/{ => core}/navigation/navigation.component.ts (100%)

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..103bd2c
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+### Own ###
+taller
+*.pdf
\ No newline at end of file
diff --git a/angular/RestClient/src/app/app.component.ts b/angular/RestClient/src/app/app.component.ts
index 5584345..f6060ec 100644
--- a/angular/RestClient/src/app/app.component.ts
+++ b/angular/RestClient/src/app/app.component.ts
@@ -1,6 +1,6 @@
 import { Component } from '@angular/core';
 import { RouterOutlet } from '@angular/router';
-import { NavigationComponent } from './navigation/navigation.component';
+import { NavigationComponent } from './core/navigation/navigation.component';
 
 @Component({
   selector: 'app-root',
diff --git a/angular/RestClient/src/app/app.routes.ts b/angular/RestClient/src/app/app.routes.ts
index 58c8baf..b8ee77b 100644
--- a/angular/RestClient/src/app/app.routes.ts
+++ b/angular/RestClient/src/app/app.routes.ts
@@ -1,9 +1,10 @@
 import { Routes } from '@angular/router';
-import { HotelListComponent } from './hotel-list/hotel-list.component';
-import { BookingComponent } from './booking/booking.component';
-import { BookingListComponent } from './booking-list/booking-list.component';
-import { HotelRegisterComponent } from './hotel-register/hotel-register.component';
-import { MainPageComponent } from './main-page/main-page.component';
+import { HotelListComponent } from './core/features/hotel/hotel-list/hotel-list.component';
+import { BookingComponent } from './core/features/bookings/booking/booking.component';
+import { HotelRegisterComponent } from './core/features/hotel/hotel-register/hotel-register.component';
+import { MainPageComponent } from './core/features/user/main-page/main-page.component';
+import { BookingListComponent } from './core/features/bookings/booking-list/booking-list.component';
+import { UserBookingListComponent } from './core/features/user/user-booking-list/user-booking-list.component';
 
 export const routes: Routes = [
   {
@@ -11,9 +12,17 @@ export const routes: Routes = [
     component: MainPageComponent, // Componente de la página principal
   },
   {
-    path: 'booking/search',
+    path: 'bookings/search',
     component: BookingListComponent,
   },
+  {
+    path: 'bookings/new',
+    component: BookingComponent,
+  },
+  {
+    path: 'users/:id/bookings',
+    component: UserBookingListComponent,
+  },
   {
     path: 'hotels',
     component: HotelListComponent,
@@ -26,10 +35,6 @@ export const routes: Routes = [
     path: 'hotels/:id',
     component: HotelRegisterComponent,
   },
-  {
-    path: 'booking', // Añade la ruta para el componente de reservas
-    component: BookingComponent,
-  },
   {
     path: '**',
     redirectTo: '',
diff --git a/angular/RestClient/src/app/booking-list/booking-list.component.css b/angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.css
similarity index 100%
rename from angular/RestClient/src/app/booking-list/booking-list.component.css
rename to angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.css
diff --git a/angular/RestClient/src/app/booking-list/booking-list.component.html b/angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.html
similarity index 100%
rename from angular/RestClient/src/app/booking-list/booking-list.component.html
rename to angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.html
diff --git a/angular/RestClient/src/app/booking-list/booking-list.component.spec.ts b/angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.spec.ts
similarity index 100%
rename from angular/RestClient/src/app/booking-list/booking-list.component.spec.ts
rename to angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.spec.ts
diff --git a/angular/RestClient/src/app/booking-list/booking-list.component.ts b/angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.ts
similarity index 87%
rename from angular/RestClient/src/app/booking-list/booking-list.component.ts
rename to angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.ts
index 27e093f..298f8ee 100644
--- a/angular/RestClient/src/app/booking-list/booking-list.component.ts
+++ b/angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.ts
@@ -7,10 +7,11 @@ import {
 import { FormsModule } from '@angular/forms';
 import { MatInputModule } from '@angular/material/input';
 import { MatSelectModule } from '@angular/material/select';
-import { Hotel, Room, RoomType, roomTypeArray } from '../../types';
-import { ClienteApiRestService } from '../shared/cliente-api-rest.service';
+import { Hotel, Room, RoomType, roomTypeArray } from '../../../../../types';
+
 import { Router } from '@angular/router';
 import { MatCard, MatCardModule } from '@angular/material/card';
+import { ClienteApiRestService } from '../../../../shared/cliente-api-rest.service';
 
 type SelectableRoomType = 'All' | RoomType;
 const selectableRoomTypeArray: SelectableRoomType[] = ['All', ...roomTypeArray];
@@ -89,6 +90,7 @@ export class BookingListComponent {
   }
 
   bookingRoom(roomId: number) {
-    this.router.navigate(['/booking'], { queryParams: { roomId } });
+    // TODO plantear si se quiere mantener el query param o el rest param
+    this.router.navigate(['/bookings', 'new'], { queryParams: { roomId } });
   }
 }
diff --git a/angular/RestClient/src/app/booking/booking.component.css b/angular/RestClient/src/app/core/features/bookings/booking/booking.component.css
similarity index 100%
rename from angular/RestClient/src/app/booking/booking.component.css
rename to angular/RestClient/src/app/core/features/bookings/booking/booking.component.css
diff --git a/angular/RestClient/src/app/booking/booking.component.html b/angular/RestClient/src/app/core/features/bookings/booking/booking.component.html
similarity index 100%
rename from angular/RestClient/src/app/booking/booking.component.html
rename to angular/RestClient/src/app/core/features/bookings/booking/booking.component.html
diff --git a/angular/RestClient/src/app/booking/booking.component.spec.ts b/angular/RestClient/src/app/core/features/bookings/booking/booking.component.spec.ts
similarity index 96%
rename from angular/RestClient/src/app/booking/booking.component.spec.ts
rename to angular/RestClient/src/app/core/features/bookings/booking/booking.component.spec.ts
index 486d21f..5cfaef6 100644
--- a/angular/RestClient/src/app/booking/booking.component.spec.ts
+++ b/angular/RestClient/src/app/core/features/bookings/booking/booking.component.spec.ts
@@ -1,7 +1,7 @@
 import { ComponentFixture, TestBed } from '@angular/core/testing';
 import { ReactiveFormsModule } from '@angular/forms';
 import { BookingComponent } from './booking.component';
-import { BookingService } from '../shared/booking.service';
+import { BookingService } from '../../../../shared/booking.service';
 import { of } from 'rxjs';
 
 class MockBookingService {
diff --git a/angular/RestClient/src/app/booking/booking.component.ts b/angular/RestClient/src/app/core/features/bookings/booking/booking.component.ts
similarity index 92%
rename from angular/RestClient/src/app/booking/booking.component.ts
rename to angular/RestClient/src/app/core/features/bookings/booking/booking.component.ts
index ff85d89..803417a 100644
--- a/angular/RestClient/src/app/booking/booking.component.ts
+++ b/angular/RestClient/src/app/core/features/bookings/booking/booking.component.ts
@@ -6,9 +6,9 @@ import {
   Validators,
 } from '@angular/forms';
 
-import { BookingService } from '../shared/booking.service'; // Asegúrate de que el servicio exista
+import { BookingService } from '../../../../shared/booking.service'; // Asegúrate de que el servicio exista
 import { ActivatedRoute } from '@angular/router';
-import { Booking } from '../../types';
+import { Booking } from '../../../../../types';
 
 @Component({
   standalone: true,
diff --git a/angular/RestClient/src/app/hotel-list/hotel-list.component.css b/angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.css
similarity index 100%
rename from angular/RestClient/src/app/hotel-list/hotel-list.component.css
rename to angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.css
diff --git a/angular/RestClient/src/app/hotel-list/hotel-list.component.html b/angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.html
similarity index 100%
rename from angular/RestClient/src/app/hotel-list/hotel-list.component.html
rename to angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.html
diff --git a/angular/RestClient/src/app/hotel-list/hotel-list.component.spec.ts b/angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.spec.ts
similarity index 100%
rename from angular/RestClient/src/app/hotel-list/hotel-list.component.spec.ts
rename to angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.spec.ts
diff --git a/angular/RestClient/src/app/hotel-list/hotel-list.component.ts b/angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.ts
similarity index 95%
rename from angular/RestClient/src/app/hotel-list/hotel-list.component.ts
rename to angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.ts
index 866f745..bdd87d3 100644
--- a/angular/RestClient/src/app/hotel-list/hotel-list.component.ts
+++ b/angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.ts
@@ -1,6 +1,6 @@
 import { Component } from '@angular/core';
 import { RouterModule, Router } from '@angular/router';
-import { Hotel } from '../../types';
+import { Hotel } from '../../../../../types';
 import {
   MatAccordion,
   MatExpansionPanel,
@@ -12,7 +12,7 @@ import { MatSlideToggle } from '@angular/material/slide-toggle';
 import { MatTable, MatTableModule } from '@angular/material/table';
 import { MatButton } from '@angular/material/button';
 import { NgbAccordionModule } from '@ng-bootstrap/ng-bootstrap';
-import { ClienteApiRestService } from '../shared/cliente-api-rest.service';
+import { ClienteApiRestService } from '../../../../shared/cliente-api-rest.service';
 
 @Component({
   selector: 'app-hotel-list',
diff --git a/angular/RestClient/src/app/hotel-register/hotel-register.component.css b/angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.css
similarity index 100%
rename from angular/RestClient/src/app/hotel-register/hotel-register.component.css
rename to angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.css
diff --git a/angular/RestClient/src/app/hotel-register/hotel-register.component.html b/angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.html
similarity index 100%
rename from angular/RestClient/src/app/hotel-register/hotel-register.component.html
rename to angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.html
diff --git a/angular/RestClient/src/app/hotel-register/hotel-register.component.spec.ts b/angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.spec.ts
similarity index 100%
rename from angular/RestClient/src/app/hotel-register/hotel-register.component.spec.ts
rename to angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.spec.ts
diff --git a/angular/RestClient/src/app/hotel-register/hotel-register.component.ts b/angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.ts
similarity index 96%
rename from angular/RestClient/src/app/hotel-register/hotel-register.component.ts
rename to angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.ts
index da35653..fd09a25 100644
--- a/angular/RestClient/src/app/hotel-register/hotel-register.component.ts
+++ b/angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.ts
@@ -13,8 +13,8 @@ import { MatFormFieldModule } from '@angular/material/form-field';
 import { MatSelectModule } from '@angular/material/select';
 import { MatSlideToggleModule } from '@angular/material/slide-toggle';
 import { CommonModule } from '@angular/common';
-import { ClienteApiRestService } from '../shared/cliente-api-rest.service';
-import { Address, Hotel, Room } from '../../types';
+import { ClienteApiRestService } from '../../../../shared/cliente-api-rest.service';
+import { Address, Hotel, Room } from '../../../../../types';
 import { ActivatedRoute, Router } from '@angular/router';
 
 const emptyRoom: Room = {
diff --git a/angular/RestClient/src/app/main-page/main-page.component.css b/angular/RestClient/src/app/core/features/user/main-page/main-page.component.css
similarity index 100%
rename from angular/RestClient/src/app/main-page/main-page.component.css
rename to angular/RestClient/src/app/core/features/user/main-page/main-page.component.css
diff --git a/angular/RestClient/src/app/main-page/main-page.component.html b/angular/RestClient/src/app/core/features/user/main-page/main-page.component.html
similarity index 100%
rename from angular/RestClient/src/app/main-page/main-page.component.html
rename to angular/RestClient/src/app/core/features/user/main-page/main-page.component.html
diff --git a/angular/RestClient/src/app/main-page/main-page.component.spec.ts b/angular/RestClient/src/app/core/features/user/main-page/main-page.component.spec.ts
similarity index 100%
rename from angular/RestClient/src/app/main-page/main-page.component.spec.ts
rename to angular/RestClient/src/app/core/features/user/main-page/main-page.component.spec.ts
diff --git a/angular/RestClient/src/app/main-page/main-page.component.ts b/angular/RestClient/src/app/core/features/user/main-page/main-page.component.ts
similarity index 69%
rename from angular/RestClient/src/app/main-page/main-page.component.ts
rename to angular/RestClient/src/app/core/features/user/main-page/main-page.component.ts
index 1e34339..4d31d5f 100644
--- a/angular/RestClient/src/app/main-page/main-page.component.ts
+++ b/angular/RestClient/src/app/core/features/user/main-page/main-page.component.ts
@@ -1,16 +1,16 @@
 // main-page.component.ts
 import { Component, OnInit } from '@angular/core';
-import { ClienteApiRestService } from '../shared/cliente-api-rest.service';
-import { User } from '../../types';
+import { ClienteApiRestService } from '../../../../shared/cliente-api-rest.service';
+import { User } from '../../../../../types';
 import { FormsModule } from '@angular/forms';
 import { CommonModule } from '@angular/common';
-import users from '../../mocks/users.json';
+import users from '../../../../../mocks/users.json';
 @Component({
   standalone: true,
   imports: [FormsModule, CommonModule],
   selector: 'app-main-page',
   templateUrl: './main-page.component.html',
-  styleUrls: ['./main-page.component.css']
+  styleUrls: ['./main-page.component.css'],
 })
 export class MainPageComponent implements OnInit {
   users: User[] = [];
@@ -20,7 +20,7 @@ export class MainPageComponent implements OnInit {
   constructor(private ClienteApiRestService: ClienteApiRestService) {}
 
   ngOnInit(): void {
-    this.users = (users as unknown as User[]);
+    this.users = users as unknown as User[];
     this.ClienteApiRestService.getAllUsers().subscribe((data: User[]) => {
       this.users = data;
       this.filteredUsers = data; // Inicialmente, muestra todos los usuarios
@@ -31,7 +31,9 @@ export class MainPageComponent implements OnInit {
     if (this.selectedStatus === 'all') {
       this.filteredUsers = this.users;
     } else {
-      this.filteredUsers = this.users.filter(user => user.status === this.selectedStatus);
+      this.filteredUsers = this.users.filter(
+        (user) => user.status === this.selectedStatus
+      );
     }
   }
 }
diff --git a/angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.css b/angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.css
new file mode 100644
index 0000000..e69de29
diff --git a/angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.html b/angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.html
new file mode 100644
index 0000000..75ada56
--- /dev/null
+++ b/angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.html
@@ -0,0 +1 @@
+<p>user-booking-list works!</p>
diff --git a/angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.spec.ts b/angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.spec.ts
new file mode 100644
index 0000000..aae5d91
--- /dev/null
+++ b/angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.spec.ts
@@ -0,0 +1,23 @@
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+
+import { UserBookingListComponent } from './user-booking-list.component';
+
+describe('UserBookingListComponent', () => {
+  let component: UserBookingListComponent;
+  let fixture: ComponentFixture<UserBookingListComponent>;
+
+  beforeEach(async () => {
+    await TestBed.configureTestingModule({
+      imports: [UserBookingListComponent]
+    })
+    .compileComponents();
+
+    fixture = TestBed.createComponent(UserBookingListComponent);
+    component = fixture.componentInstance;
+    fixture.detectChanges();
+  });
+
+  it('should create', () => {
+    expect(component).toBeTruthy();
+  });
+});
diff --git a/angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.ts b/angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.ts
new file mode 100644
index 0000000..568e58c
--- /dev/null
+++ b/angular/RestClient/src/app/core/features/user/user-booking-list/user-booking-list.component.ts
@@ -0,0 +1,12 @@
+import { Component } from '@angular/core';
+
+@Component({
+  selector: 'app-user-booking-list',
+  standalone: true,
+  imports: [],
+  templateUrl: './user-booking-list.component.html',
+  styleUrl: './user-booking-list.component.css'
+})
+export class UserBookingListComponent {
+
+}
diff --git a/angular/RestClient/src/app/navigation/navigation.component.css b/angular/RestClient/src/app/core/navigation/navigation.component.css
similarity index 100%
rename from angular/RestClient/src/app/navigation/navigation.component.css
rename to angular/RestClient/src/app/core/navigation/navigation.component.css
diff --git a/angular/RestClient/src/app/navigation/navigation.component.html b/angular/RestClient/src/app/core/navigation/navigation.component.html
similarity index 58%
rename from angular/RestClient/src/app/navigation/navigation.component.html
rename to angular/RestClient/src/app/core/navigation/navigation.component.html
index e2433be..6361546 100644
--- a/angular/RestClient/src/app/navigation/navigation.component.html
+++ b/angular/RestClient/src/app/core/navigation/navigation.component.html
@@ -1,12 +1,12 @@
 <nav>
   <ul>
-    <li><a class="btn" [routerLink]="['/']">Home</a></li>
+    <li><a class="btn" [routerLink]="['/']">Home - Usuarios</a></li>
     <li>
       <a class="btn" [routerLink]="['/hotels', 'new']">Registrar Hotel</a>
     </li>
     <li><a class="btn" [routerLink]="['/hotels']">Hoteles</a></li>
     <li>
-      <a class="btn" [routerLink]="['/booking', 'search']">Nueva Reserva</a>
+      <a class="btn" [routerLink]="['/bookings', 'search']">Nueva Reserva</a>
     </li>
   </ul>
 </nav>
diff --git a/angular/RestClient/src/app/navigation/navigation.component.spec.ts b/angular/RestClient/src/app/core/navigation/navigation.component.spec.ts
similarity index 100%
rename from angular/RestClient/src/app/navigation/navigation.component.spec.ts
rename to angular/RestClient/src/app/core/navigation/navigation.component.spec.ts
diff --git a/angular/RestClient/src/app/navigation/navigation.component.ts b/angular/RestClient/src/app/core/navigation/navigation.component.ts
similarity index 100%
rename from angular/RestClient/src/app/navigation/navigation.component.ts
rename to angular/RestClient/src/app/core/navigation/navigation.component.ts
diff --git a/java/roomBooking/src/main/java/com/uva/roomBooking/Controllers/UserController.java b/java/roomBooking/src/main/java/com/uva/roomBooking/Controllers/UserController.java
index 5972838..a2e8961 100644
--- a/java/roomBooking/src/main/java/com/uva/roomBooking/Controllers/UserController.java
+++ b/java/roomBooking/src/main/java/com/uva/roomBooking/Controllers/UserController.java
@@ -15,22 +15,26 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import com.uva.roomBooking.Models.UserStatus;
+import com.uva.roomBooking.Models.Booking;
 import com.uva.roomBooking.Models.User;
+import com.uva.roomBooking.Repositories.BookingRepository;
 import com.uva.roomBooking.Repositories.UserRepository;
 
 @RestController
 @RequestMapping("users")
 @CrossOrigin(origins = "*")
 public class UserController {
-  private final UserRepository repository;
+  private final UserRepository userRepository;
+  private final BookingRepository bookingRepository;
 
-  public UserController(UserRepository repository) {
-    this.repository = repository;
+  public UserController(UserRepository userRepository, BookingRepository bookingRepository) {
+    this.userRepository = userRepository;
+    this.bookingRepository = bookingRepository;
   }
 
   @GetMapping
   public List<User> getAllUsers() {
-    return repository.findAll();
+    return userRepository.findAll();
   }
 
   @PostMapping
@@ -38,29 +42,29 @@ public class UserController {
     // TODO revisar como se desea manejar estado por defecto
     user.setStatus(UserStatus.NO_BOOKINGS);
     // Aunque se asegure a lo mejor no es la forma de manejo esperada
-    return repository.save(user);
+    return userRepository.save(user);
   }
 
   @GetMapping("/{id}")
   public User getUserById(@PathVariable int id) {
-    return repository.findById(id).orElseThrow();
+    return userRepository.findById(id).orElseThrow();
   }
 
   @PutMapping("/{id}")
   public User updateUserData(@PathVariable int id, @RequestBody Map<String, String> json) {
-    User target = repository.findById(id).orElseThrow();
+    User target = userRepository.findById(id).orElseThrow();
     if (!json.containsKey("name") || !json.containsKey("email")) {
       // TODO cambiar manejo
       throw new RuntimeException("Missing required fields");
     }
     target.setName(json.get("name"));
     target.setEmail(json.get("email"));
-    return repository.save(target);
+    return userRepository.save(target);
   }
 
   @PatchMapping("/{id}")
   public User updateUserState(@PathVariable int id, @RequestBody Map<String, String> json) {
-    User target = repository.findById(id).orElseThrow();
+    User target = userRepository.findById(id).orElseThrow();
     String strStatus = json.get("status");
     if (strStatus == null) {
       // TODO cambiar manejo
@@ -68,25 +72,35 @@ public class UserController {
     }
     UserStatus userStatus = UserStatus.valueOf(strStatus);
     switch (userStatus) {
+      // TODO Buscar como validar las (in)active bookings
       case NO_BOOKINGS:
         if (!target.getBookings().isEmpty())
           throw new IllegalArgumentException("Invalid State: The user have at least one booking");
       case WITH_ACTIVE_BOOKINGS:
+        if (target.getBookings().isEmpty())
+          throw new IllegalArgumentException("Invalid State: The user don't have bookings");
       case WITH_INACTIVE_BOOKINGS:
-        // TODO
+        if (target.getBookings().isEmpty())
+          throw new IllegalArgumentException("Invalid State: The user don't have bookings");
       default:
         break;
     }
     target.setStatus(userStatus);
-    return repository.save(target);
+    return userRepository.save(target);
   }
 
   @DeleteMapping("/{id}")
   public User deleteUser(@PathVariable Integer id) {
     User target;
-    if ((target = repository.findById(id).orElseThrow()) != null) {
-      repository.deleteById(id);
+    if ((target = userRepository.findById(id).orElseThrow()) != null) {
+      userRepository.deleteById(id);
     }
     return target;
   }
+
+  @GetMapping("/{id}/bookings")
+  public List<Booking> getUserBookingsById(@PathVariable int id) {
+    User user = userRepository.findById(id).orElseThrow();
+    return bookingRepository.findByUserId(user);
+  }
 }
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 86a712f..c546d19 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
@@ -1,7 +1,5 @@
 package com.uva.roomBooking.Models;
 
-import java.util.Date;
-
 import jakarta.persistence.Basic;
 import jakarta.persistence.CascadeType;
 import jakarta.persistence.Column;
@@ -20,8 +18,8 @@ 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")
     @ManyToOne(optional = false, fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
     private User userId;
diff --git a/java/roomBooking/src/main/java/com/uva/roomBooking/Models/UserStatus.java b/java/roomBooking/src/main/java/com/uva/roomBooking/Models/UserStatus.java
index 0a766e8..41adce4 100644
--- a/java/roomBooking/src/main/java/com/uva/roomBooking/Models/UserStatus.java
+++ b/java/roomBooking/src/main/java/com/uva/roomBooking/Models/UserStatus.java
@@ -1,6 +1,5 @@
 package com.uva.roomBooking.Models;
 
-// TODO Esto posiblemente requiera otro tratamiento debido al convenio de formato de constantes en db-java
 public enum UserStatus {
   NO_BOOKINGS, WITH_ACTIVE_BOOKINGS, WITH_INACTIVE_BOOKINGS;
 }
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 a010a3a..d988f40 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,6 +2,7 @@
 package com.uva.roomBooking.Repositories;
 
 import com.uva.roomBooking.Models.Booking;
+import com.uva.roomBooking.Models.User;
 
 import java.time.LocalDate;
 import java.util.List;
@@ -12,6 +13,8 @@ import org.springframework.data.repository.query.Param;
 
 public interface BookingRepository extends JpaRepository<Booking, Integer> {
 
+    List<Booking> findByUserId(User userId);
+
     @Query("SELECT b FROM Booking b WHERE b.roomId.id = ?1 AND b.startDate < ?2 AND b.endDate > ?3")
     List<Booking> findByRoomIdAndDateRange(@Param("roomId") int roomId, @Param("startDate") LocalDate startDate,
             @Param("endDate") LocalDate endDate);
-- 
GitLab