Commit cbe7bbf7 by Antonio Rueda

Añadida validación de atributos de entidades. Comprobación de disponibilidad

en entidad Hotel
parent d868f66d
...@@ -24,6 +24,11 @@ ...@@ -24,6 +24,11 @@
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId> <artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
......
package es.ujaen.dae.reservahoteles.entidades; package es.ujaen.dae.reservahoteles.entidades;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
/** /**
* *
* @author ajrueda * @author ajrueda
*/ */
public class Cliente { public class Cliente {
@NotBlank
String nombre; String nombre;
@NotBlank
String direccion; String direccion;
@Pattern(regexp = "^(\\+34|0034|34)?[6789]\\d{8}$")
String tlf; String tlf;
// Clave // Clave
@Email
String email; String email;
@NotBlank
String clave; String clave;
public Cliente(String nombre, String direccion, String tlf, String email, String clave) { public Cliente(String nombre, String direccion, String tlf, String email, String clave) {
......
package es.ujaen.dae.reservahoteles.entidades; package es.ujaen.dae.reservahoteles.entidades;
import es.ujaen.dae.reservahoteles.excepciones.NoDisponibilidadReserva;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
import jakarta.validation.constraints.Positive;
import jakarta.validation.constraints.PositiveOrZero;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.SortedMap; import java.util.SortedMap;
import java.util.TreeMap; import java.util.TreeMap;
...@@ -10,20 +17,29 @@ import java.util.TreeMap; ...@@ -10,20 +17,29 @@ import java.util.TreeMap;
* @author ajrueda * @author ajrueda
*/ */
public class Hotel { public class Hotel {
@Positive
int id; int id;
@NotBlank
String nombre; String nombre;
// Dirección // Dirección
@NotBlank
String localidad; String localidad;
@NotBlank
String provincia; String provincia;
@Pattern(regexp="/^(?:0[1-9]|[1-4]\\d|5[0-2])\\d{3}$/")
String cp; String cp;
// Disponibilidad habitaciones // Disponibilidad habitaciones
@PositiveOrZero
int numHabSimple; int numHabSimple;
@PositiveOrZero
int numHabDoble; int numHabDoble;
// Precio habitaciones // Precio habitaciones
@PositiveOrZero
int precioHabSimple; int precioHabSimple;
@PositiveOrZero
int precioHabDoble; int precioHabDoble;
SortedMap<LocalDate, Reserva> reservas; SortedMap<LocalDate, Reserva> reservas;
...@@ -43,6 +59,17 @@ public class Hotel { ...@@ -43,6 +59,17 @@ public class Hotel {
} }
/** /**
* Realza una reserva en el hotel
* @param reserva la reserva a añadir
*/
public void nuevaReserva(Reserva reserva) {
if (!disponible(reserva.fechaInicio(), reserva.fechaFin(), reserva.numHabSimple(), reserva.numHabDoble()))
throw new NoDisponibilidadReserva();
reservas.put(reserva.fechaInicio(), reserva);
}
/**
* Comprueba si hay disponibilidad en las fechas indicadas * Comprueba si hay disponibilidad en las fechas indicadas
* @param fechaInicio fecha de inicio de la reserva * @param fechaInicio fecha de inicio de la reserva
* @param fechaFin fecha de final de la reserva * @param fechaFin fecha de final de la reserva
...@@ -82,6 +109,29 @@ public class Hotel { ...@@ -82,6 +109,29 @@ public class Hotel {
return numHabSimpleDisponibles >= numHabSimple && numHabDobleDisponibles >= numHabDoble; return numHabSimpleDisponibles >= numHabSimple && numHabDobleDisponibles >= numHabDoble;
} }
/**
* Devolver las reservas que solapan el intervalo dado
* @param fechaInicio fecha de inicio
* @param fechaFin fecha fin
* @return la lista de reservas
*/
public List<Reserva> reservasEntre(LocalDate fechaInicio, LocalDate fechaFin) {
var resultados = new ArrayList<Reserva>();
for (var reserva: reservas.values()) {
if (reserva.fechaInicio().isBefore(fechaFin)) {
if (reserva.fechaFin().isAfter(fechaInicio))
resultados.add(reserva);
}
else
// Las reservas están ordenadas por fecha de inicio
// así que no puede haber más
break;
}
return resultados;
}
public int id() { public int id() {
return id; return id;
} }
...@@ -97,7 +147,7 @@ public class Hotel { ...@@ -97,7 +147,7 @@ public class Hotel {
public void nombre(String nombre) { public void nombre(String nombre) {
this.nombre = nombre; this.nombre = nombre;
} }
/** /**
* Operación auxiliar para comprobar si una fecha están dentro de un intervalo dado * Operación auxiliar para comprobar si una fecha están dentro de un intervalo dado
* (incluyendo extremos) * (incluyendo extremos)
......
package es.ujaen.dae.reservahoteles.entidades; package es.ujaen.dae.reservahoteles.entidades;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import jakarta.validation.constraints.PositiveOrZero;
import java.time.LocalDate; import java.time.LocalDate;
/** /**
...@@ -9,6 +12,7 @@ import java.time.LocalDate; ...@@ -9,6 +12,7 @@ import java.time.LocalDate;
*/ */
public class Reserva { public class Reserva {
// clave // clave
@Positive
int num; int num;
// Fechas de inicio y fin de reserva // Fechas de inicio y fin de reserva
...@@ -16,9 +20,12 @@ public class Reserva { ...@@ -16,9 +20,12 @@ public class Reserva {
LocalDate fechaFin; LocalDate fechaFin;
// Número de habitaciones reservadas; // Número de habitaciones reservadas;
@PositiveOrZero
int numHabSimple; int numHabSimple;
@PositiveOrZero
int numHabDoble; int numHabDoble;
@NotNull
Cliente cliente; Cliente cliente;
public Reserva(int num, Cliente cliente, LocalDate fechaInicio, LocalDate fechaFin, int numHabSimple, int numHabDoble) { public Reserva(int num, Cliente cliente, LocalDate fechaInicio, LocalDate fechaFin, int numHabSimple, int 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