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