Commit ff9cfc94 by Antonio Rueda

Implementado servicio para consulta de movimientos con paginación

parent da2b3013
...@@ -11,14 +11,18 @@ import es.ujaen.dae.ujacoin.controladoresREST.DTO.DTOMovimiento; ...@@ -11,14 +11,18 @@ import es.ujaen.dae.ujacoin.controladoresREST.DTO.DTOMovimiento;
import es.ujaen.dae.ujacoin.controladoresREST.DTO.DTOTarjeta; import es.ujaen.dae.ujacoin.controladoresREST.DTO.DTOTarjeta;
import es.ujaen.dae.ujacoin.entidades.Cliente; import es.ujaen.dae.ujacoin.entidades.Cliente;
import es.ujaen.dae.ujacoin.entidades.Cuenta; import es.ujaen.dae.ujacoin.entidades.Cuenta;
import es.ujaen.dae.ujacoin.entidades.movimientos.Movimiento;
import es.ujaen.dae.ujacoin.excepciones.ClienteNoRegistrado; import es.ujaen.dae.ujacoin.excepciones.ClienteNoRegistrado;
import es.ujaen.dae.ujacoin.excepciones.ClienteYaRegistrado; import es.ujaen.dae.ujacoin.excepciones.ClienteYaRegistrado;
import es.ujaen.dae.ujacoin.excepciones.TarjetaYaRegistrada; import es.ujaen.dae.ujacoin.excepciones.TarjetaYaRegistrada;
import es.ujaen.dae.ujacoin.servicios.ServicioUjaCoin; import es.ujaen.dae.ujacoin.servicios.ServicioUjaCoin;
import java.time.LocalDateTime;
import java.time.format.DateTimeParseException;
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.validation.ConstraintViolationException; import javax.validation.ConstraintViolationException;
import javax.validation.constraints.Positive;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
...@@ -128,15 +132,15 @@ public class ControladorREST { ...@@ -128,15 +132,15 @@ public class ControladorREST {
} }
switch(movimiento.getTipo().toLowerCase()) { switch(movimiento.getTipo().toLowerCase()) {
case "ingreso": case DTOMovimiento.INGRESO:
servicios.ingreso(numCuenta, movimiento.getNumTarjeta(), movimiento.getImporte()); servicios.ingreso(numCuenta, movimiento.getNumTarjeta(), movimiento.getImporte());
break; break;
case "reintegro": case DTOMovimiento.REINTEGRO:
servicios.reintegro(numCuenta, movimiento.getNumTarjeta(), movimiento.getImporte()); servicios.reintegro(numCuenta, movimiento.getNumTarjeta(), movimiento.getImporte());
break; break;
case "transferencia": case DTOMovimiento.TRANSFERENCIA_EMITIDA:
servicios.transferencia(numCuenta, movimiento.getNumCuenta(), movimiento.getImporte()); servicios.transferencia(numCuenta, movimiento.getNumCuenta(), movimiento.getImporte());
break; break;
...@@ -144,6 +148,34 @@ public class ControladorREST { ...@@ -144,6 +148,34 @@ public class ControladorREST {
return ResponseEntity.badRequest().build(); return ResponseEntity.badRequest().build();
} }
return ResponseEntity.ok().build(); return ResponseEntity.status(HttpStatus.CREATED).build();
}
@GetMapping("/clientes/{dni}/cuentas/{numCuenta}/movimientos")
ResponseEntity<List<DTOMovimiento>> verMovimientos(
@PathVariable String dni,
@PathVariable String numCuenta,
@RequestParam(required=false) String desdeFecha,
@RequestParam(required=false) String hastaFecha,
@RequestParam(required=false, defaultValue="1") @Positive int pag,
@RequestParam(required=false, defaultValue="10") @Positive int num) {
LocalDateTime fechaInicial;
LocalDateTime fechaFinal;
try {
fechaInicial = desdeFecha != null ? LocalDateTime.parse(desdeFecha) : null;
fechaFinal = hastaFecha != null ? LocalDateTime.parse(hastaFecha) : null;
}
catch(DateTimeParseException e) {
return ResponseEntity.badRequest().build();
}
List<Movimiento> movimientos = servicios.listarMovimientosCuentaDesdeHasta(numCuenta, fechaInicial, fechaFinal);
return ResponseEntity.ok(movimientos.stream()
.skip((pag - 1) * num)
.limit(num)
.map(m -> new DTOMovimiento(m))
.collect(Collectors.toList()));
} }
} }
...@@ -20,10 +20,10 @@ import java.util.Optional; ...@@ -20,10 +20,10 @@ import java.util.Optional;
* @author ajrueda * @author ajrueda
*/ */
public class DTOMovimiento { public class DTOMovimiento {
static final String ETIQ_INGRESO = "ingreso"; public static final String INGRESO = "ingreso";
static final String ETIQ_REINTEGRO = "reintegro"; public static final String REINTEGRO = "reintegro";
static final String ETIQ_TRANSFERENCIA_EMITIDA = "transferenciaEmitida"; public static final String TRANSFERENCIA_EMITIDA = "transferenciaEmitida";
static final String ETIQ_TRANSFERENCIA_RECIBIDA = "transferenciaRecibida"; public static final String TRANSFERENCIA_RECIBIDA = "transferenciaRecibida";
/** Tipo del movimiento: ingreso, reintegro, transferencia */ /** Tipo del movimiento: ingreso, reintegro, transferencia */
String tipo; String tipo;
...@@ -41,23 +41,35 @@ public class DTOMovimiento { ...@@ -41,23 +41,35 @@ public class DTOMovimiento {
this.importe = importe; this.importe = importe;
} }
public static DTOMovimiento ingreso(String numTarjeta, int importe) {
return new DTOMovimiento(INGRESO, numTarjeta, null, importe);
}
public static DTOMovimiento reintegro(String numTarjeta, int importe) {
return new DTOMovimiento(REINTEGRO, numTarjeta, null, importe);
}
public static DTOMovimiento transferencia(String numCuentaDestino, int importe) {
return new DTOMovimiento(TRANSFERENCIA_EMITIDA, numCuentaDestino, null, importe);
}
public DTOMovimiento(Movimiento movimiento) { public DTOMovimiento(Movimiento movimiento) {
this.importe = movimiento.getImporte(); this.importe = movimiento.getImporte();
if (movimiento instanceof Ingreso) { if (movimiento instanceof Ingreso) {
this.tipo = ETIQ_INGRESO; this.tipo = INGRESO;
this.numTarjeta = ((Ingreso) movimiento).getTarjeta().getNum(); this.numTarjeta = ((Ingreso) movimiento).getTarjeta().getNum();
} }
else if (movimiento instanceof Reintegro) { else if (movimiento instanceof Reintegro) {
this.tipo = ETIQ_REINTEGRO; this.tipo = REINTEGRO;
this.numTarjeta = ((Reintegro) movimiento).getTarjeta().getNum(); this.numTarjeta = ((Reintegro) movimiento).getTarjeta().getNum();
} }
else if (movimiento instanceof TransferenciaEmitida) { else if (movimiento instanceof TransferenciaEmitida) {
this.tipo = ETIQ_TRANSFERENCIA_EMITIDA; this.tipo = TRANSFERENCIA_EMITIDA;
this.numCuenta = ((TransferenciaEmitida) movimiento).getCuentaDestino().getNum(); this.numCuenta = ((TransferenciaEmitida) movimiento).getCuentaDestino().getNum();
} }
else if (movimiento instanceof TransferenciaRecibida) { else if (movimiento instanceof TransferenciaRecibida) {
this.tipo = ETIQ_TRANSFERENCIA_RECIBIDA; this.tipo = TRANSFERENCIA_RECIBIDA;
this.numCuenta = ((TransferenciaRecibida) movimiento).getCuentaOrigen().getNum(); this.numCuenta = ((TransferenciaRecibida) movimiento).getCuentaOrigen().getNum();
} }
} }
...@@ -84,7 +96,7 @@ public class DTOMovimiento { ...@@ -84,7 +96,7 @@ public class DTOMovimiento {
} }
switch(tipo.toLowerCase()) { switch(tipo.toLowerCase()) {
case ETIQ_INGRESO: case INGRESO:
if (numTarjeta == null) { if (numTarjeta == null) {
return Optional.empty(); return Optional.empty();
} }
...@@ -94,7 +106,7 @@ public class DTOMovimiento { ...@@ -94,7 +106,7 @@ public class DTOMovimiento {
.findAny() .findAny()
.map(t -> new Ingreso(t, importe)); .map(t -> new Ingreso(t, importe));
case ETIQ_REINTEGRO: case REINTEGRO:
if (numTarjeta == null) { if (numTarjeta == null) {
return Optional.empty(); return Optional.empty();
} }
...@@ -104,7 +116,7 @@ public class DTOMovimiento { ...@@ -104,7 +116,7 @@ public class DTOMovimiento {
.findAny() .findAny()
.map(t -> new Reintegro(t, importe)); .map(t -> new Reintegro(t, importe));
case ETIQ_TRANSFERENCIA_EMITIDA: case TRANSFERENCIA_EMITIDA:
if (numCuenta == null) { if (numCuenta == null) {
return Optional.empty(); return Optional.empty();
} }
......
...@@ -197,7 +197,7 @@ public class ServicioUjaCoin { ...@@ -197,7 +197,7 @@ public class ServicioUjaCoin {
* @return la lista de los movimientos entre las fechas indicadas * @return la lista de los movimientos entre las fechas indicadas
*/ */
@Transactional @Transactional
List<Movimiento> listarMovimientosCuentaDesdeHasta(@NotBlank String numCuenta, @Past LocalDateTime fechaHoraDesde, @Past LocalDateTime fechaHoraHasta) { public List<Movimiento> listarMovimientosCuentaDesdeHasta(@NotBlank String numCuenta, @Past LocalDateTime fechaHoraDesde, @Past LocalDateTime fechaHoraHasta) {
Cuenta cuenta = repositorioCuentas.buscar(numCuenta) Cuenta cuenta = repositorioCuentas.buscar(numCuenta)
.orElseThrow(CuentaNoRegistrada::new); .orElseThrow(CuentaNoRegistrada::new);
......
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