Commit ef673668 by Adrian

Añadido repositorios y funcionalidad con DDBB

parent 044deb99
Showing with 493 additions and 143 deletions
......@@ -45,6 +45,7 @@
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
......
No preview for this file type
......@@ -6,7 +6,6 @@ import org.hibernate.dialect.Dialect;
import org.hibernate.dialect.function.StandardSQLFunction;
import org.hibernate.dialect.function.SQLFunctionTemplate;
import org.hibernate.dialect.function.VarArgsSQLFunction;
import org.hibernate.Hibernate;
import org.hibernate.type.StringType;
public class SQLDialect extends Dialect {
......
......@@ -13,8 +13,9 @@ import org.springframework.boot.autoconfigure.domain.EntityScan;
*
* @author Adrian
*/
/** Clase principal de arranque de la aplicación basada en SpringBoot */
/**
* Clase principal de arranque de la aplicación basada en SpringBoot
*/
@SpringBootApplication(scanBasePackages = "es.ujaen.dae.ujacoin.beans")
@EntityScan(basePackages = "es.ujaen.dae.ujacoin.entidades")
public class AppUjaBank {
......
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package es.ujaen.dae.ujacoin.beans;
import es.ujaen.dae.ujacoin.entidades.Cliente;
import es.ujaen.dae.ujacoin.entidades.Cuenta;
import es.ujaen.dae.ujacoin.entidades.Movimiento;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
/**
*
* @author adria
*/
@Repository
@Transactional
public class RepositorioClientes {
@PersistenceContext
EntityManager em;
public Cliente buscar(String clave) {
return em.find(Cliente.class, clave);
}
public void insertar(Cliente cliente) {
em.persist(cliente);
}
public void actualizar(Cliente cliente) {
em.merge(cliente);
}
public void eliminar(Cliente cliente) {
em.remove(em.merge(cliente));
}
public Cliente login(String dni, String clave) {
Cliente cliente = em.createQuery("Select c from Cliente c where c.dni = :dni and c.clave = :clave", Cliente.class).setParameter("dni", dni).setParameter("clave", clave).getSingleResult();
return cliente;
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package es.ujaen.dae.ujacoin.beans;
import es.ujaen.dae.ujacoin.entidades.Cliente;
import es.ujaen.dae.ujacoin.entidades.Cuenta;
import es.ujaen.dae.ujacoin.entidades.Movimiento;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
/**
*
* @author adria
*/
@Repository
@Transactional
public class RepositorioCuentas {
@PersistenceContext
EntityManager em;
public Cuenta buscar(String numero) {
return em.find(Cuenta.class, numero);
}
public void insertar(Cuenta cuenta) {
em.persist(cuenta);
}
public void actualizar(Cuenta cuenta) {
em.merge(cuenta);
}
public void eliminar(Cuenta cuenta) {
em.remove(em.merge(cuenta));
}
public List<Cuenta> listarCuentasPorCliente(Cliente cliente) {
em.merge(cliente);
cliente.getTarjetasAsociadas();
return new ArrayList<>(cliente.getCuentasAsociadas().values());
}
public void añadirMovimiento(Cuenta cuenta, Movimiento movimiento){
Cuenta cuentaEnlazada = em.merge(cuenta);
cuentaEnlazada.getMovimientos().add(movimiento);
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package es.ujaen.dae.ujacoin.beans;
import es.ujaen.dae.ujacoin.entidades.Cuenta;
import es.ujaen.dae.ujacoin.entidades.Movimiento;
import es.ujaen.dae.ujacoin.entidades.Tarjeta;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
/**
*
* @author adria
*/
@Repository
@Transactional
public class RepositorioMovimientos {
@PersistenceContext
EntityManager em;
public Movimiento buscar(String clave) {
return em.find(Movimiento.class, clave);
}
public void insertar(Movimiento movimiento) {
em.persist(movimiento);
}
public void actualizar(Movimiento movimiento) {
em.merge(movimiento);
}
public void eliminar(Movimiento movimiento) {
em.remove(em.merge(movimiento));
}
/**
* Devolver los movimientos desde y hacia una tarjeta concreta
*
* @param tarjeta tarjeta objetivo
* @return listado de movimientos
*/
public List<Movimiento> listMovimientos(Tarjeta tarjeta) {
List<Movimiento> movimientos = em.createQuery("Select m from Movimiento m where m.tarjeta = :tarjeta", Movimiento.class).setParameter("tarjeta", tarjeta.getIdentificador()).getResultList();
return movimientos;
}
/**
* Devolver los movimientos desde y hacia una tarjeta concreta
*
* @param cuenta tarjeta objetivo
* @return listado de movimientos
*/
public List<Movimiento> listMovimientos(Cuenta cuenta) {
List<Movimiento> movimientos = em.createQuery("Select m from Movimiento m where m.cuenta = :cuenta", Movimiento.class).setParameter("cuenta", cuenta.getNumero()).getResultList();
return movimientos;
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package es.ujaen.dae.ujacoin.beans;
import es.ujaen.dae.ujacoin.entidades.Cliente;
import es.ujaen.dae.ujacoin.entidades.Tarjeta;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
/**
*
* @author adria
*/
@Repository
@Transactional
public class RepositorioTarjetas {
@PersistenceContext
EntityManager em;
public Tarjeta buscar(int identificador) {
return em.find(Tarjeta.class, identificador);
}
public void insertar(Tarjeta tarjeta) {
em.persist(tarjeta);
}
public void actualizar(Tarjeta tarjeta) {
em.merge(tarjeta);
}
public void eliminar(Tarjeta tarjeta) {
em.remove(em.merge(tarjeta));
}
public List<Tarjeta> listarTarjetasPorCliente(Cliente cliente) {
em.merge(cliente);
cliente.getTarjetasAsociadas();
return new ArrayList<>(cliente.getTarjetasAsociadas().values());
}
}
......@@ -7,14 +7,21 @@ package es.ujaen.dae.ujacoin.beans;
import es.ujaen.dae.ujacoin.entidades.Cliente;
import es.ujaen.dae.ujacoin.entidades.Cuenta;
import es.ujaen.dae.ujacoin.entidades.Movimiento;
import es.ujaen.dae.ujacoin.entidades.Tarjeta;
import es.ujaen.dae.ujacoin.excepciones.DDBBCaida;
import es.ujaen.dae.ujacoin.excepciones.SaldoRestanteNoCero;
import es.ujaen.dae.ujacoin.excepciones.UsuarioYaExistente;
import es.ujaen.dae.ujacoin.interfaces.ServicioUjaBank;
import es.ujaen.dae.ujacoin.util.TipoMovimiento;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.dao.EmptyResultDataAccessException;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* Clase controlador principal del sistema
......@@ -22,21 +29,21 @@ import org.springframework.stereotype.Component;
@Component
public class ServicioUjaBankImpl implements ServicioUjaBank {
/**
* Mapa para guardar los clientes usando el dni como clave
*/
private Map<String, Cliente> clientes;
/**
* Mapa para guardar las cuentas usando el numero como clave
*/
private Map<String, Cuenta> cuentas;
private Random rand = new Random();
public ServicioUjaBankImpl() {
@Autowired
private RepositorioClientes repoClientes;
clientes = new HashMap<>();
cuentas = new HashMap<>();
@Autowired
private RepositorioCuentas repoCuentas;
@Autowired
private RepositorioTarjetas repoTarjetas;
@Autowired
private RepositorioMovimientos repoMovimientos;
public ServicioUjaBankImpl() {
}
......@@ -46,47 +53,81 @@ public class ServicioUjaBankImpl implements ServicioUjaBank {
Cuenta cuentaNueva = new Cuenta(generadorCuentasNuevas(), cliente);
cliente.asignarCuenta(cuentaNueva);
clientes.put(cliente.getDni(), cliente);
cuentas.put(cuentaNueva.getNumero(), cuentaNueva);
try {
repoClientes.insertar(cliente);
repoCuentas.insertar(cuentaNueva);
} catch (org.hibernate.exception.GenericJDBCException e) {
throw new UsuarioYaExistente();
} catch (DataAccessResourceFailureException e) {
throw new DDBBCaida();
}
}
@Override
public boolean loginCliente(String dni, String clave) {
return clientes.containsKey(dni) && clientes.get(dni).claveVálida(clave);
public Cliente loginCliente(String dni, String clave) {
try {
return repoClientes.login(dni, clave);
} catch (EmptyResultDataAccessException e) {
return null;
}
}
@Override
public ArrayList<Tarjeta> listaTarjetas(String dni) {
return new ArrayList<>(clientes.get(dni).getTarjetasAsociadas().values());
@Transactional
public ArrayList<Tarjeta> listaTarjetas(Cliente cliente) {
repoClientes.actualizar(cliente);
cliente.getTarjetasAsociadas();
return new ArrayList<>(cliente.getTarjetasAsociadas().values());
}
@Override
public ArrayList<Cuenta> listaCuentas(String dni) {
return new ArrayList<>(clientes.get(dni).getCuentasAsociadas().values());
public ArrayList<Cuenta> listaCuentas(Cliente cliente) {
return (ArrayList<Cuenta>) repoCuentas.listarCuentasPorCliente(cliente);
}
@Override
public Cuenta verCuenta(String numero) {
return cuentas.get(numero);
return repoCuentas.buscar(numero);
}
@Override
@Transactional
public void ingreso(Cuenta cuenta, Tarjeta tarjeta, float importe) {
//Llamada al sistema de gestión de tarjetas
cuenta.ingreso(tarjeta, importe);
//cuenta.ingreso(tarjeta, importe);
}
@Override
@Transactional
public void reintegro(Cuenta cuenta, Tarjeta tarjeta, float importe) {
cuenta.reintegro(tarjeta, importe);
//Llamada al sistema de gestión de tarjetas
// cuenta.reintegro(tarjeta, importe);
}
@Override
public void transferencia(Cuenta cuentaOrigen, Cuenta cuentaDestino, float importe) {
cuentaOrigen.transferenciaA(cuentaDestino, importe);
cuentaDestino.transferenciaDesde(cuentaOrigen, importe);
repoCuentas.actualizar(cuentaOrigen);
repoCuentas.actualizar(cuentaDestino);
cuentaOrigen.modificarSaldo(-importe);
cuentaDestino.modificarSaldo(importe);
Movimiento movOrigen = new Movimiento(TipoMovimiento.TMTransferenciaEmitida, importe, LocalDateTime.now(), cuentaDestino);
Movimiento movDestino = new Movimiento(TipoMovimiento.TMTrasnferenciaRecibida, importe, LocalDateTime.now(), cuentaOrigen);
repoMovimientos.insertar(movOrigen);
repoMovimientos.insertar(movDestino);
repoCuentas.añadirMovimiento(cuentaOrigen, movOrigen);
repoCuentas.añadirMovimiento(cuentaDestino, movDestino);
}
@Override
......@@ -95,7 +136,8 @@ public class ServicioUjaBankImpl implements ServicioUjaBank {
Cuenta cuentaNueva = new Cuenta(generadorCuentasNuevas(), cliente);
cliente.asignarCuenta(cuentaNueva);
cuentas.put(cuentaNueva.getNumero(), cuentaNueva);
repoClientes.actualizar(cliente);
repoCuentas.insertar(cuentaNueva);
return cuentaNueva;
......@@ -107,22 +149,36 @@ public class ServicioUjaBankImpl implements ServicioUjaBank {
cliente.añadirTarjeta(tarjeta);
repoClientes.actualizar(cliente);
repoClientes.insertar(cliente);
}
@Override
@Transactional
public void borrarCuenta(Cuenta cuenta) {
if (cuenta.getSaldo() > 0) {
throw new SaldoRestanteNoCero();
}
//Cuidado es lazy
cuenta.getTitular().desenlazarCuenta(cuenta);
cuentas.remove(cuenta.getNumero());
repoClientes.actualizar(cuenta.getTitular());
repoCuentas.eliminar(cuenta);
}
@Override
public void borrarTarjeta(Tarjeta tarjeta) {
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
public void borrarTarjeta(int identificador) {
Tarjeta tarjeta = repoTarjetas.buscar(identificador);
if (tarjeta != null) {
repoTarjetas.eliminar(tarjeta);
}
}
private String generadorCuentasNuevas() {
......@@ -152,7 +208,7 @@ public class ServicioUjaBankImpl implements ServicioUjaBank {
numeroCadena = numeroCadena.concat(String.valueOf(codigo));
}
if (!cuentas.containsKey(numeroCadena)) {
if (repoCuentas.buscar(numeroCadena) == null) {
numeroValido = true;
}
......
......@@ -10,6 +10,7 @@ import java.time.LocalDate;
import java.util.HashMap;
import java.util.Map;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.MapKey;
......@@ -24,27 +25,45 @@ import javax.persistence.Transient;
@Entity
public class Cliente {
/**Dni del cliente*/
/**
* Dni del cliente
*/
@Id
private String dni;
/**Nombre del cliente*/
/**
* Nombre del cliente
*/
private String nombre;
/**Fecha de nacimiento del cliente*/
/**
* Fecha de nacimiento del cliente
*/
private LocalDate fechaNacimiento;
/**Dirección del cliente*/
/**
* Dirección del cliente
*/
private String direccion;
/**Teléfono del cliente*/
/**
* Teléfono del cliente
*/
private String telefono;
/**Email del cliente*/
/**
* Email del cliente
*/
private String email;
/**Contraseña del cliente*/
/**
* Contraseña del cliente
*/
private String clave;
/**Cuentas de las que es titular*/
@OneToMany(mappedBy = "titular")
/**
* Cuentas de las que es titular
*/
@OneToMany(mappedBy = "titular", fetch = FetchType.EAGER)
@MapKey(name = "numero")
private Map<String, Cuenta> cuentasAsociadas;
/**Cuentas de las que es titular*/
@OneToMany
/**
* Cuentas de las que es titular
*/
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn
@MapKey(name = "numero")
private Map<String, Tarjeta> tarjetasAsociadas;
......@@ -114,6 +133,7 @@ public class Cliente {
/**
* Añade una cuenta al cliente
*
* @param cuenta
*/
public void asignarCuenta(Cuenta cuenta) {
......@@ -122,20 +142,22 @@ public class Cliente {
/**
* Desenlaza la cuenta del usuario
*
* @param cuenta cuenta a remover
*/
public void desenlazarCuenta(Cuenta cuenta){
public void desenlazarCuenta(Cuenta cuenta) {
cuentasAsociadas.remove(cuenta.getNumero());
}
/**
* Añade una tarjeta al cliente
*
* @param tarjeta
*/
public void añadirTarjeta(Tarjeta tarjeta) {
if(tarjetasAsociadas.get(tarjeta.getNumero()) != null &&
tarjetasAsociadas.get(tarjeta.getNumero()).getCvc().equals(tarjeta.getCvc())){
if (tarjetasAsociadas.get(tarjeta.getNumero()) != null
&& tarjetasAsociadas.get(tarjeta.getNumero()).getCvc().equals(tarjeta.getCvc())) {
throw new TarjetaYaVinculada();
......
......@@ -12,6 +12,7 @@ import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
......@@ -36,7 +37,7 @@ public class Cuenta {
/**
* Titular de la cuenta
*/
@ManyToOne
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "titularCuenta")
private Cliente titular;
......@@ -86,68 +87,21 @@ public class Cuenta {
}
/**
* Ingresa en la cuenta el importe desde la tarjeta
*
* @param tarjeta Tarjeta origen
* @param importe Importe de la operación
* Modifica el saldo, lanza excepción si el saldo resultante es negativo.
* @param importe cambio
*/
public void ingreso(Tarjeta tarjeta, Float importe) {
movimientos.add(new Movimiento(TipoMovimiento.TMIngreso, importe, LocalDateTime.now(), tarjeta));
saldo += importe;
public void modificarSaldo(float importe){
}
/**
* Reintegra en la tarjeta el importe desde la cuenta
*
* @param tarjeta Tarjeta destino
* @param importe Importe de la operación
*/
public void reintegro(Tarjeta tarjeta, Float importe) {
if ((saldo - importe) < 0) {
if ((saldo + importe) < 0) {
throw new SaldoInsuficiente();
}
movimientos.add(new Movimiento(TipoMovimiento.TMReintegro, importe, LocalDateTime.now(), tarjeta));
saldo -= importe;
}
/**
* Ingresa en la cuenta el importe desde otra cuenta
*
* @param cuenta Cuenta origen
* @param importe Importe de la operación
*/
public void transferenciaDesde(Cuenta cuenta, Float importe) {
movimientos.add(new Movimiento(TipoMovimiento.TMTrasnferenciaRecibida, importe, LocalDateTime.now(), cuenta));
saldo += importe;
}
/**
* Retira de la cuenta el importe hacia otra cuenta
*
* @param cuenta Cuenta origen
* @param importe Importe de la operación
*/
public void transferenciaA(Cuenta cuenta, Float importe) {
if ((saldo - importe) < 0) {
throw new SaldoInsuficiente();
}
movimientos.add(new Movimiento(TipoMovimiento.TMTransferenciaEmitida, importe, LocalDateTime.now(), cuenta));
saldo -= importe;
}
/**
* Comprueba que el número de cuenta es válido, 12 dígitos numéricos, los
* dos últimos dígitos son la suma de los anteriores modulo 100.
*
......
......@@ -11,7 +11,6 @@ import es.ujaen.dae.ujacoin.excepciones.TarjetaNoValida;
import es.ujaen.dae.ujacoin.excepciones.TipoMovimientoInvalido;
import java.time.LocalDateTime;
import javax.persistence.Entity;
import javax.persistence.ForeignKey;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
......@@ -29,28 +28,33 @@ public class Movimiento {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int identificador;
/**
* Tipo de movimiento
*/
private TipoMovimiento tipo;
/**
* Importe del movimiento
*/
private float importe;
/**
* Fecha y hora del movimiento
*/
private LocalDateTime fechaHora;
/**
* Cuenta destino/origen
*/
@OneToOne
@OneToOne//Eager por defecto
@JoinColumn(name = "cuentaOD")
private Cuenta cuenta;
/**
* Tarjeta destino/origen
*/
@OneToOne
@OneToOne//Eager por defecto
@JoinColumn(name = "tarjetaOD")
private Tarjeta tarjeta;
......@@ -105,4 +109,12 @@ public class Movimiento {
return tarjeta;
}
public int getIdentificador() {
return identificador;
}
public LocalDateTime getFechaHora() {
return fechaHora;
}
}
......@@ -13,24 +13,33 @@ import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
/**Tarjetas de crédito asociadas a clientes
/**
* Tarjetas de crédito asociadas a clientes
*
* @author Adrian
*/
@Entity
public class Tarjeta{
public class Tarjeta {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int Identificador;
/** Número de la tarjeta*/
/**
* Número de la tarjeta
*/
private String numero;
/** Titular de la tarjeta*/
/**
* Titular de la tarjeta
*/
private String titular;
/** Código de seguridad de la tarjeta*/
/**
* Código de seguridad de la tarjeta
*/
private String cvc;
/** Fecha de caducidad de la tarjeta*/
/**
* Fecha de caducidad de la tarjeta
*/
private LocalDate fechaCaducidad;
public Tarjeta() {
......@@ -40,7 +49,9 @@ public class Tarjeta{
public Tarjeta(String numero, String titular, String cvc, LocalDate fechaCaducidad) {
if(!checkNumeroTarjeta(numero)) throw new TarjetaNoValida();
if (!checkNumeroTarjeta(numero)) {
throw new TarjetaNoValida();
}
this.numero = numero;
this.titular = titular;
......@@ -65,8 +76,14 @@ public class Tarjeta{
return fechaCaducidad;
}
public int getIdentificador() {
return Identificador;
}
/**
* Comprueba que el número de tarjeta es válido, 8 dígitos numéricos, la suma de los dígitos tiene que ser multiplo de 4.
* Comprueba que el número de tarjeta es válido, 8 dígitos numéricos, la
* suma de los dígitos tiene que ser multiplo de 4.
*
* @param numero Numero de tarjeta a comprobar
* @return True si el número es válido, false en otro caso
*/
......
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package es.ujaen.dae.ujacoin.excepciones;
/**
*
* @author Adrian
*/
public class DDBBCaida extends RuntimeException {
}
......@@ -9,6 +9,6 @@ package es.ujaen.dae.ujacoin.excepciones;
*
* @author UJA
*/
public class SaldoRestanteNoCero extends RuntimeException{
public class SaldoRestanteNoCero extends RuntimeException {
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package es.ujaen.dae.ujacoin.excepciones;
/**
*
* @author Adrian
*/
public class UsuarioYaExistente extends RuntimeException {
}
......@@ -12,40 +12,46 @@ import java.util.ArrayList;
/**
* Interfaz para las operaciones publicas del servidor
*
* @author Adrian
*/
public interface ServicioUjaBank {
/**
* Da de alta a un nuevo cliente y le asocia una cuenta
*
* @param cliente cliente a crear
*/
public void altaCliente(Cliente cliente);
/**
* Comprueba las credenciales del cliente
*
* @param dni Dni del cliente
* @param clave Contraseña
* @return True si las credenciales son válidas
* @return Cliente si las credenciales son válidas, Null si no
*/
public boolean loginCliente(String dni, String clave);
public Cliente loginCliente(String dni, String clave);
/**
* Lista las tarjetas asociadas a un cliente
* @param dni Dni del cliente
*
* @param cliente cliente
* @return Lista de las tarjetas
*/
public ArrayList<Tarjeta> listaTarjetas(String dni);
public ArrayList<Tarjeta> listaTarjetas(Cliente cliente);
/**
* Listas las cuentas asociadas a un cliente
* @param dni Dni del cliente
*
* @param cliente Dni del cliente
* @return Lista de cuentas
*/
public ArrayList<Cuenta> listaCuentas(String dni);
public ArrayList<Cuenta> listaCuentas(Cliente cliente);
/**
* Devuelve una cuenta localizando su número
*
* @param numero Identificador de la cuenta
* @return
*/
......@@ -53,6 +59,7 @@ public interface ServicioUjaBank {
/**
* Genera un ingreso en la cuenta del cliente desde una tarjeta
*
* @param cuenta Cuenta destino
* @param tarjeta Tarjeta origen
* @param importe Importe de la operación
......@@ -61,6 +68,7 @@ public interface ServicioUjaBank {
/**
* Genera un reintegro desde una cuenta del cliente hacia una tarjeta
*
* @param cuenta Cuenta origen
* @param tarjeta Tarjeta destino
* @param importe Importe de la operación
......@@ -69,6 +77,7 @@ public interface ServicioUjaBank {
/**
* Genera una transferencia entre cuentas
*
* @param cuentaOrigen Cuenta origen
* @param cuentaDestino Cuenta destino
* @param importe Importe de la operación
......@@ -77,6 +86,7 @@ public interface ServicioUjaBank {
/**
* Genera una cuenta nueva para el cliente y la devuelve
*
* @param cliente Cliente al que se le asignara la nueva cuenta
* @return la cuenta recién creada
*/
......@@ -84,23 +94,24 @@ public interface ServicioUjaBank {
/**
* Genera una tarjeta nueva para el cliente y la devuelve
*
* @param cliente Cliente al que se le asignara la nueva cuenta
* @param tarjeta tarjeta para vincular al clente
*/
public void añadirTarjeta(Cliente cliente, Tarjeta tarjeta);
/**
* Borra una cuenta con saldo = 0
*
* @param cuenta cuenta a borrar
*/
public void borrarCuenta(Cuenta cuenta);
/**
* Borra una tarjeta
* @param tarjeta tarjeta a borrar
*
* @param identificador tarjeta a borrar
*/
public void borrarTarjeta(Tarjeta tarjeta);
public void borrarTarjeta(int identificador);
}
......@@ -5,11 +5,12 @@
*/
package es.ujaen.dae.ujacoin.util;
/** Enum para el tipo de movimiento
/**
* Enum para el tipo de movimiento
*
* @author Adrian
*/
public enum TipoMovimiento{
public enum TipoMovimiento {
TMIngreso,
TMReintegro,
TMTransferenciaEmitida,
......
......@@ -14,19 +14,22 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Assumptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
/**
* Test de integración para el controlador del sistema Usa @SpringBootTest para
* poder hacer el test usando el bean dentro del contenedor IoC de Spring
*/
//@DataJpaTest
//@ContextConfiguration(classes = AppUjaBank.class)
@SpringBootTest(classes = {AppUjaBank.class})
public class ServicioUjaBankImplIntegrationTest {
@Autowired
ServicioUjaBankImpl ujaBank;
/**
* Test of altaCliente method, of class ServicioUjaBankImpl.
*/
......@@ -34,9 +37,9 @@ public class ServicioUjaBankImplIntegrationTest {
public void testAltaClienteYLoginCliente() {
ujaBank.altaCliente(new Cliente("12345678A", "Antonio Francisco Postigo", LocalDate.parse("1950-05-13"), "Calle Falsa 123", "654654654", "pureba@uja.es", "1234qwas"));
Assertions.assertFalse(ujaBank.loginCliente("12345678A", "1234qwasd"));
Assertions.assertFalse(ujaBank.loginCliente("123678A", "1234qwas"));
Assertions.assertTrue(ujaBank.loginCliente("12345678A", "1234qwas"));
Assertions.assertNull(ujaBank.loginCliente("12345678A", "1234qwasd"));
Assertions.assertNull(ujaBank.loginCliente("123678A", "1234qwas"));
Assertions.assertNotNull(ujaBank.loginCliente("12345678A", "1234qwas"));
}
......@@ -53,11 +56,13 @@ public class ServicioUjaBankImplIntegrationTest {
*/
@Test
public void testListaCuentas() {
ujaBank.altaCliente(new Cliente("12345678A", "Antonio Francisco Postigo", LocalDate.parse("1950-05-13"), "Calle Falsa 123", "654654654", "pureba@uja.es", "1234qwas"));
ujaBank.altaCliente(new Cliente("12345679A", "Antonio Francisco Postigo", LocalDate.parse("1950-05-13"), "Calle Falsa 123", "654654654", "pureba@uja.es", "1234qwas"));
Cliente cliente = ujaBank.loginCliente("12345679A", "1234qwas");
Assumptions.assumeTrue(ujaBank.loginCliente("12345678A", "1234qwas"));
Assumptions.assumeTrue(cliente != null);
Assertions.assertEquals(1, ujaBank.listaCuentas("12345678A").size());
Assertions.assertEquals(1, ujaBank.listaCuentas(cliente).size());
}
......@@ -67,10 +72,12 @@ public class ServicioUjaBankImplIntegrationTest {
@Test
public void testVerCuenta() {
ujaBank.altaCliente(new Cliente("12345678A", "Antonio Francisco Postigo", LocalDate.parse("1950-05-13"), "Calle Falsa 123", "654654654", "pureba@uja.es", "1234qwas"));
Assumptions.assumeTrue(ujaBank.loginCliente("12345678A", "1234qwas"));
ujaBank.altaCliente(new Cliente("22345678A", "Antonio Francisco Postigo", LocalDate.parse("1950-05-13"), "Calle Falsa 123", "654654654", "pureba@uja.es", "1234qwas"));
Cliente cliente = ujaBank.loginCliente("22345678A", "1234qwas");
Assumptions.assumeTrue(cliente != null);
ArrayList<Cuenta> cuentas = ujaBank.listaCuentas("12345678A");
ArrayList<Cuenta> cuentas = ujaBank.listaCuentas(cliente);
cuentas.forEach(cuenta -> {
Assertions.assertNotNull(ujaBank.verCuenta(cuenta.getNumero()));
......@@ -100,14 +107,17 @@ public class ServicioUjaBankImplIntegrationTest {
@Test
public void testTransferencia() {
ujaBank.altaCliente(new Cliente("12345678A", "Antonio Francisco Postigo", LocalDate.parse("1950-05-13"), "Calle Falsa 123", "654654654", "pureba@uja.es", "1234qwas"));
Assumptions.assumeTrue(ujaBank.loginCliente("12345678A", "1234qwas"));
ujaBank.altaCliente(new Cliente("12345687A", "Antonio Francisco Postigo", LocalDate.parse("1950-05-13"), "Calle Falsa 123", "654654654", "pureba@uja.es", "1234qwas"));
ujaBank.altaCliente(new Cliente("87654321B", "Antonio Francisco Postigo", LocalDate.parse("1950-02-01"), "Calle Falsa 124", "953010101", "pureba@uja.es", "qwas1234"));
Assumptions.assumeTrue(ujaBank.loginCliente("87654321B", "qwas1234"));
Cuenta cuentaA = ujaBank.listaCuentas("12345678A").get(0);
Cuenta cuentaB = ujaBank.listaCuentas("87654321B").get(0);
Cliente clienteA = ujaBank.loginCliente("12345687A", "1234qwas");
Cliente clienteB = ujaBank.loginCliente("87654321B", "qwas1234");
Assumptions.assumeTrue(clienteA != null);
Assumptions.assumeTrue(clienteB != null);
Cuenta cuentaA = ujaBank.listaCuentas(clienteA).get(0);
Cuenta cuentaB = ujaBank.listaCuentas(clienteB).get(0);
cuentaA.setSaldo(450);
......
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