Commit fe1cb857 by Antonio Rueda

Validación a nivel de servicio

parent 572f736c
...@@ -6,19 +6,26 @@ import es.ujaen.dae.reservahoteles.entidades.Hotel; ...@@ -6,19 +6,26 @@ import es.ujaen.dae.reservahoteles.entidades.Hotel;
import es.ujaen.dae.reservahoteles.entidades.Reserva; import es.ujaen.dae.reservahoteles.entidades.Reserva;
import es.ujaen.dae.reservahoteles.excepciones.ClienteYaRegistrado; import es.ujaen.dae.reservahoteles.excepciones.ClienteYaRegistrado;
import es.ujaen.dae.reservahoteles.util.UtilString; import es.ujaen.dae.reservahoteles.util.UtilString;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.Future;
import jakarta.validation.constraints.FutureOrPresent;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.PositiveOrZero;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.TreeMap; import java.util.TreeMap;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
/** /**
* *
* @author ajrueda * @author ajrueda
*/ */
@Service @Service
@Validated
public class ServicioReservas { public class ServicioReservas {
Map<Integer, Hotel> hoteles; Map<Integer, Hotel> hoteles;
Map<String, Cliente> clientes; Map<String, Cliente> clientes;
...@@ -28,18 +35,18 @@ public class ServicioReservas { ...@@ -28,18 +35,18 @@ public class ServicioReservas {
clientes = new TreeMap<>(); clientes = new TreeMap<>();
} }
public void nuevoHotel(Hotel hotel) { public void nuevoHotel(@Valid Hotel hotel) {
hoteles.put(hotel.id(), hotel); hoteles.put(hotel.id(), hotel);
} }
public void nuevoCliente(Cliente cliente) { public void nuevoCliente(@Valid Cliente cliente) {
if (clientes.containsKey(cliente.email())) if (clientes.containsKey(cliente.email()))
throw new ClienteYaRegistrado(); throw new ClienteYaRegistrado();
clientes.put(cliente.email(), cliente); clientes.put(cliente.email(), cliente);
} }
public Optional<Cliente> login(String email, String clave) { public Optional<Cliente> login(@Email String email, String clave) {
// Equivalente al código de abajo pero más seguro y compacto // Equivalente al código de abajo pero más seguro y compacto
// return Optional.ofNullable(clientes.get(email)) // return Optional.ofNullable(clientes.get(email))
// .filter(cliente -> cliente.clave().equals(clave)); // .filter(cliente -> cliente.clave().equals(clave));
...@@ -57,9 +64,9 @@ public class ServicioReservas { ...@@ -57,9 +64,9 @@ public class ServicioReservas {
* @param numHabDoble número de habitaciones dobles solicitadas * @param numHabDoble número de habitaciones dobles solicitadas
* @return la lista de hoteles candidatos * @return la lista de hoteles candidatos
*/ */
public List<Hotel> buscarHotelesDisponiblesPorLocalidad(String localidad, public List<Hotel> buscarHotelesDisponiblesPorLocalidad(@NotBlank String localidad,
LocalDate fechaInicio, LocalDate fechaFin, @FutureOrPresent LocalDate fechaInicio, @Future LocalDate fechaFin,
int numHabSimple, int numHabDoble) { @PositiveOrZero int numHabSimple, @PositiveOrZero int numHabDoble) {
var localidadNorm = UtilString.normalizar(localidad); var localidadNorm = UtilString.normalizar(localidad);
return hoteles.values().stream().filter(h -> return hoteles.values().stream().filter(h ->
...@@ -75,7 +82,7 @@ public class ServicioReservas { ...@@ -75,7 +82,7 @@ public class ServicioReservas {
* @param localidad el nombre total o parcial de la localidad * @param localidad el nombre total o parcial de la localidad
* @return la lista de hoteles candidatos * @return la lista de hoteles candidatos
*/ */
public List<Hotel> buscarHotel(String nombre, String localidad) { public List<Hotel> buscarHotel(@NotBlank String nombre, @NotBlank String localidad) {
var nombreNorm = UtilString.normalizar(nombre); var nombreNorm = UtilString.normalizar(nombre);
var localidadNorm = UtilString.normalizar(localidad); var localidadNorm = UtilString.normalizar(localidad);
...@@ -93,7 +100,11 @@ public class ServicioReservas { ...@@ -93,7 +100,11 @@ public class ServicioReservas {
* @param numHabDoble número de habitaciones dobles solicitadas * @param numHabDoble número de habitaciones dobles solicitadas
* @return true si hay disponibilidad, false en caso contrario * @return true si hay disponibilidad, false en caso contrario
*/ */
public boolean disponible(Hotel h, LocalDate fechaInicio, LocalDate fechaFin, int numHabSimple, int numHabDoble) { public boolean disponible(Hotel h,
@FutureOrPresent LocalDate fechaInicio,
@FutureOrPresent LocalDate fechaFin,
@PositiveOrZero int numHabSimple,
@PositiveOrZero int numHabDoble) {
return h.disponible(fechaInicio, fechaFin, numHabSimple, numHabDoble); return h.disponible(fechaInicio, fechaFin, numHabSimple, numHabDoble);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment