Commit d3e90004 by Antonio Rueda

Entidades mapeadas

parent d2d6dce8
...@@ -7,22 +7,32 @@ package es.ujaen.dae.ujacoin.entidades; ...@@ -7,22 +7,32 @@ package es.ujaen.dae.ujacoin.entidades;
import es.ujaen.dae.ujacoin.util.ExprReg; import es.ujaen.dae.ujacoin.util.ExprReg;
import es.ujaen.dae.ujacoin.util.CodificadorMd5; import es.ujaen.dae.ujacoin.util.CodificadorMd5;
import java.io.Serializable;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Transient;
import javax.validation.constraints.Email; import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Past; import javax.validation.constraints.Past;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
/** /**
* Cliente del banco virtual UjaCoin * Cliente del banco virtual UjaCoin
* @author ajrueda * @author ajrueda
*/ */
public class Cliente { @Entity
public class Cliente implements Serializable {
/** DNI del cliente*/ /** DNI del cliente*/
@Id
@Size(min=9, max=9)
@Pattern(regexp=ExprReg.DNI) @Pattern(regexp=ExprReg.DNI)
String dni; String dni;
/** Nombre completo */ /** Nombre completo */
...@@ -36,6 +46,7 @@ public class Cliente { ...@@ -36,6 +46,7 @@ public class Cliente {
@NotBlank @NotBlank
String direccion; String direccion;
/** Teléfono */ /** Teléfono */
@Size(min=9, max=13)
@Pattern(regexp=ExprReg.TLF) @Pattern(regexp=ExprReg.TLF)
String tlf; String tlf;
...@@ -46,11 +57,18 @@ public class Cliente { ...@@ -46,11 +57,18 @@ public class Cliente {
String clave; String clave;
/** Tarjetas asociadas al cliente (no tiene por qué ser el titular */ /** Tarjetas asociadas al cliente (no tiene por qué ser el titular */
@OneToMany
@JoinColumn(name="cliente_dni")
List<Tarjeta> tarjetas; List<Tarjeta> tarjetas;
/** Cuentas asociadas al cliente */ /** Cuentas asociadas al cliente */
@OneToMany(mappedBy="titular")
List<Cuenta> cuentas; List<Cuenta> cuentas;
public Cliente() {
}
public Cliente(String dni, String nombre, LocalDate fNacimiento, String direccion, String tlf, String email, String clave) { public Cliente(String dni, String nombre, LocalDate fNacimiento, String direccion, String tlf, String email, String clave) {
this.dni = dni; this.dni = dni;
......
...@@ -13,17 +13,27 @@ import java.util.ArrayList; ...@@ -13,17 +13,27 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
import javax.validation.constraints.PositiveOrZero; import javax.validation.constraints.PositiveOrZero;
import javax.validation.constraints.Size;
/** /**
* Clase para representar cuentas de moneda virtual UjaCoin * Clase para representar cuentas de moneda virtual UjaCoin
* @author ajrueda * @author ajrueda
*/ */
@Entity
public class Cuenta { public class Cuenta {
/** Número de cuenta */ /** Número de cuenta */
@Id
@Size(min=10, max=10)
@Pattern(regexp=ExprReg.NUM_CUENTA) @Pattern(regexp=ExprReg.NUM_CUENTA)
String num; String num;
/** Saldo de la cuenta en Ujacoins */ /** Saldo de la cuenta en Ujacoins */
...@@ -31,9 +41,12 @@ public class Cuenta { ...@@ -31,9 +41,12 @@ public class Cuenta {
float saldo; float saldo;
/** Titular de la cuenta */ /** Titular de la cuenta */
@NotNull @NotNull
@ManyToOne
Cliente titular; Cliente titular;
/** Lista de movimientos */ /** Lista de movimientos */
@OneToMany
@JoinColumn(name="cuenta_num")
List<Movimiento> movimientos; List<Movimiento> movimientos;
public Cuenta(String num, Cliente titular) { public Cuenta(String num, Cliente titular) {
......
...@@ -6,17 +6,24 @@ ...@@ -6,17 +6,24 @@
package es.ujaen.dae.ujacoin.entidades; package es.ujaen.dae.ujacoin.entidades;
import es.ujaen.dae.ujacoin.util.ExprReg; import es.ujaen.dae.ujacoin.util.ExprReg;
import java.io.Serializable;
import java.time.LocalDate; import java.time.LocalDate;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.Future; import javax.validation.constraints.Future;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern; import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
/** /**
* Tarjeta para la realización de ingresos o reintegros en moneda real * Tarjeta para la realización de ingresos o reintegros en moneda real
* @author ajrueda * @author ajrueda
*/ */
public class Tarjeta { @Entity
public class Tarjeta implements Serializable {
/** Número de tarjeta */ /** Número de tarjeta */
@Id
@Size(min=16, max=16)
@Pattern(regexp=ExprReg.NUM_TARJETA) @Pattern(regexp=ExprReg.NUM_TARJETA)
String num; String num;
/** Titular de la tarjeta (puede ser diferente al cliente que la usa */ /** Titular de la tarjeta (puede ser diferente al cliente que la usa */
...@@ -26,9 +33,13 @@ public class Tarjeta { ...@@ -26,9 +33,13 @@ public class Tarjeta {
@Future @Future
LocalDate fechaCaducidad; LocalDate fechaCaducidad;
/** Código de seguridad (CVC) */ /** Código de seguridad (CVC) */
@Size(min=3, max=3)
@Pattern(regexp=ExprReg.CVC) @Pattern(regexp=ExprReg.CVC)
String cvc; String cvc;
public Tarjeta() {
}
public Tarjeta(String num, String titular, LocalDate fechaCaducidad, String cvc) { public Tarjeta(String num, String titular, LocalDate fechaCaducidad, String cvc) {
this.num = num; this.num = num;
this.titular = titular; this.titular = titular;
......
...@@ -6,16 +6,23 @@ ...@@ -6,16 +6,23 @@
package es.ujaen.dae.ujacoin.entidades.movimientos; package es.ujaen.dae.ujacoin.entidades.movimientos;
import es.ujaen.dae.ujacoin.entidades.Tarjeta; import es.ujaen.dae.ujacoin.entidades.Tarjeta;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
/** /**
* Ingreso de dinero en cuenta desde una tarjeta * Ingreso de dinero en cuenta desde una tarjeta
* @author ajrueda * @author ajrueda
*/ */
@Entity
public class Ingreso extends Movimiento { public class Ingreso extends Movimiento {
@NotNull @NotNull
@ManyToOne
Tarjeta tarjeta; Tarjeta tarjeta;
public Ingreso() {
}
/** /**
* Constructor del igreso * Constructor del igreso
* @param tarjeta la tarjeta desde donde se transfiere el dinero * @param tarjeta la tarjeta desde donde se transfiere el dinero
......
...@@ -5,7 +5,13 @@ ...@@ -5,7 +5,13 @@
*/ */
package es.ujaen.dae.ujacoin.entidades.movimientos; package es.ujaen.dae.ujacoin.entidades.movimientos;
import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.validation.constraints.PastOrPresent; import javax.validation.constraints.PastOrPresent;
import javax.validation.constraints.Positive; import javax.validation.constraints.Positive;
...@@ -13,7 +19,13 @@ import javax.validation.constraints.Positive; ...@@ -13,7 +19,13 @@ import javax.validation.constraints.Positive;
* Clase que representa un movimiento en cuenta * Clase que representa un movimiento en cuenta
* @author ajrueda * @author ajrueda
*/ */
public abstract class Movimiento { @Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Movimiento implements Serializable {
@Id
@GeneratedValue
int id;
/** Fecha del movimiento */ /** Fecha del movimiento */
@PastOrPresent @PastOrPresent
LocalDateTime fechaHora; LocalDateTime fechaHora;
...@@ -21,6 +33,9 @@ public abstract class Movimiento { ...@@ -21,6 +33,9 @@ public abstract class Movimiento {
@Positive @Positive
float importe; float importe;
public Movimiento() {
}
/** /**
* Constructor del movimiento * Constructor del movimiento
* @param importe el importe asociado al movimiento * @param importe el importe asociado al movimiento
......
...@@ -6,15 +6,22 @@ ...@@ -6,15 +6,22 @@
package es.ujaen.dae.ujacoin.entidades.movimientos; package es.ujaen.dae.ujacoin.entidades.movimientos;
import es.ujaen.dae.ujacoin.entidades.Tarjeta; import es.ujaen.dae.ujacoin.entidades.Tarjeta;
import javax.persistence.Entity;
import javax.persistence.ManyToOne;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
/** /**
* Reintegro desde la cuenta a una tarjeta destino * Reintegro desde la cuenta a una tarjeta destino
* @author ajrueda * @author ajrueda
*/ */
@Entity
public class Reintegro extends Movimiento { public class Reintegro extends Movimiento {
@NotNull @NotNull
@ManyToOne
Tarjeta tarjeta; Tarjeta tarjeta;
public Reintegro() {
}
/** /**
* Constructor del reintegro * Constructor del reintegro
......
...@@ -6,15 +6,25 @@ ...@@ -6,15 +6,25 @@
package es.ujaen.dae.ujacoin.entidades.movimientos; package es.ujaen.dae.ujacoin.entidades.movimientos;
import es.ujaen.dae.ujacoin.entidades.Cuenta; import es.ujaen.dae.ujacoin.entidades.Cuenta;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
/** /**
* Transferencia emitida a otra cuenta * Transferencia emitida a otra cuenta
* @author ajrueda * @author ajrueda
*/ */
@Entity
public class TransferenciaEmitida extends Movimiento { public class TransferenciaEmitida extends Movimiento {
@NotNull @NotNull
@ManyToOne
// Columna renombrada para que no colisione con la cuenta del movimiento
@JoinColumn(name="cuenta_dest_num")
Cuenta cuenta; Cuenta cuenta;
public TransferenciaEmitida() {
}
public TransferenciaEmitida(Cuenta cuenta, float importe) { public TransferenciaEmitida(Cuenta cuenta, float importe) {
super(-importe); super(-importe);
......
...@@ -6,15 +6,25 @@ ...@@ -6,15 +6,25 @@
package es.ujaen.dae.ujacoin.entidades.movimientos; package es.ujaen.dae.ujacoin.entidades.movimientos;
import es.ujaen.dae.ujacoin.entidades.Cuenta; import es.ujaen.dae.ujacoin.entidades.Cuenta;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
/** /**
* Transferencia recibida de otra cuenta * Transferencia recibida de otra cuenta
* @author ajrueda * @author ajrueda
*/ */
@Entity
public class TransferenciaRecibida extends Movimiento { public class TransferenciaRecibida extends Movimiento {
@NotNull @NotNull
@ManyToOne
// Columna renombrada para que no coincida con la cuenta del movimiento
@JoinColumn(name="cuenta_orig_num")
Cuenta cuenta; Cuenta cuenta;
public TransferenciaRecibida() {
}
public TransferenciaRecibida(Cuenta cuenta, float importe) { public TransferenciaRecibida(Cuenta cuenta, float importe) {
super(importe); super(importe);
......
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