Skip to content

Hugo-VC/expense-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gestor de Gastos Personales

Aplicación full‑stack para registrar ingresos y gastos, consultar tu histórico, ver resúmenes y estadísticas (gráficas), y exportar informes a Excel/PDF. Incluye autenticación con JWT, modo claro/oscuro y gestión de perfil (editar datos, reset de transacciones y eliminación de cuenta).

Funcionalidades

  • Registro / login (JWT).
  • Mis transacciones
    • Crear, editar y eliminar transacciones.
    • Filtro y ordenación.
    • Exportar listado a Excel y PDF.
  • Dashboard
    • Resumen financiero (ingresos, gastos, balance).
    • Gráficas (categorías / evolución temporal).
    • Exportar informe a Excel y PDF.
  • Perfil
    • Cambiar tema claro/oscuro.
    • Editar nombre, email y contraseña.
    • Borrar todas las transacciones del usuario.
    • Eliminar cuenta (borra usuario + transacciones).

Tecnologías

  • Frontend: Angular (standalone components), Angular Material, Bootstrap, Chart.js
  • Backend: Spring Boot 3 (Java 17), Spring Security, Spring Data JPA
  • BBDD: PostgreSQL
  • Auth: JWT (header Authorization: Bearer <token>)

Estructura del proyecto

  • frontend/: aplicación Angular
  • backend/: API REST con Spring Boot

Requisitos

  • Node.js (recomendado LTS)
  • Angular CLI (opcional, se puede usar npx)
  • Java 17
  • Maven
  • PostgreSQL

Variables de entorno (backend / Docker)

El backend lee credenciales y el secreto JWT desde variables de entorno (ver backend/src/main/resources/application.properties y backend/docker-compose.yml).

  1. Copia el ejemplo y créalo como .env solo en tu máquina:
cd backend
cp .env.example .env
  1. Edita backend/.env y sustituye los valores REPLACE_* por datos reales.
  2. Genera un JWT_SECRET_KEY nuevo (Base64, suficiente longitud), por ejemplo:
openssl rand -base64 48

Importante: si alguna vez subiste un .env real al repositorio, rota todas esas credenciales y el secreto JWT antes de hacer el repo público. Si ya se hizo git push, considera también limpiar el historial (p. ej. git filter-repo) o asumir que esos secretos están comprometidos.

Comprobar que .env está ignorado (antes del primer push)

Desde la raíz del monorepo:

git check-ignore -v backend/.env

Debe mostrar una regla del .gitignore. Si no aparece nada, no hagas push hasta corregir la configuración.

Configuración de base de datos (referencia)

En application.properties se usan placeholders ${SPRING_DATASOURCE_*}; los valores reales van en .env o en el entorno del sistema.

No existe application.yml con secretos en el código versionado; evita crear application-local.properties con contraseñas y subirlo (está ignorado en .gitignore).

API del frontend (desarrollo)

Las URLs del backend están definidas como http://localhost:8080/... en los servicios de Angular (auth, expense, user). No hay src/environments/environment*.ts en este proyecto: es una configuración típica de demo local. Para despliegues reales conviene externalizar la URL base (build-time o proxy) sin hardcodear el host de producción en el código.

Docker Compose (PostgreSQL + backend + Adminer)

Desde backend/ (con backend/.env ya creado a partir de .env.example):

docker compose up --build
  • API: http://localhost:8080
  • Adminer (solo desarrollo): http://localhost:8081

Ajusta SPRING_DATASOURCE_URL en .env a jdbc:postgresql://postgres:5432/... cuando el backend corre dentro de Docker, o a localhost si ejecutas Spring solo en el host.

Repositorio privado → público

Este proyecto está pensado para poder empezar como repositorio privado y pasar a público cuando el historial esté limpio (sin .env ni artefactos) y las credenciales sean solo locales o de CI secretas. Revisa SECURITY.md.

Cómo ejecutar en local

1) Backend (Spring Boot)

Desde backend/:

mvn spring-boot:run

La API queda (por defecto) en http://localhost:8080.

2) Frontend (Angular)

Desde frontend/:

npm install
npm start

La app queda en http://localhost:4200.

Endpoints principales (API)

  • Auth
    • POST /api/auth/register (name, email, password)
    • POST /api/auth/login (email, password) → devuelve { token }
  • Transacciones
    • GET /api/expenses/me
    • POST /api/expenses
    • PUT /api/expenses/{id}
    • DELETE /api/expenses/{id}
    • POST /api/expenses/reset (borra todas las transacciones del usuario autenticado)
  • Usuario
    • GET /api/users/me
    • PUT /api/users/me
    • DELETE /api/users/me (elimina cuenta + transacciones)

Tema oscuro

El tema se guarda en localStorage (clave app-theme) y se aplica vía data-bs-theme en el <html>.

Contraseñas (MD5)

Las contraseñas se guardan en la base de datos como MD5 (hex) al:

  • registrar un usuario
  • cambiar la contraseña desde el perfil

Importante: MD5 no es recomendable para contraseñas en producción. Para un entorno real se recomienda bcrypt/argon2 con salt y coste configurable.

Scripts útiles

Frontend:

npm start        # ng serve
npm run build    # build

Backend:

mvn test
mvn -DskipTests package

Licencia

Proyecto educativo / personal.

About

Gestor de gastos full-stack (Angular, Spring Boot, PostgreSQL): transacciones, dashboard con gráficas, exportación Excel/PDF.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors