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;
import es.ujaen.dae.ujacoin.controladoresREST.DTO.DTOTarjeta;
import es.ujaen.dae.ujacoin.entidades.Cliente;
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.ClienteYaRegistrado;
import es.ujaen.dae.ujacoin.excepciones.TarjetaYaRegistrada;
import es.ujaen.dae.ujacoin.servicios.ServicioUjaCoin;
import java.time.LocalDateTime;
import java.time.format.DateTimeParseException;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;
import javax.validation.ConstraintViolationException;
import javax.validation.constraints.Positive;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
......@@ -128,15 +132,15 @@ public class ControladorREST {
}
switch(movimiento.getTipo().toLowerCase()) {
case "ingreso":
case DTOMovimiento.INGRESO:
servicios.ingreso(numCuenta, movimiento.getNumTarjeta(), movimiento.getImporte());
break;
case "reintegro":
case DTOMovimiento.REINTEGRO:
servicios.reintegro(numCuenta, movimiento.getNumTarjeta(), movimiento.getImporte());
break;
case "transferencia":
case DTOMovimiento.TRANSFERENCIA_EMITIDA:
servicios.transferencia(numCuenta, movimiento.getNumCuenta(), movimiento.getImporte());
break;
......@@ -144,6 +148,34 @@ public class ControladorREST {
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;
* @author ajrueda
*/
public class DTOMovimiento {
static final String ETIQ_INGRESO = "ingreso";
static final String ETIQ_REINTEGRO = "reintegro";
static final String ETIQ_TRANSFERENCIA_EMITIDA = "transferenciaEmitida";
static final String ETIQ_TRANSFERENCIA_RECIBIDA = "transferenciaRecibida";
public static final String INGRESO = "ingreso";
public static final String REINTEGRO = "reintegro";
public static final String TRANSFERENCIA_EMITIDA = "transferenciaEmitida";
public static final String TRANSFERENCIA_RECIBIDA = "transferenciaRecibida";
/** Tipo del movimiento: ingreso, reintegro, transferencia */
String tipo;
......@@ -41,23 +41,35 @@ public class DTOMovimiento {
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) {
this.importe = movimiento.getImporte();
if (movimiento instanceof Ingreso) {
this.tipo = ETIQ_INGRESO;
this.tipo = INGRESO;
this.numTarjeta = ((Ingreso) movimiento).getTarjeta().getNum();
}
else if (movimiento instanceof Reintegro) {
this.tipo = ETIQ_REINTEGRO;
this.tipo = REINTEGRO;
this.numTarjeta = ((Reintegro) movimiento).getTarjeta().getNum();
}
else if (movimiento instanceof TransferenciaEmitida) {
this.tipo = ETIQ_TRANSFERENCIA_EMITIDA;
this.tipo = TRANSFERENCIA_EMITIDA;
this.numCuenta = ((TransferenciaEmitida) movimiento).getCuentaDestino().getNum();
}
else if (movimiento instanceof TransferenciaRecibida) {
this.tipo = ETIQ_TRANSFERENCIA_RECIBIDA;
this.tipo = TRANSFERENCIA_RECIBIDA;
this.numCuenta = ((TransferenciaRecibida) movimiento).getCuentaOrigen().getNum();
}
}
......@@ -84,7 +96,7 @@ public class DTOMovimiento {
}
switch(tipo.toLowerCase()) {
case ETIQ_INGRESO:
case INGRESO:
if (numTarjeta == null) {
return Optional.empty();
}
......@@ -94,7 +106,7 @@ public class DTOMovimiento {
.findAny()
.map(t -> new Ingreso(t, importe));
case ETIQ_REINTEGRO:
case REINTEGRO:
if (numTarjeta == null) {
return Optional.empty();
}
......@@ -104,7 +116,7 @@ public class DTOMovimiento {
.findAny()
.map(t -> new Reintegro(t, importe));
case ETIQ_TRANSFERENCIA_EMITIDA:
case TRANSFERENCIA_EMITIDA:
if (numCuenta == null) {
return Optional.empty();
}
......
......@@ -197,7 +197,7 @@ public class ServicioUjaCoin {
* @return la lista de los movimientos entre las fechas indicadas
*/
@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)
.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