Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-crypto</artifactId>
</dependency>
</dependencies>

<build>
Expand Down
63 changes: 63 additions & 0 deletions src/main/java/es/nextdigital/demo/controller/CajeroController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package es.nextdigital.demo.controller;

import es.nextdigital.demo.service.CajeroService;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/cajero")
public class CajeroController {

private final CajeroService cajeroService;

public CajeroController(CajeroService cajeroService) {
this.cajeroService = cajeroService;
}

@PostMapping("/retirar")
public String retirar(
@RequestParam Long tarjetaId,
@RequestParam Double cantidad,
@RequestParam(defaultValue = "true") boolean mismoBanco
) {
cajeroService.retirar(tarjetaId, cantidad, mismoBanco);
return "Retirada realizada correctamente";
}

@PostMapping("/ingresar")
public String ingresar(
@RequestParam Long tarjetaId,
@RequestParam Double cantidad,
@RequestParam(defaultValue = "true") boolean mismoBanco
) {
cajeroService.ingresar(tarjetaId, cantidad, mismoBanco);
return "Ingreso realizado correctamente";
}

@PostMapping("/transferir")
public String transferir(
@RequestParam Long tarjetaId,
@RequestParam String ibanDestino,
@RequestParam Double cantidad,
@RequestParam(defaultValue = "true") boolean mismoBancoDestino
) {
cajeroService.transferir(tarjetaId, ibanDestino, cantidad, mismoBancoDestino);
return "Transferencia realizada correctamente";
}

@PostMapping("/activar-tarjeta/{id}")
public String activarTarjeta(@PathVariable Long id) {
cajeroService.activarTarjeta(id);
return "Tarjeta activada correctamente";
}

@PostMapping("/cambiar-pin")
public String cambiarPin(
@RequestParam Long tarjetaId,
@RequestParam(required = false) String pinActual,
@RequestParam String pinNuevo
) {
cajeroService.cambiarPin(tarjetaId, pinActual, pinNuevo);
return "PIN cambiado correctamente";
}

}
23 changes: 23 additions & 0 deletions src/main/java/es/nextdigital/demo/controller/CuentaController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package es.nextdigital.demo.controller;

import es.nextdigital.demo.model.Movimiento;
import es.nextdigital.demo.service.CuentaService;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/cuentas")
public class CuentaController {

private final CuentaService cuentaService;

public CuentaController(CuentaService cuentaService) {
this.cuentaService = cuentaService;
}

@GetMapping("/{id}/movimientos")
public List<Movimiento> obtenerMovimientos(@PathVariable Long id) {
return cuentaService.obtenerMovimientos(id);
}
}
32 changes: 32 additions & 0 deletions src/main/java/es/nextdigital/demo/model/Cuenta.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package es.nextdigital.demo.model;

import java.util.ArrayList;
import java.util.List;

public class Cuenta {

private Long id;
private String iban;
private Double saldo;
private List<Movimiento> movimientos = new ArrayList<>();

public Cuenta(Long id, String iban, Double saldo) {
this.id = id;
this.iban = iban;
this.saldo = saldo;
}

public Cuenta() {}

public Long getId() { return id; }
public void setId(Long id) { this.id = id; }

public String getIban() { return iban; }
public void setIban(String iban) { this.iban = iban; }

public Double getSaldo() { return saldo; }
public void setSaldo(Double saldo) { this.saldo = saldo; }

public List<Movimiento> getMovimientos() { return movimientos; }
public void setMovimientos(List<Movimiento> movimientos) { this.movimientos = movimientos; }
}
43 changes: 43 additions & 0 deletions src/main/java/es/nextdigital/demo/model/Movimiento.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package es.nextdigital.demo.model;

import java.time.LocalDateTime;

public class Movimiento {

private Long id;
private LocalDateTime fecha;
private TipoMovimiento tipo;
private Double cantidad;
private String descripcion;
private Long cuentaId;

public Movimiento(Long id, LocalDateTime fecha, TipoMovimiento tipo, Double cantidad, String descripcion, Long cuentaId) {
this.id = id;
this.fecha = fecha;
this.tipo = tipo;
this.cantidad = cantidad;
this.descripcion = descripcion;
this.cuentaId = cuentaId;
}

public Movimiento() {}

// Getters y setters
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }

public LocalDateTime getFecha() { return fecha; }
public void setFecha(LocalDateTime fecha) { this.fecha = fecha; }

public TipoMovimiento getTipo() { return tipo; }
public void setTipo(TipoMovimiento tipo) { this.tipo = tipo; }

public Double getCantidad() { return cantidad; }
public void setCantidad(Double cantidad) { this.cantidad = cantidad; }

public String getDescripcion() { return descripcion; }
public void setDescripcion(String descripcion) { this.descripcion = descripcion; }

public Long getCuentaId() { return cuentaId; }
public void setCuentaId(Long cuentaId) { this.cuentaId = cuentaId; }
}
63 changes: 63 additions & 0 deletions src/main/java/es/nextdigital/demo/model/Tarjeta.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package es.nextdigital.demo.model;

public class Tarjeta {

private Long id;
private String numero;
private boolean activada;
private TipoTarjeta tipo;
private Double limiteDiario;
private Double creditoMaximo;
private Double creditoDisponible;
private Long cuentaId;
private Double retiradoHoy = 0.0;
private String pinHash;
private boolean pinPendienteCambio = true;

public Tarjeta(Long id, String numero, TipoTarjeta tipo, Double limiteDiario,
Double creditoMaximo, Long cuentaId) {
this.id = id;
this.numero = numero;
this.activada = false;
this.tipo = tipo;
this.limiteDiario = limiteDiario;
this.creditoMaximo = creditoMaximo;
this.creditoDisponible = creditoMaximo;
this.cuentaId = cuentaId;
}

public Tarjeta() {}

public Long getId() { return id; }
public void setId(Long id) { this.id = id; }

public String getNumero() { return numero; }
public void setNumero(String numero) { this.numero = numero; }

public boolean getActivada() { return activada; }
public void setActivada(boolean activada) { this.activada = activada; }

public TipoTarjeta getTipo() { return tipo; }
public void setTipo(TipoTarjeta tipo) { this.tipo = tipo; }

public Double getLimiteDiario() { return limiteDiario; }
public void setLimiteDiario(Double limiteDiario) { this.limiteDiario = limiteDiario; }

public Double getCreditoMaximo() { return creditoMaximo; }
public void setCreditoMaximo(Double creditoMaximo) { this.creditoMaximo = creditoMaximo; }

public Double getCreditoDisponible() { return creditoDisponible; }
public void setCreditoDisponible(Double creditoDisponible) { this.creditoDisponible = creditoDisponible; }

public Long getCuentaId() { return cuentaId; }
public void setCuentaId(Long cuentaId) { this.cuentaId = cuentaId; }

public Double getRetiradoHoy() { return retiradoHoy; }
public void setRetiradoHoy(Double retiradoHoy) { this.retiradoHoy = retiradoHoy; }

public String getPinHash() { return pinHash; }
public void setPinHash(String pinHash) { this.pinHash = pinHash; }

public boolean getPinPendienteCambio() { return pinPendienteCambio; }
public void setPinPendienteCambio(boolean pinPendienteCambio) { this.pinPendienteCambio = pinPendienteCambio; }
}
9 changes: 9 additions & 0 deletions src/main/java/es/nextdigital/demo/model/TipoMovimiento .java
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package es.nextdigital.demo.model;

public enum TipoMovimiento {
INGRESO,
RETIRADA,
COMISION,
TRANSFERENCIA_ENTRANTE,
TRANSFERENCIA_SALIENTE
}
6 changes: 6 additions & 0 deletions src/main/java/es/nextdigital/demo/model/TipoTarjeta.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package es.nextdigital.demo.model;

public enum TipoTarjeta {
DEBITO,
CREDITO
}
26 changes: 26 additions & 0 deletions src/main/java/es/nextdigital/demo/repository/CuentaRepository.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package es.nextdigital.demo.repository;

import es.nextdigital.demo.model.Cuenta;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.Map;

@Repository
public class CuentaRepository {

private final Map<Long, Cuenta> cuentas = new HashMap<>();

public Cuenta findById(Long id) {
return cuentas.get(id);
}

public void save(Cuenta cuenta) {
cuentas.put(cuenta.getId(), cuenta);
}

public Collection<Cuenta> findAll() {
return cuentas.values();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package es.nextdigital.demo.repository;

import es.nextdigital.demo.model.Tarjeta;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.Map;

@Repository
public class TarjetaRepository {

private final Map<Long, Tarjeta> tarjetas = new HashMap<>();

public Tarjeta findById(Long id) {
return tarjetas.get(id);
}

public void save(Tarjeta t) {
tarjetas.put(t.getId(), t);
}
}
Loading