Commit 18f91a18 by Antonio Rueda

Operaciones específicas en mapeador para creación de nuevas entidades

incluyendo codificación de claves de usuarios
parent 37574181
......@@ -13,7 +13,6 @@ import jakarta.annotation.PostConstruct;
import jakarta.validation.ConstraintViolationException;
import java.time.LocalDate;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
......@@ -55,7 +54,7 @@ public class ControladorReservas {
@PostMapping("/usuarios")
public ResponseEntity<Void> nuevoCliente(@RequestBody DUsuario usuario) {
try {
servicioReservas.nuevoCliente(mapeador.entidad(usuario));
servicioReservas.nuevoCliente(mapeador.entidadNueva(usuario));
}
catch(UsuarioYaRegistrado e) {
return ResponseEntity.status(HttpStatus.CONFLICT).build();
......@@ -77,7 +76,7 @@ public class ControladorReservas {
@PostMapping("/hoteles")
public ResponseEntity<Void> nuevoHotel(@RequestBody DHotel hotel) {
servicioReservas.nuevoHotel(direccion, mapeador.entidad(hotel));
servicioReservas.nuevoHotel(direccion, mapeador.entidadNueva(hotel));
return ResponseEntity.status(HttpStatus.CREATED).build();
}
......
......@@ -6,6 +6,7 @@ import es.ujaen.dae.reservahoteles.entidades.Usuario;
import es.ujaen.dae.reservahoteles.excepciones.UsuarioNoRegistrado;
import es.ujaen.dae.reservahoteles.repositorios.RepositorioUsuarios;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service;
/**
......@@ -16,6 +17,9 @@ import org.springframework.stereotype.Service;
public class Mapeador {
@Autowired
RepositorioUsuarios repositorioUsuarios;
@Autowired
PasswordEncoder codificadorClaves;
public DUsuario dto(Usuario usuario) {
// Nunca extraemos la clave de la entidad
......@@ -25,6 +29,10 @@ public class Mapeador {
public Usuario entidad(DUsuario dUsuario) {
return new Usuario(dUsuario.nombre(), dUsuario.direccion(), dUsuario.tlf(), dUsuario.email(), dUsuario.clave());
}
public Usuario entidadNueva(DUsuario dUsuario) {
return new Usuario(dUsuario.nombre(), dUsuario.direccion(), dUsuario.tlf(), dUsuario.email(), codificadorClaves.encode(dUsuario.clave()));
}
public DHotel dto(Hotel hotel) {
return new DHotel(
......@@ -51,6 +59,18 @@ public class Mapeador {
dHotel.precioHabSimple(),
dHotel.precioHabDoble());
}
public Hotel entidadNueva(DHotel dHotel) {
return new Hotel(
dHotel.nombre(),
dHotel.localidad(),
dHotel.provincia(),
dHotel.cp(),
dHotel.numHabSimple(),
dHotel.numHabDoble(),
dHotel.precioHabSimple(),
dHotel.precioHabDoble());
}
public DReserva dto(Reserva reserva) {
return new DReserva(
......@@ -73,5 +93,17 @@ public class Mapeador {
dReserva.fechaFin(),
dReserva.numHabSimple(),
dReserva.numHabDoble());
}
public Reserva entidadNueva(DReserva dReserva) {
Usuario usuario = repositorioUsuarios.buscar(dReserva.emailUsuario())
.orElseThrow(UsuarioNoRegistrado::new);
return new Reserva(
usuario,
dReserva.fechaInicio(),
dReserva.fechaFin(),
dReserva.numHabSimple(),
dReserva.numHabDoble());
}
}
......@@ -41,7 +41,7 @@ public class ServicioReservas {
@Value("${meses-historico}")
int mesesHistorico;
// Cliente especial de dirección
private static final Usuario direccion = new Usuario("direccion", "-", "670343332", "direccion@hotelxyz.es", "SeCrEtO");
......@@ -59,7 +59,7 @@ public class ServicioReservas {
// Evitar que se cree un usuario con la cuenta de direccion
if (cliente.email().equals(direccion.email()))
throw new UsuarioYaRegistrado();
repositorioClientes.guardar(cliente);
}
......
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