diff --git a/angular/RestClient/angular.json b/angular/RestClient/angular.json
index b9017eb47cbc0d902128a7211d7d8f08c6d1f48a..2fe5dbb241e8371e452ea965dee70c7249575f0c 100644
--- a/angular/RestClient/angular.json
+++ b/angular/RestClient/angular.json
@@ -44,8 +44,8 @@
"budgets": [
{
"type": "initial",
- "maximumWarning": "500kB",
- "maximumError": "1MB"
+ "maximumWarning": "1.2MB",
+ "maximumError": "1.3MB"
},
{
"type": "anyComponentStyle",
@@ -55,6 +55,22 @@
],
"outputHashing": "all"
},
+ "monolith": {
+ "fileReplacements": [
+ {
+ "replace": "src/environments/environment.ts",
+ "with": "src/environments/environment.monolith.ts"
+ }
+ ]
+ },
+ "microservices": {
+ "fileReplacements": [
+ {
+ "replace": "src/environments/environment.ts",
+ "with": "src/environments/environment.microservices.ts"
+ }
+ ]
+ },
"development": {
"optimization": false,
"extractLicenses": false,
@@ -71,6 +87,12 @@
},
"development": {
"buildTarget": "RestClient:build:development"
+ },
+ "monolith": {
+ "buildTarget": "RestClient:build:monolith"
+ },
+ "microservices": {
+ "buildTarget": "RestClient:build:microservices"
}
},
"defaultConfiguration": "development"
@@ -102,8 +124,5 @@
}
}
}
- },
- "cli": {
- "analytics": false
}
}
diff --git a/angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.ts b/angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.ts
index 06aab259dd9efcd5efaccb4defdacf03a55f3518..5789a064b18d4aa50d9c6d9f163a87fb89bb7afc 100644
--- a/angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.ts
+++ b/angular/RestClient/src/app/core/features/bookings/booking-list/booking-list.component.ts
@@ -8,11 +8,11 @@ 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 { Router } from '@angular/router';
import { MatCardModule } from '@angular/material/card';
import { MatChipsModule } from '@angular/material/chips';
-import { ClienteApiRestService } from '../../../../shared/cliente-api-rest.service';
+import { LocalStorageService } from '../../../../shared/local-storage.service';
+import { HotelClientService } from '../../../../shared/hotel-client.service';
type SelectableRoomType = 'All' | RoomType;
const selectableRoomTypeArray: SelectableRoomType[] = ['All', ...roomTypeArray];
@@ -45,14 +45,18 @@ export class BookingListComponent {
rooms: Room[] = [];
trateRooms: Room[] = [];
- constructor(private router: Router, private client: ClienteApiRestService) {}
+ constructor(
+ private router: Router,
+ private hotelClient: HotelClientService,
+ private storage: LocalStorageService
+ ) {}
ngOnInit() {
this.getHotels();
}
getHotels() {
- this.client.getAllHotels().subscribe({
+ this.hotelClient.getAllHotels().subscribe({
next: (resp) => {
if (resp != null) this.hotels = [...resp];
},
@@ -72,7 +76,7 @@ export class BookingListComponent {
}
search() {
- this.client
+ this.hotelClient
.getRoomsAvailableInDateRange(
this.hotelSelected!.id,
this.start!,
@@ -95,14 +99,11 @@ export class BookingListComponent {
}
bookingRoom(roomId: number) {
- localStorage.setItem(
- 'booking-data',
- JSON.stringify({
- roomId,
- startDate: this.start,
- endDate: this.end,
- })
- );
+ this.storage.save('booking-data', {
+ roomId,
+ startDate: this.start,
+ endDate: this.end,
+ });
this.router.navigate(['/bookings', 'new'], { queryParams: { roomId } });
}
}
diff --git a/angular/RestClient/src/app/core/features/bookings/booking/booking.component.ts b/angular/RestClient/src/app/core/features/bookings/booking/booking.component.ts
index cd63902449b286409ab2ae045a9b273a7033a1f8..9b99737e243b360d543e3ae57ff88d570a39a970 100644
--- a/angular/RestClient/src/app/core/features/bookings/booking/booking.component.ts
+++ b/angular/RestClient/src/app/core/features/bookings/booking/booking.component.ts
@@ -6,10 +6,17 @@ import {
Validators,
} from '@angular/forms';
-import { BookingService } from '../../../../shared/booking.service'; // Asegúrate de que el servicio exista
import { ActivatedRoute, Router } from '@angular/router';
import { Booking, User } from '../../../../../types';
-import { ClienteApiRestService } from '../../../../shared/cliente-api-rest.service';
+import { LocalStorageService } from '../../../../shared/local-storage.service';
+import { BookingClientService } from '../../../../shared/booking-client.service';
+import { UserClientService } from '../../../../shared/user-client.service';
+
+type communication = {
+ roomId: number;
+ startDate: Date;
+ endDate: Date;
+};
@Component({
standalone: true,
@@ -21,15 +28,20 @@ import { ClienteApiRestService } from '../../../../shared/cliente-api-rest.servi
export class BookingComponent implements OnInit {
users: User[] = [];
bookingForm: FormGroup;
- bookingLocal: { roomId: number; startDate: Date; endDate: Date };
+ bookingLocal: { roomId: number; startDate: Date; endDate: Date } = {
+ roomId: 0,
+ endDate: new Date(),
+ startDate: new Date(),
+ };
roomId: number = 0;
constructor(
private router: Router,
private route: ActivatedRoute,
private fb: FormBuilder,
- private bookingService: BookingService,
- private client: ClienteApiRestService
+ private bookingClient: BookingClientService,
+ private userClient: UserClientService,
+ private storage: LocalStorageService
) {
// Inicialización del formulario con validaciones
this.bookingForm = this.fb.group({
@@ -38,21 +50,22 @@ export class BookingComponent implements OnInit {
startDate: ['', Validators.required],
endDate: ['', Validators.required],
});
- const localBookingStr = localStorage.getItem('booking-data');
- if (localBookingStr === null) {
+ const localBooking = storage.read<communication | null>('booking-data');
+ if (localBooking === null) {
this.router.navigate(['/booking', 'search']);
+ return;
}
- const localBooking = JSON.parse(localBookingStr!);
- this.bookingLocal = localBooking;
+ this.bookingLocal = localBooking!;
this.route.queryParams.subscribe((params) => {
const roomId = Number(params['roomId']);
this.roomId = roomId;
- if (localBooking.roomId !== roomId) {
+ if (this.bookingLocal.roomId !== roomId) {
this.router.navigate(['/bookings', 'search']);
- this.loadBooking(localBooking);
+ return;
}
+ this.loadBooking();
});
- this.client.getAllUsers().subscribe({
+ this.userClient.getAllUsers().subscribe({
next: (resp) => {
this.users = resp;
},
@@ -67,10 +80,12 @@ export class BookingComponent implements OnInit {
}
ngOnInit() {
- this.loadBooking(this.bookingLocal);
+ this.loadBooking();
}
- loadBooking(booking: { roomId: number; startDate: Date; endDate: Date }) {
+ loadBooking() {
+ const booking = this.bookingLocal;
+ if (!booking) return;
const start = new Date(booking.startDate).toISOString().split('T')[0];
const end = new Date(booking.endDate).toISOString().split('T')[0];
this.bookingForm = this.fb.group({
@@ -95,11 +110,11 @@ export class BookingComponent implements OnInit {
};
// Llama al servicio para crear una nueva reserva
- this.bookingService.createBooking(bookingRequest).subscribe({
+ this.bookingClient.createBooking(bookingRequest).subscribe({
next: (response) => {
console.log('Reserva creada con éxito', response);
// Llama al servicio para actualizar el estado del usuario
- this.client
+ this.userClient
.alterUserStatus(userId, 'WITH_ACTIVE_BOOKINGS')
.subscribe({
next: (response) => {
@@ -107,7 +122,7 @@ export class BookingComponent implements OnInit {
'Estado de usuario actualizado con exito',
response
);
- localStorage.removeItem('booking-data');
+ this.storage.remove('booking-data');
this.router.navigate(['/user', userId, 'bookings']);
},
error: (error) => {
diff --git a/angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.ts b/angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.ts
index bdd87d3d36ce178cbb994508955b05bec3474803..1bcaf64719ede78b63593bf0c504db6bb263488d 100644
--- a/angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.ts
+++ b/angular/RestClient/src/app/core/features/hotel/hotel-list/hotel-list.component.ts
@@ -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 { HotelClientService } from '../../../../shared/hotel-client.service';
@Component({
selector: 'app-hotel-list',
@@ -38,14 +38,17 @@ export class HotelListComponent {
mostrarMensaje!: boolean;
mensaje!: string;
- constructor(private router: Router, private client: ClienteApiRestService) {}
+ constructor(
+ private router: Router,
+ private hotelClient: HotelClientService
+ ) {}
ngOnInit() {
this.getHotels();
}
getHotels() {
- this.client.getAllHotels().subscribe({
+ this.hotelClient.getAllHotels().subscribe({
next: (resp) => {
if (!!resp || (resp as never[]).length != 0) this.hotels = [...resp];
},
@@ -59,7 +62,7 @@ export class HotelListComponent {
deleteHotel(id: number) {
if (!confirm(`Borrar hotel con id ${id}. Continuar?`)) return;
- this.client.deleteHotel(id).subscribe({
+ this.hotelClient.deleteHotel(id).subscribe({
next: (resp) => {
if (resp.status < 400) {
this.mostrarMensaje = true;
@@ -82,23 +85,25 @@ export class HotelListComponent {
roomId: number,
availability: boolean
) {
- this.client.alterRoomAvailability(hotelId, roomId, availability).subscribe({
- next: (resp) => {
- if (resp.status < 400) {
- this.mostrarMensaje = true;
- this.mensaje = resp.body as string;
- this.getHotels();
- } else {
- this.mostrarMensaje = true;
- this.mensaje = 'Error al cambiar disponibilidad';
- console.error(this.mensaje);
- }
- },
- error: (error) => {
- console.log('Error al cambiar disponibilidad: ' + error.message);
- throw error;
- },
- });
+ this.hotelClient
+ .alterRoomAvailability(hotelId, roomId, availability)
+ .subscribe({
+ next: (resp) => {
+ if (resp.status < 400) {
+ this.mostrarMensaje = true;
+ this.mensaje = resp.body as string;
+ this.getHotels();
+ } else {
+ this.mostrarMensaje = true;
+ this.mensaje = 'Error al cambiar disponibilidad';
+ console.error(this.mensaje);
+ }
+ },
+ error: (error) => {
+ console.log('Error al cambiar disponibilidad: ' + error.message);
+ throw error;
+ },
+ });
}
goToHotelDetails(hotelId: number): void {
diff --git a/angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.ts b/angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.ts
index fd09a256f2380ae5c144b373f0406228079dcd73..fad7415511aa5a15fc72df3af768f77454f0018f 100644
--- a/angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.ts
+++ b/angular/RestClient/src/app/core/features/hotel/hotel-register/hotel-register.component.ts
@@ -13,9 +13,9 @@ 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 { ActivatedRoute, Router } from '@angular/router';
+import { HotelClientService } from '../../../../shared/hotel-client.service';
const emptyRoom: Room = {
id: 0,
@@ -59,7 +59,7 @@ export class HotelRegisterComponent {
private router: Router,
private route: ActivatedRoute,
private fb: FormBuilder,
- private client: ClienteApiRestService
+ private hotelClient: HotelClientService
) {
this.hotelForm = this.setHotelForm();
this.editMode = false;
@@ -68,7 +68,7 @@ export class HotelRegisterComponent {
const id = Number(params.get('id'));
this.editMode = id !== 0;
if (this.editMode) {
- this.client.getHotel(id).subscribe({
+ this.hotelClient.getHotel(id).subscribe({
next: (h) => this.setHotelForm(h),
error: (error) => {
this.router.navigate(['/hotels/new']);
@@ -102,7 +102,7 @@ export class HotelRegisterComponent {
onSubmit(): void {
if (this.hotelForm.valid) {
const hotel = this.hotelForm.value as Hotel;
- this.client.addHotel(hotel).subscribe({
+ this.hotelClient.addHotel(hotel).subscribe({
next: (resp) => {
if (resp.status < 400) {
alert('Hotel guardado correctamente');
diff --git a/angular/RestClient/src/app/core/features/user/main-page/main-page.component.ts b/angular/RestClient/src/app/core/features/user/main-page/main-page.component.ts
index 55760b59690b884457e25d55f8410a50c81cc0bd..e609b7e568a909e2d6f7efd995ddccb57472cb76 100644
--- a/angular/RestClient/src/app/core/features/user/main-page/main-page.component.ts
+++ b/angular/RestClient/src/app/core/features/user/main-page/main-page.component.ts
@@ -1,11 +1,11 @@
// main-page.component.ts
import { Component, OnInit } from '@angular/core';
-import { ClienteApiRestService } from '../../../../shared/cliente-api-rest.service';
import { User, UserStateFilter } from '../../../../../types';
import { FormsModule } from '@angular/forms';
import { CommonModule } from '@angular/common';
import users from '../../../../../mocks/users.json';
import { RouterModule } from '@angular/router';
+import { UserClientService } from '../../../../shared/user-client.service';
@Component({
standalone: true,
imports: [FormsModule, CommonModule, RouterModule],
@@ -18,11 +18,11 @@ export class MainPageComponent implements OnInit {
filteredUsers: User[] = [];
selectedStatus: UserStateFilter = 'All';
- constructor(private ClienteApiRestService: ClienteApiRestService) {}
+ constructor(private userClient: UserClientService) {}
ngOnInit(): void {
this.users = users as unknown as User[];
- this.ClienteApiRestService.getAllUsers().subscribe((data: User[]) => {
+ this.userClient.getAllUsers().subscribe((data: User[]) => {
this.users = data;
this.filteredUsers = data; // Inicialmente, muestra todos los usuarios
});
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
index 5f1b3f1374342c3f9633486e6ce12027c2ebf7c5..10be15d9b999d3d0f2a370236507605df40b4bbd 100644
--- 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
@@ -1,11 +1,11 @@
import { Component } from '@angular/core';
-import { ClienteApiRestService } from '../../../../shared/cliente-api-rest.service';
+
import { Booking, User } from '../../../../../types';
import { ActivatedRoute, RouterModule } from '@angular/router';
-import { MatSelectModule } from '@angular/material/select';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
-import { BookingService } from '../../../../shared/booking.service';
+import { UserClientService } from '../../../../shared/user-client.service';
+import { BookingClientService } from '../../../../shared/booking-client.service';
type state = 'all' | 'active' | 'inactive';
@@ -24,8 +24,8 @@ export class UserBookingListComponent {
user?: User;
constructor(
- private client: ClienteApiRestService,
- private bookingClient: BookingService,
+ private userClient: UserClientService,
+ private bookingClient: BookingClientService,
private route: ActivatedRoute
) {
this.route.paramMap.subscribe({
@@ -34,7 +34,7 @@ export class UserBookingListComponent {
this.updateBookings();
},
});
- this.client
+ this.userClient
.getUser(this.userId)
.subscribe({ next: (user) => (this.user = user) });
}
@@ -44,7 +44,7 @@ export class UserBookingListComponent {
}
updateBookings() {
- this.client.getUserBookings(this.userId).subscribe({
+ this.bookingClient.getUserBookings(this.userId).subscribe({
next: (bookings) => {
this.search = true;
switch (this.selectedState) {
@@ -88,7 +88,7 @@ export class UserBookingListComponent {
}
updateUserStatus() {
- this.client.getUserBookings(this.userId).subscribe({
+ this.bookingClient.getUserBookings(this.userId).subscribe({
next: (bookings) => {
const withActive = bookings.find(
(booking) => this.genBookingState(booking) === 'Reserva activa'
@@ -97,7 +97,7 @@ export class UserBookingListComponent {
(booking) => this.genBookingState(booking) === 'Reserva inactiva'
);
if (withActive) {
- this.client
+ this.userClient
.alterUserStatus(this.userId, 'WITH_ACTIVE_BOOKINGS')
.subscribe({
next: (response) => {
@@ -108,7 +108,7 @@ export class UserBookingListComponent {
},
});
} else if (withInactive) {
- this.client
+ this.userClient
.alterUserStatus(this.userId, 'WITH_INACTIVE_BOOKINGS')
.subscribe({
next: (response) => {
@@ -123,18 +123,20 @@ export class UserBookingListComponent {
},
});
} else {
- this.client.alterUserStatus(this.userId, 'NO_BOOKINGS').subscribe({
- next: (response) => {
- console.log(
- 'Cambio de estado en el usuario a sin reservas correcto'
- );
- },
- error: (err) => {
- console.error(
- 'Error al cambiar de estado al usuario sin reservas'
- );
- },
- });
+ this.userClient
+ .alterUserStatus(this.userId, 'NO_BOOKINGS')
+ .subscribe({
+ next: (response) => {
+ console.log(
+ 'Cambio de estado en el usuario a sin reservas correcto'
+ );
+ },
+ error: (err) => {
+ console.error(
+ 'Error al cambiar de estado al usuario sin reservas'
+ );
+ },
+ });
}
},
});
diff --git a/angular/RestClient/src/app/shared/booking.service.spec.ts b/angular/RestClient/src/app/shared/auth-client.service.spec.ts
similarity index 52%
rename from angular/RestClient/src/app/shared/booking.service.spec.ts
rename to angular/RestClient/src/app/shared/auth-client.service.spec.ts
index 3992ef555abf9021f683a3b7fd42344842c4d6ed..718c264fe9fa26ade0a95ea726d68cf899584f1d 100644
--- a/angular/RestClient/src/app/shared/booking.service.spec.ts
+++ b/angular/RestClient/src/app/shared/auth-client.service.spec.ts
@@ -1,13 +1,13 @@
import { TestBed } from '@angular/core/testing';
-import { BookingService } from './booking.service';
+import { AuthClientService } from './auth-client.service';
-describe('BookingService', () => {
- let service: BookingService;
+describe('AuthClientService', () => {
+ let service: AuthClientService;
beforeEach(() => {
TestBed.configureTestingModule({});
- service = TestBed.inject(BookingService);
+ service = TestBed.inject(AuthClientService);
});
it('should be created', () => {
diff --git a/angular/RestClient/src/app/shared/auth-client.service.ts b/angular/RestClient/src/app/shared/auth-client.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ec3280b68da6db216a68e72c8847e5fee4e6b04d
--- /dev/null
+++ b/angular/RestClient/src/app/shared/auth-client.service.ts
@@ -0,0 +1,11 @@
+import { Injectable } from '@angular/core';
+import { environment } from '../../environments/environment';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class AuthClientService {
+ private readonly URI = environment.authAPI;
+
+ constructor() {}
+}
diff --git a/angular/RestClient/src/app/shared/booking-client.service.spec.ts b/angular/RestClient/src/app/shared/booking-client.service.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7155f3c6a365fd8f46220cabbf90d2889eeaa05a
--- /dev/null
+++ b/angular/RestClient/src/app/shared/booking-client.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { BookingClientService } from './booking-client.service';
+
+describe('BookingClientService', () => {
+ let service: BookingClientService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ service = TestBed.inject(BookingClientService);
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/angular/RestClient/src/app/shared/booking.service.ts b/angular/RestClient/src/app/shared/booking-client.service.ts
similarity index 58%
rename from angular/RestClient/src/app/shared/booking.service.ts
rename to angular/RestClient/src/app/shared/booking-client.service.ts
index 535f4d55ae2c7492a18e0bbf8472c0e78ca99392..7d38299878b9a5500ade1883c47d08585ca01ebb 100644
--- a/angular/RestClient/src/app/shared/booking.service.ts
+++ b/angular/RestClient/src/app/shared/booking-client.service.ts
@@ -1,22 +1,20 @@
-// booking.service.ts
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
-
+import { environment } from '../../environments/environment';
import { Booking } from '../../types/Booking'; // Ajusta la ruta a tu modelo Booking
-import { User, UserState } from '../../types';
@Injectable({
- providedIn: 'root', // Esto hace que el servicio esté disponible en toda la aplicación
+ providedIn: 'root',
})
-export class BookingService {
- private apiUrl = 'http://localhost:8080/bookings';
+export class BookingClientService {
+ private URI = environment.bookingAPI;
constructor(private http: HttpClient) {}
// Método para crear una nueva reserva
createBooking(bookingRequest: Booking): Observable<Booking> {
- return this.http.post<Booking>(this.apiUrl, bookingRequest, {
+ return this.http.post<Booking>(this.URI, bookingRequest, {
headers: new HttpHeaders({
'Content-Type': 'application/json',
}),
@@ -25,16 +23,21 @@ export class BookingService {
// Método para obtener todas las reservas
getAllBookings(): Observable<Booking[]> {
- return this.http.get<Booking[]>(this.apiUrl);
+ return this.http.get<Booking[]>(this.URI);
}
// Método para obtener una reserva por ID
getBookingById(id: number): Observable<Booking> {
- return this.http.get<Booking>(`${this.apiUrl}/${id}`);
+ return this.http.get<Booking>(`${this.URI}/${id}`);
+ }
+
+ getUserBookings(userId: number) {
+ // TODO revisar tras división en microservicios
+ return this.http.get<Booking[]>(`${this.URI}/${userId}/bookings`);
}
// Método para eliminar una reserva
deleteBooking(id: number) {
- return this.http.delete(`${this.apiUrl}/${id}`);
+ return this.http.delete(`${this.URI}/${id}`);
}
}
diff --git a/angular/RestClient/src/app/shared/cliente-api-rest.service.spec.ts b/angular/RestClient/src/app/shared/cliente-api-rest.service.spec.ts
deleted file mode 100644
index 737c9449305eb7a05fdbb88e75ef1492b05990b3..0000000000000000000000000000000000000000
--- a/angular/RestClient/src/app/shared/cliente-api-rest.service.spec.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { TestBed } from '@angular/core/testing';
-
-import { ClienteApiRestService } from './cliente-api-rest.service';
-
-describe('ClienteApiRestService', () => {
- let service: ClienteApiRestService;
-
- beforeEach(() => {
- TestBed.configureTestingModule({});
- service = TestBed.inject(ClienteApiRestService);
- });
-
- it('should be created', () => {
- expect(service).toBeTruthy();
- });
-});
diff --git a/angular/RestClient/src/app/shared/cliente-api-rest.service.ts b/angular/RestClient/src/app/shared/cliente-api-rest.service.ts
deleted file mode 100644
index cb4326ef52f9ed54bc172aa9fad9406872423815..0000000000000000000000000000000000000000
--- a/angular/RestClient/src/app/shared/cliente-api-rest.service.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import { HttpClient } from '@angular/common/http';
-import { Injectable } from '@angular/core';
-import { Hotel, Booking, Room, UserState } from '../../types';
-import { User } from '../../types';
-
-@Injectable({
- providedIn: 'root',
-})
-export class ClienteApiRestService {
- private static readonly BASE_URI = 'http://localhost:8080';
- private static readonly HOTEL_URI = `${ClienteApiRestService.BASE_URI}/hotels`;
- private static readonly USER_URI = `${ClienteApiRestService.BASE_URI}/users`;
- constructor(private http: HttpClient) {}
-
- getHotel(id: number) {
- const url = `${ClienteApiRestService.HOTEL_URI}/${id}`;
- return this.http.get<Hotel>(url);
- }
-
- getAllHotels() {
- const url = `${ClienteApiRestService.HOTEL_URI}`;
- return this.http.get<Hotel[]>(url);
- }
-
- deleteHotel(id: number) {
- const url = `${ClienteApiRestService.HOTEL_URI}/${id}`;
- return this.http.delete(url, { observe: 'response', responseType: 'text' });
- }
-
- addHotel(hotel: Hotel) {
- const url = `${ClienteApiRestService.HOTEL_URI}`;
- return this.http.post(url, hotel, {
- observe: 'response',
- responseType: 'text',
- });
- }
-
- alterRoomAvailability(
- hotelId: number,
- roomId: number,
- availability: boolean
- ) {
- const url = `${ClienteApiRestService.HOTEL_URI}/${hotelId}/rooms/${roomId}`;
- return this.http.patch(
- url,
- { available: availability },
- {
- observe: 'response',
- responseType: 'text',
- }
- );
- }
-
- createBooking(bookingRequest: Booking) {
- return this.http.post('http://localhost:8080/bookings', bookingRequest);
- }
-
- getRoomsAvailableInDateRange(hotelId: number, start: Date, end: Date) {
- const startStr = start.toISOString().split('T')[0];
- const endStr = end.toISOString().split('T')[0];
- const url = `${ClienteApiRestService.HOTEL_URI}/${hotelId}/rooms?start=${startStr}&end=${endStr}`;
- return this.http.get<Room[]>(url);
- }
-
- getUser(userId: number) {
- return this.http.get<User>(`http://localhost:8080/users/${userId}`);
- }
-
- getAllUsers() {
- return this.http.get<User[]>('http://localhost:8080/users', {
- observe: 'body',
- });
- }
-
- getUserBookings(userId: number) {
- return this.http.get<Booking[]>(
- `${ClienteApiRestService.BASE_URI}/users/${userId}/bookings`
- );
- }
-
- alterUserStatus(userId: number, status: UserState) {
- return this.http.patch(
- `${ClienteApiRestService.BASE_URI}/users/${userId}`,
- {
- status,
- },
- {
- observe: 'response',
- responseType: 'text',
- }
- );
- }
-}
diff --git a/angular/RestClient/src/app/shared/data.service.ts b/angular/RestClient/src/app/shared/data.service.ts
deleted file mode 100644
index f22afaeb6662ab48290b344d645945fc9a1c77b0..0000000000000000000000000000000000000000
--- a/angular/RestClient/src/app/shared/data.service.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { Injectable } from '@angular/core';
-import { BehaviorSubject } from 'rxjs';
-
-@Injectable({
- providedIn: 'root',
-})
-export class DataService {
- private message = new BehaviorSubject('hotel list');
- currentMessage = this.message.asObservable();
-
- private showMessage = new BehaviorSubject<boolean>(false);
- showCurrentMessage = this.showMessage.asObservable();
-
- constructor() {}
-
- setMessage(message: string) {
- this.message.next(message);
- }
-
- setShowCurrentMessage(valor: boolean) {
- this.showMessage.next(valor);
- }
-}
diff --git a/angular/RestClient/src/app/shared/hotel-client.service.spec.ts b/angular/RestClient/src/app/shared/hotel-client.service.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5d32879cfc481ef393ffba104889798d7d982863
--- /dev/null
+++ b/angular/RestClient/src/app/shared/hotel-client.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { HotelClientService } from './hotel-client.service';
+
+describe('HotelClientService', () => {
+ let service: HotelClientService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ service = TestBed.inject(HotelClientService);
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/angular/RestClient/src/app/shared/hotel-client.service.ts b/angular/RestClient/src/app/shared/hotel-client.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f00b3e6d5259866c895bffa7856e8e838ae85deb
--- /dev/null
+++ b/angular/RestClient/src/app/shared/hotel-client.service.ts
@@ -0,0 +1,58 @@
+import { Injectable } from '@angular/core';
+import { environment } from '../../environments/environment';
+import { HttpClient } from '@angular/common/http';
+import { Hotel, Room } from '../../types';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class HotelClientService {
+ private readonly URI = environment.hotelAPI;
+ constructor(private http: HttpClient) {}
+
+ getHotel(id: number) {
+ const url = `${this.URI}/${id}`;
+ return this.http.get<Hotel>(url);
+ }
+
+ getAllHotels() {
+ const url = `${this.URI}`;
+ return this.http.get<Hotel[]>(url);
+ }
+
+ deleteHotel(id: number) {
+ const url = `${this.URI}/${id}`;
+ return this.http.delete(url, { observe: 'response', responseType: 'text' });
+ }
+
+ addHotel(hotel: Hotel) {
+ const url = `${this.URI}`;
+ return this.http.post(url, hotel, {
+ observe: 'response',
+ responseType: 'text',
+ });
+ }
+
+ alterRoomAvailability(
+ hotelId: number,
+ roomId: number,
+ availability: boolean
+ ) {
+ const url = `${this.URI}/${hotelId}/rooms/${roomId}`;
+ return this.http.patch(
+ url,
+ { available: availability },
+ {
+ observe: 'response',
+ responseType: 'text',
+ }
+ );
+ }
+
+ getRoomsAvailableInDateRange(hotelId: number, start: Date, end: Date) {
+ const startStr = start.toISOString().split('T')[0];
+ const endStr = end.toISOString().split('T')[0];
+ const url = `${this.URI}/${hotelId}/rooms?start=${startStr}&end=${endStr}`;
+ return this.http.get<Room[]>(url);
+ }
+}
diff --git a/angular/RestClient/src/app/shared/local-storage.service.spec.ts b/angular/RestClient/src/app/shared/local-storage.service.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ba1dbd4362ebcfddcd262fc30de07f4beeb466e3
--- /dev/null
+++ b/angular/RestClient/src/app/shared/local-storage.service.spec.ts
@@ -0,0 +1,16 @@
+import { TestBed } from '@angular/core/testing';
+
+import { LocalStorageService } from './local-storage.service';
+
+describe('LocalStorageService', () => {
+ let service: LocalStorageService;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ service = TestBed.inject(LocalStorageService);
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+});
diff --git a/angular/RestClient/src/app/shared/local-storage.service.ts b/angular/RestClient/src/app/shared/local-storage.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..e1526f8aaa1b56903668de93697f4a2b072d97ab
--- /dev/null
+++ b/angular/RestClient/src/app/shared/local-storage.service.ts
@@ -0,0 +1,42 @@
+import { isPlatformBrowser } from '@angular/common';
+import { Inject, Injectable, PLATFORM_ID } from '@angular/core';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class LocalStorageService {
+ // isBrowser: boolean;
+
+ // constructor(@Inject(PLATFORM_ID) private platformId: Object) {
+ // this.isBrowser = isPlatformBrowser(this.platformId);
+ // }
+
+ save(key: string, value: any) {
+ // if (!this.isBrowser) return;
+ localStorage.setItem(key, JSON.stringify(value));
+ }
+
+ read<T>(key: string) {
+ // if (!this.isBrowser) return null;
+
+ const json = localStorage.getItem(key);
+ const ret = json ? (JSON.parse(json) as T) : null;
+ return ret;
+ }
+
+ consume<T>(key: string) {
+ // if (!this.isBrowser) return null;
+
+ const value = this.read<T>(key);
+ if (value !== null) {
+ this.remove(key);
+ }
+ return value;
+ }
+
+ remove(key: string) {
+ // if (!this.isBrowser) return;
+
+ localStorage.removeItem(key);
+ }
+}
diff --git a/angular/RestClient/src/app/shared/data.service.spec.ts b/angular/RestClient/src/app/shared/user-client.service.spec.ts
similarity index 52%
rename from angular/RestClient/src/app/shared/data.service.spec.ts
rename to angular/RestClient/src/app/shared/user-client.service.spec.ts
index 38e8d9ec63f1f637f51a18393f66c56d564e49a9..3af6ef2803edf936358c39133305278bb689dd4c 100644
--- a/angular/RestClient/src/app/shared/data.service.spec.ts
+++ b/angular/RestClient/src/app/shared/user-client.service.spec.ts
@@ -1,13 +1,13 @@
import { TestBed } from '@angular/core/testing';
-import { DataService } from './data.service';
+import { UserClientService } from './user-client.service';
-describe('DataService', () => {
- let service: DataService;
+describe('UserClientService', () => {
+ let service: UserClientService;
beforeEach(() => {
TestBed.configureTestingModule({});
- service = TestBed.inject(DataService);
+ service = TestBed.inject(UserClientService);
});
it('should be created', () => {
diff --git a/angular/RestClient/src/app/shared/user-client.service.ts b/angular/RestClient/src/app/shared/user-client.service.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ea51f7e5060cf349c86159e981748a028806ef80
--- /dev/null
+++ b/angular/RestClient/src/app/shared/user-client.service.ts
@@ -0,0 +1,35 @@
+import { HttpClient } from '@angular/common/http';
+import { Injectable } from '@angular/core';
+import { environment } from '../../environments/environment';
+import { User, UserState } from '../../types';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class UserClientService {
+ private readonly URI = environment.userAPI;
+ constructor(private http: HttpClient) {}
+
+ getUser(userId: number) {
+ return this.http.get<User>(`${this.URI}/${userId}`);
+ }
+
+ getAllUsers() {
+ return this.http.get<User[]>(this.URI, {
+ observe: 'body',
+ });
+ }
+
+ alterUserStatus(userId: number, status: UserState) {
+ return this.http.patch(
+ `${this.URI}/${userId}`,
+ {
+ status,
+ },
+ {
+ observe: 'response',
+ responseType: 'text',
+ }
+ );
+ }
+}
diff --git a/angular/RestClient/src/environments/environment.monolith.ts b/angular/RestClient/src/environments/environment.monolith.ts
new file mode 100644
index 0000000000000000000000000000000000000000..676025533ad47d166dedf355b0a08f5e8a96e904
--- /dev/null
+++ b/angular/RestClient/src/environments/environment.monolith.ts
@@ -0,0 +1,10 @@
+// Simple -> Un servicio fachada / monolito
+const hostname = 'http://localhost:8080';
+
+export const environment = {
+ production: false,
+ authAPI: `${hostname}/auth`,
+ userAPI: `${hostname}/users`,
+ hotelAPI: `${hostname}/hotels`,
+ bookingAPI: `${hostname}/bookings`,
+};
diff --git a/angular/RestClient/src/environments/environment.prod.ts b/angular/RestClient/src/environments/environment.prod.ts
new file mode 100644
index 0000000000000000000000000000000000000000..445f0d3b770f01162006dbe8262e44338b9161e5
--- /dev/null
+++ b/angular/RestClient/src/environments/environment.prod.ts
@@ -0,0 +1,8 @@
+// Disgregado en microservicios
+export const environment = {
+ production: true,
+ authAPI: 'http://auth-api:8080',
+ userAPI: 'http://user-api:8080',
+ hotelAPI: 'http://hotels-api:8080',
+ bookingAPI: 'http://bookings-api:8080',
+};
diff --git a/angular/RestClient/src/environments/environment.ts b/angular/RestClient/src/environments/environment.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b5fe467280faf9259227fb281e401cff79c5aa87
--- /dev/null
+++ b/angular/RestClient/src/environments/environment.ts
@@ -0,0 +1,8 @@
+// Disgregado en microservicios
+export const environment = {
+ production: false,
+ authAPI: 'http://localhost:8101',
+ userAPI: 'http://localhost:8111',
+ hotelAPI: 'http://localhost:8121',
+ bookingAPI: 'http://localhost:8131',
+};
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 c52866c2ca28e056ad9551b42e007c0f2f487a80..5baa50358b36dfffd3184fd0e7e46a9177b2ef55 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
@@ -19,7 +19,7 @@ import java.util.List;
@RestController
@RequestMapping("/bookings")
-@CrossOrigin(origins = "http://localhost:4200")
+@CrossOrigin(origins = "*")
public class BookingController {
private final BookingRepository bookingRepository;