Skip to content

Releases: Acedpol/expense-api

v1.1.0 — CORS support for frontend integration

Choose a tag to compare

@Acedpol Acedpol released this 17 Aug 11:30

Añade CORS para que el proyecto de frontend (repo independiente) pueda consumir esta API desde el navegador.

Cambios

  • CORSMiddleware configurado, orígenes permitidos vía CORS_ORIGINS en .env (lista separada por comas)
  • Por defecto habilita http://localhost:5173 (Vite) y http://localhost:3000 (alternativa común)
  • allow_credentials=True para que el header Authorization: Bearer <jwt> viaje correctamente en peticiones cross-origin
  • 3 tests nuevos: origen permitido, origen no permitido, y una petición preflight OPTIONS real
  • Verificado también con curl contra un servidor real (preflight + GET desde origen autorizado y no autorizado)

Con esto, el backend queda cerrado para servir de base al frontend

Ver v1.0.0 para el resto de funcionalidad base.

v1.0.0 — Backend feature-complete

Choose a tag to compare

@Acedpol Acedpol released this 16 Aug 16:54

Primer release estable del backend. API REST de gestión de gastos personales, lista para servir de base al frontend (proyecto 2).

Funcionalidad

  • Auth con JWT (registro + login, OAuth2 password flow)
  • CRUD completo de Categories y Expenses, con paginación y aislamiento estricto por usuario
  • Migraciones de esquema versionadas con Alembic (sin create_all en producción)
  • Rate limiting en /auth/login (5 intentos/min por IP)
  • Logging estructurado en JSON por cada petición
  • Manejo de errores consistente ({"error": ...}) en toda la API

Calidad

  • 28 tests (integración + unitarios con mocks), 95.86% de cobertura
  • Gate de cobertura en CI (falla por debajo del 90%)
  • Lint y formato con ruff, hooks de pre-commit
  • CI en GitHub Actions en cada push/PR

Infraestructura

  • Docker + docker-compose (Postgres real)
  • SQLite para desarrollo local rápido sin Docker

Pendiente (fuera de alcance de este release)

  • Deploy a un hosting real — requiere cuenta propia
  • Endpoint de categorización automática vía LLM (stretch) — requiere API key propia

Documentación completa: ver README.md