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 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
......
package es.ujaen.dae.reservahoteles.entidades;
import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Pattern;
/**
*
* @author ajrueda
*/
public class Cliente {
@NotBlank
String nombre;
@NotBlank
String direccion;
@Pattern(regexp = "^(\\+34|0034|34)?[6789]\\d{8}$")
String tlf;
// Clave
@Email
String email;
@NotBlank
String clave;
public Cliente(String nombre, String direccion, String tlf, String email, String clave) {
......
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.util.ArrayList;
import java.util.List;
import java.util.SortedMap;
import java.util.TreeMap;
......@@ -10,20 +17,29 @@ import java.util.TreeMap;
* @author ajrueda
*/
public class Hotel {
@Positive
int id;
@NotBlank
String nombre;
// Dirección
@NotBlank
String localidad;
@NotBlank
String provincia;
@Pattern(regexp="/^(?:0[1-9]|[1-4]\\d|5[0-2])\\d{3}$/")
String cp;
// Disponibilidad habitaciones
@PositiveOrZero
int numHabSimple;
@PositiveOrZero
int numHabDoble;
// Precio habitaciones
@PositiveOrZero
int precioHabSimple;
@PositiveOrZero
int precioHabDoble;
SortedMap<LocalDate, Reserva> reservas;
......@@ -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
* @param fechaInicio fecha de inicio de la reserva
* @param fechaFin fecha de final de la reserva
......@@ -82,6 +109,29 @@ public class Hotel {
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() {
return id;
}
......@@ -97,7 +147,7 @@ public class Hotel {
public void nombre(String nombre) {
this.nombre = nombre;
}
/**
* Operación auxiliar para comprobar si una fecha están dentro de un intervalo dado
* (incluyendo extremos)
......
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;
/**
......@@ -9,6 +12,7 @@ import java.time.LocalDate;
*/
public class Reserva {
// clave
@Positive
int num;
// Fechas de inicio y fin de reserva
......@@ -16,9 +20,12 @@ public class Reserva {
LocalDate fechaFin;
// Número de habitaciones reservadas;
@PositiveOrZero
int numHabSimple;
@PositiveOrZero
int numHabDoble;
@NotNull
Cliente cliente;
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