Aplicación fullstack con Angular en el frontend y Spring Boot en el backend para la gestión de clientes, cuentas, movimientos y reporte de estado de cuenta.
- Docker
- Node.js 22+
- Java 21
├── BaseDatos.sql
├── frontend/
├── backend/
└── docker-compose.yml
- El archivo requerido por la consigna es
BaseDatos.sql. - En producción el backend usa
spring.jpa.hibernate.ddl-auto=validate. - Eso significa que Spring Boot valida el esquema, pero no crea tablas.
- El esquema debe existir previamente y se inicializa desde
BaseDatos.sql.
En desarrollo el backend usa el perfil dev y levanta una base H2 en memoria.
Linux/macOS:
cd backend
SPRING_PROFILES_ACTIVE=dev ./gradlew bootRunWindows:
cd backend
$env:SPRING_PROFILES_ACTIVE="dev"
.\gradlew.bat bootRuncd frontend
npm install
npm start| Servicio | URL |
|---|---|
| Frontend | http://localhost:4200 |
| Backend | http://localhost:8080 |
| API vía proxy Angular | http://localhost:4200/api |
En el ambiente de Postman define la variable baseUrl.
Puedes usar cualquiera de estas opciones:
http://localhost:8080cuando quieras consumir el backend directamentehttp://localhost:4200/apicuando tengas el frontend levantado y quieras pasar por el proxy de Angular
En producción la aplicación se despliega con Docker Compose:
postgrescomo base de datos relacionalbackendcon Spring Boot en perfilprodfrontendcon Angular compilado y servido por Nginx
Para un arranque limpio:
docker compose down -v
docker compose up --build -ddocker compose down -velimina el volumen de PostgreSQL.- En el siguiente arranque, PostgreSQL ejecuta
BaseDatos.sqlautomáticamente. - Si no eliminas el volumen, el script de inicialización no se vuelve a ejecutar.
| Servicio | URL |
|---|---|
| Frontend | http://localhost:4800 |
| API visible al usuario | http://localhost:4800/api |
| Backend | interno dentro de Docker |
En el ambiente de Postman configura la variable:
baseUrl = http://localhost:4800/api
Prueba básica del backend:
GET http://localhost:8080/clientes
Si usas el frontend con proxy:
GET http://localhost:4200/api/clientes
Prueba básica de la API publicada:
GET http://localhost:4800/api/clientes
Reporte:
GET http://localhost:4800/api/reportes?clienteId=1&fechaDesde=2026-04-01&fechaHasta=2026-04-30
| Recurso | Método | URL |
|---|---|---|
| Clientes | GET, POST |
/clientes |
| Cliente por id | GET, PUT, PATCH, DELETE |
/clientes/{clienteId} |
| Cuentas | GET, POST |
/cuentas |
| Cuenta por id | GET, PUT, PATCH, DELETE |
/cuentas/{cuentaId} |
| Movimientos | GET, POST |
/movimientos |
| Movimiento por id | GET, PUT, PATCH, DELETE |
/movimientos/{movimientoId} |
| Reporte | GET |
/reportes?clienteId={id}&fechaDesde=YYYY-MM-DD&fechaHasta=YYYY-MM-DD |
POST /clientes
{
"nombre": "Jose Lema",
"genero": "MASCULINO",
"edad": 30,
"identificacion": "1234567890",
"direccion": "Otavalo sn y principal",
"telefono": "098254785",
"contrasena": "1234",
"estado": true
}POST /cuentas
{
"clienteId": 1,
"numeroCuenta": "478758",
"tipoCuenta": "AHORROS",
"saldoInicial": 2000.00,
"estado": true
}POST /movimientos
{
"cuentaId": 1,
"fecha": "2026-04-13T10:00:00",
"tipoMovimiento": "DEBITO",
"valor": -575.00
}Backend:
cd backend
./gradlew testEn Windows:
cd backend
.\gradlew.bat testFrontend:
cd frontend
npm test