Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Antonio Rueda
/
reserva-hoteles
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
fd486b02
authored
Dec 04, 2024
by
Antonio Rueda
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Endpoints de disponibilidad y reservas
parent
6d690346
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
180 additions
and
15 deletions
src/main/java/es/ujaen/dae/reservahoteles/excepciones/HotelNoRegistrado.java
src/main/java/es/ujaen/dae/reservahoteles/rest/ControladorReservas.java
src/main/java/es/ujaen/dae/reservahoteles/rest/dto/DDisponibilidad.java
src/main/java/es/ujaen/dae/reservahoteles/rest/dto/Mapeador.java
src/main/java/es/ujaen/dae/reservahoteles/servicios/ServicioReservas.java
src/test/java/es/ujaen/dae/reservahoteles/rest/TestControladorReservas.java
src/main/java/es/ujaen/dae/reservahoteles/excepciones/HotelNoRegistrado.java
0 → 100644
View file @
fd486b02
package
es
.
ujaen
.
dae
.
reservahoteles
.
excepciones
;
/**
*
* @author ajrueda
*/
public
class
HotelNoRegistrado
extends
RuntimeException
{
public
HotelNoRegistrado
()
{
}
}
src/main/java/es/ujaen/dae/reservahoteles/rest/ControladorReservas.java
View file @
fd486b02
...
...
@@ -3,9 +3,12 @@ package es.ujaen.dae.reservahoteles.rest;
import
es.ujaen.dae.reservahoteles.entidades.Hotel
;
import
es.ujaen.dae.reservahoteles.entidades.Usuario
;
import
es.ujaen.dae.reservahoteles.excepciones.HotelNoRegistrado
;
import
es.ujaen.dae.reservahoteles.excepciones.UsuarioNoRegistrado
;
import
es.ujaen.dae.reservahoteles.excepciones.UsuarioYaRegistrado
;
import
es.ujaen.dae.reservahoteles.rest.dto.DDisponibilidad
;
import
es.ujaen.dae.reservahoteles.rest.dto.DHotel
;
import
es.ujaen.dae.reservahoteles.rest.dto.DReserva
;
import
es.ujaen.dae.reservahoteles.rest.dto.DUsuario
;
import
es.ujaen.dae.reservahoteles.rest.dto.Mapeador
;
import
es.ujaen.dae.reservahoteles.servicios.ServicioReservas
;
...
...
@@ -105,13 +108,52 @@ public class ControladorReservas {
return
ResponseEntity
.
ok
(
hoteles
.
stream
().
map
(
h
->
mapeador
.
dto
(
h
)).
toList
());
}
/*
@GetMapping("/hotel/{id}")
public ResponseEntity<Hotel> buscarHotel(int id) {
try {
Hotel hotel = servicioReservas.buscarHotel(id).orElse(HotelNoRegistrado::new);
@GetMapping
(
"/hoteles/{id}"
)
public
ResponseEntity
<
DHotel
>
buscarHotel
(
@PathVariable
int
id
)
{
try
{
Hotel
hotel
=
servicioReservas
.
buscarHotel
(
id
).
orElseThrow
(
HotelNoRegistrado:
:
new
);
return
ResponseEntity
.
ok
(
mapeador
.
dto
(
hotel
));
}
catch
(
HotelNoRegistrado
e
)
{
return
ResponseEntity
.
status
(
HttpStatus
.
NOT_FOUND
).
build
();
}
}
@GetMapping
(
"/hoteles/{id}/disponibilidad"
)
public
ResponseEntity
<
DDisponibilidad
>
verDisponibilidadHotel
(
@PathVariable
int
id
,
@RequestParam
LocalDate
desde
,
@RequestParam
LocalDate
hasta
)
{
final
var
desdeFinal
=
desde
!=
null
?
desde
:
LocalDate
.
now
();
final
var
hastaFinal
=
hasta
!=
null
?
hasta
:
LocalDate
.
MAX
;
try
{
Hotel
hotel
=
servicioReservas
.
buscarHotel
(
id
).
orElseThrow
(
HotelNoRegistrado:
:
new
);
return
ResponseEntity
.
ok
(
mapeador
.
dto
(
hotel
.
disponibilidad
(
desdeFinal
,
hastaFinal
)));
}
catch
(
HotelNoRegistrado
e
)
{
return
ResponseEntity
.
status
(
HttpStatus
.
NOT_FOUND
).
build
();
}
}
@PostMapping
(
"/hoteles/{id}/reservas"
)
public
ResponseEntity
<
DReserva
>
reserva
(
@PathVariable
int
id
,
@RequestBody
DReserva
reserva
)
{
try
{
Hotel
hotel
=
servicioReservas
.
buscarHotel
(
id
).
orElseThrow
(
HotelNoRegistrado:
:
new
);
Usuario
usuario
=
servicioReservas
.
buscarUsuario
(
reserva
.
emailUsuario
()).
orElseThrow
(
UsuarioNoRegistrado:
:
new
);
return
ResponseEntity
.
status
(
HttpStatus
.
CREATED
).
body
(
mapeador
.
dto
(
servicioReservas
.
reserva
(
usuario
,
hotel
,
reserva
.
fechaInicio
(),
reserva
.
fechaFin
(),
reserva
.
numHabSimple
(),
reserva
.
numHabDoble
()
)));
}
catch
(
HotelNoRegistrado
|
UsuarioNoRegistrado
e
)
{
return
ResponseEntity
.
status
(
HttpStatus
.
NOT_FOUND
).
build
();
}
}
*/
}
src/main/java/es/ujaen/dae/reservahoteles/rest/dto/DDisponibilidad.java
0 → 100644
View file @
fd486b02
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Record.java to edit this template
*/
package
es
.
ujaen
.
dae
.
reservahoteles
.
rest
.
dto
;
/**
*
* @author administrador
*/
public
record
DDisponibilidad
(
int
numHabSimple
,
int
numHabDoble
)
{
}
src/main/java/es/ujaen/dae/reservahoteles/rest/dto/Mapeador.java
View file @
fd486b02
...
...
@@ -73,5 +73,13 @@ public class Mapeador {
dReserva
.
fechaFin
(),
dReserva
.
numHabSimple
(),
dReserva
.
numHabDoble
());
}
public
DDisponibilidad
dto
(
Hotel
.
Disponibilidad
disponibilidad
)
{
return
new
DDisponibilidad
(
disponibilidad
.
numHabSimple
(),
disponibilidad
.
numHabDoble
());
}
public
Hotel
.
Disponibilidad
objetoValor
(
DDisponibilidad
disponibilidad
)
{
return
new
Hotel
.
Disponibilidad
(
disponibilidad
.
numHabSimple
(),
disponibilidad
.
numHabDoble
());
}
}
src/main/java/es/ujaen/dae/reservahoteles/servicios/ServicioReservas.java
View file @
fd486b02
...
...
@@ -70,6 +70,10 @@ public class ServicioReservas {
return
repositorioClientes
.
buscar
(
email
).
filter
(
cliente
->
cliente
.
clave
().
equals
(
clave
));
}
public
Optional
<
Usuario
>
buscarUsuario
(
@Email
String
email
)
{
return
repositorioClientes
.
buscar
(
email
);
}
/**
* Búsqueda de hoteles disponibles en una localidad
...
...
@@ -105,6 +109,15 @@ public class ServicioReservas {
}
/**
* Búsqueda de hoteles por id
* @param id el nombre del hotel
* @return El hotel solicitado
*/
public
Optional
<
Hotel
>
buscarHotel
(
int
id
)
{
return
repositorioHoteles
.
buscarPorId
(
id
);
}
/**
* Carga las reservas de un hotel
* @param hotel el hotel cuyas lista de reservas se va a cargar
* @return el hotel con las reservas
...
...
src/test/java/es/ujaen/dae/reservahoteles/rest/TestControladorReservas.java
View file @
fd486b02
package
es
.
ujaen
.
dae
.
reservahoteles
.
rest
;
import
es.ujaen.dae.reservahoteles.entidades.Usuario
;
import
es.ujaen.dae.reservahoteles.rest.dto.DHotel
;
import
es.ujaen.dae.reservahoteles.rest.dto.DReserva
;
import
es.ujaen.dae.reservahoteles.rest.dto.DUsuario
;
import
jakarta.annotation.PostConstruct
;
import
java.time.LocalDate
;
import
static
org
.
assertj
.
core
.
api
.
Assertions
.
assertThat
;
import
org.junit.jupiter.api.Test
;
import
org.springframework.boot.test.context.SpringBootTest
;
...
...
@@ -113,14 +116,6 @@ public class TestControladorReservas {
var
hotel1
=
new
DHotel
(
0
,
"Gran Hotel Almería"
,
"Almería"
,
"Almería"
,
"04001"
,
25
,
50
,
100
,
180
);
var
hotel2
=
new
DHotel
(
0
,
"Hotel Infanta Cristina"
,
"Jaén"
,
"Jaén"
,
"23009"
,
30
,
60
,
120
,
200
);
var
respuestaLogin
=
restTemplate
.
getForEntity
(
"/usuarios/{email}?clave={clave}"
,
DUsuario
.
class
,
"direccion@hotelxyz.es"
,
"SeCrEtO"
);
assertThat
(
respuestaLogin
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
var
respuesta
=
restTemplate
.
postForEntity
(
"/hoteles"
,
hotel1
,
...
...
@@ -144,5 +139,86 @@ public class TestControladorReservas {
assertThat
(
respuestaConsulta
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
respuestaConsulta
.
getBody
()).
hasSize
(
1
);
assertThat
(
respuestaConsulta
.
getBody
()[
0
].
id
()).
isEqualTo
(
1
);
}
@Test
@DirtiesContext
void
testBuscarPorLocalidad
()
{
var
hotel1
=
new
DHotel
(
0
,
"Gran Hotel Almería"
,
"Almería"
,
"Almería"
,
"04001"
,
25
,
50
,
100
,
180
);
var
hotel2
=
new
DHotel
(
0
,
"Hotel Espejo del Mar"
,
"Almería"
,
"Almería"
,
"04001"
,
15
,
35
,
80
,
110
);
var
hotel3
=
new
DHotel
(
0
,
"Hotel Infanta Cristina"
,
"Jaén"
,
"Jaén"
,
"23009"
,
30
,
60
,
120
,
200
);
restTemplate
.
postForEntity
(
"/hoteles"
,
hotel1
,
DHotel
.
class
);
restTemplate
.
postForEntity
(
"/hoteles"
,
hotel2
,
DHotel
.
class
);
restTemplate
.
postForEntity
(
"/hoteles"
,
hotel3
,
DHotel
.
class
);
var
respuestaConsulta
=
restTemplate
.
getForEntity
(
"/hoteles?localidad={localidad}"
+
"&desde={desde}&hasta={hasta}"
+
"&numHabSimple={numHabSimple}&numHabDoble={numHabDoble}"
,
DHotel
[].
class
,
" almeria"
,
LocalDate
.
now
().
plusDays
(
7
),
LocalDate
.
now
().
plusDays
(
9
),
0
,
2
);
assertThat
(
respuestaConsulta
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
OK
);
assertThat
(
respuestaConsulta
.
getBody
()).
hasSize
(
2
);
assertThat
(
respuestaConsulta
.
getBody
()[
0
].
id
()).
isEqualTo
(
1
);
assertThat
(
respuestaConsulta
.
getBody
()[
1
].
id
()).
isEqualTo
(
2
);
}
@Test
@DirtiesContext
void
testReservaHotel
()
{
var
hotel
=
new
DHotel
(
0
,
"Bed and Breakfast Almería"
,
"Almería"
,
"Almería"
,
"04001"
,
2
,
2
,
60
,
100
);
restTemplate
.
postForEntity
(
"/hoteles"
,
hotel
,
DHotel
.
class
);
var
usuario
=
new
DUsuario
(
"Pedro"
,
"Jaén Jaén"
,
"611203025"
,
"pjaen@gmail.com"
,
"miClAvE"
);
restTemplate
.
postForEntity
(
"/usuarios"
,
usuario
,
Void
.
class
);
var
hotelGuardado
=
restTemplate
.
getForEntity
(
"/hoteles?nombre={nombre}&localidad={localidad}"
,
DHotel
[].
class
,
"bed and breakfast"
,
" almeria"
).
getBody
()[
0
];
var
reserva
=
new
DReserva
(
0
,
LocalDate
.
now
().
plusDays
(
7
),
LocalDate
.
now
().
plusDays
(
10
),
0
,
1
,
usuario
.
email
());
var
respuestaReserva
=
restTemplate
.
postForEntity
(
"/hoteles/{id}/reservas"
,
reserva
,
DReserva
.
class
,
hotelGuardado
.
id
()
);
assertThat
(
respuestaReserva
.
getStatusCode
()).
isEqualTo
(
HttpStatus
.
CREATED
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment