Commit e479af94 by Antonio Rueda

Eliminación de operaciones verCliente() y verTarjetas, accesibles desde el propio cliente

parent d2d5a5d0
......@@ -44,10 +44,9 @@ public class ServicioUjaCoin {
@Autowired
RepositorioCuentas repositorioCuentas;
@Autowired
RepositorioMovimientos repositorioMovimientos;
public ServicioUjaCoin() {
}
......@@ -58,14 +57,16 @@ public class ServicioUjaCoin {
* @return la cuenta asociada al cliente
*/
public Cuenta altaCliente(@NotNull @Valid Cliente cliente) {
if (repositorioClientes.buscar(cliente.getDni()).isPresent()) {
Optional<Cliente> test = repositorioClientes.buscar(cliente.getDni());
if (test.isPresent()) {
throw new ClienteYaRegistrado();
}
// Crear y registrar cuenta
Cuenta cuenta = new Cuenta(generarNumCuenta(), cliente);
cliente.nuevaCuenta(cuenta);
repositorioClientes.guardar(cliente);
return cuenta;
}
......@@ -83,6 +84,18 @@ public class ServicioUjaCoin {
}
/**
* Realiza un login de un cliente
* @param dni el DNI del cliente
* @param clave la clave de acceso
* @return el objeto de la clase Cliente asociado
*/
public Optional<Cliente> verCliente(@NotBlank String dni) {
Optional<Cliente> clienteLogin = repositorioClientes.buscar(dni);
return clienteLogin;
}
/**
* Crear una cuenta adicional para el cliente
* @param dni el DNI delcliente
* @return la cuenta creada
......@@ -102,6 +115,7 @@ public class ServicioUjaCoin {
* @param dni el DNI del cliente
* @param tarjeta la tarjeta a registrar
*/
// @Transactional
public void registrarTarjeta(@NotBlank String dni, @NotNull @Valid Tarjeta tarjeta) {
Cliente cliente = repositorioClientes.buscar(dni).orElseThrow(ClienteNoRegistrado::new);
cliente.verTarjeta(tarjeta.getNum()).ifPresent(x -> { throw new TarjetaYaRegistrada(); } );
......@@ -109,31 +123,7 @@ public class ServicioUjaCoin {
cliente.nuevaTarjeta(tarjeta);
repositorioClientes.actualizar(cliente);
}
/**
* Devolver las cuentas de un cliente dado
* No es una operación imprescindible puesto que el cliente ya
* tiene la lista de cuentas
* @param dni el DNI del cliente
* @return la lista de cuentas
*/
public List<Cuenta> verCuentas(@NotBlank String dni) {
Cliente cliente = repositorioClientes.buscar(dni).orElseThrow(ClienteNoRegistrado::new);
return cliente.verCuentas();
}
/**
* Devolver las tarjetas registradas por el usuario. No es una operación
* realmente necesaria puesto que el cliente ya contiene esta lista
* @param dni el DNI del cliente
* @return la lista de tarjetas
*/
public List<Tarjeta> verTarjetas(@NotBlank String dni) {
Cliente cliente = repositorioClientes.buscar(dni).orElseThrow(ClienteNoRegistrado::new);
return cliente.verTarjetas(); // Relación eager, no hay que hacer nada
}
/**
* Realizar un ingreso en cuenta a partir de una tarjeta
* @param numCuenta el número de la cuenta donde se ingresa el dinero
......@@ -186,14 +176,14 @@ public class ServicioUjaCoin {
cuentaDestino.nuevoMovimiento(new TransferenciaRecibida(cuentaOrigen, importe));
}
/**
/**
* Devolver la lista de movimientos de la cuenta, filtrada por fechas
* @param numCuenta el número de la cuenta
* @param fechaHoraDesde la fecha inicial
* @param fechaHoraHasta la fecha final
* @return la lista de los movimientos entre las fechas indicadas
*/
List<Movimiento> listarMovimientosCuentaDesdeHasta(@NotBlank String numCuenta, @Past LocalDateTime fechaHoraDesde, LocalDateTime fechaHoraHasta) {
public List<Movimiento> listarMovimientosCuentaDesdeHasta(@NotBlank String numCuenta, @Past LocalDateTime fechaHoraDesde, LocalDateTime fechaHoraHasta) {
Cuenta cuenta = repositorioCuentas.buscar(numCuenta)
.orElseThrow(CuentaNoRegistrada::new);
......
......@@ -37,6 +37,7 @@ public class ServicioUjaCoinTest {
@Autowired
ServicioUjaCoin servicioUjaCoin;
@Test
public void testAccesoServicioUjaCoin() {
Assertions.assertThat(servicioUjaCoin).isNotNull();
......@@ -146,9 +147,11 @@ public class ServicioUjaCoinTest {
Tarjeta tarjeta = new Tarjeta("4111111111111111", cliente.getNombre(), LocalDate.of(2030, 12, 1), "365");
servicioUjaCoin.registrarTarjeta(clienteLogin.getDni(), tarjeta);
clienteLogin.nuevaTarjeta(tarjeta);
clienteLogin = null;
// Obtener cuenta
List<Cuenta> cuentas = servicioUjaCoin.verCuentas(clienteLogin.getDni());
clienteLogin = servicioUjaCoin.loginCliente(cliente.getDni(), "clave").get();
List<Cuenta> cuentas = clienteLogin.verCuentas();
Assertions.assertThat(cuentas).hasSize(1);
// Realizar ingreso y comprobar estado de la cuenta
......@@ -157,7 +160,7 @@ public class ServicioUjaCoinTest {
List<Movimiento> movimientos = servicioUjaCoin.listarMovimientosCuentaDesdeHasta(cuentas.get(0).getNum(), LocalDateTime.now().minusDays(1), LocalDateTime.now().plusHours(1));
Assertions.assertThat(movimientos).hasSize(1);
Assertions.assertThat(movimientos.get(0)).isInstanceOf(Ingreso.class);
Assertions.assertThat(movimientos.get(0).getImporte()).isEqualTo(1000);
Assertions.assertThat(movimientos.get(0).getImporte()).isEqualTo(1000);
}
@Test
......@@ -200,8 +203,8 @@ public class ServicioUjaCoinTest {
servicioUjaCoin.transferencia(cuentaOrigen.getNum(), cuentaDestino.getNum(), 500);
// Refrescar cuenta origen y destino
cuentaOrigen = servicioUjaCoin.verCuentas(cliente.getDni()).get(0);
cuentaDestino = servicioUjaCoin.verCuentas(cliente2.getDni()).get(0);
cuentaOrigen = servicioUjaCoin.loginCliente(cliente.getDni(), "claveyyy").get().verCuentas().get(0);
cuentaDestino = servicioUjaCoin.loginCliente(cliente2.getDni(), "clavezzz").get().verCuentas().get(0);
// Listar movimientos de la cuenta origen
List<Movimiento> movimientos = servicioUjaCoin.listarMovimientosCuentaDesde(cuentaOrigen.getNum(), LocalDateTime.now().minusDays(1));
......
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