Run Backend And Database Locally
Este runbook levanta PostgreSQL de infra, crea o valida finances_db, aplica migraciones y arranca el backend FastAPI.
1. Preparar Infra
Desde la raíz del monorepo:
Edita infra/.env y define valores locales para:
POSTGRES_USERPOSTGRES_PASSWORDPOSTGRES_PORTFINANCES_DB_USERFINANCES_DB_PASSWORD
No subas ese .env a Git.
2. Levantar PostgreSQL
docker network inspect timeliber-net >/dev/null 2>&1 || docker network create timeliber-net
docker compose up -d postgres
Verifica salud:
Si el volumen de Postgres es nuevo, infra/postgres/init/04_finances.sh crea:
- Role: valor de
FINANCES_DB_USER. - DB:
finances_db.
3. Si El Volumen Ya Existía
Los scripts en infra/postgres/init/ solo se ejecutan al inicializar un volumen nuevo. En un volumen existente, entra a psql y crea la DB manualmente con los valores de tu .env local:
SQL:
CREATE ROLE finances_user WITH LOGIN PASSWORD '<local-password>';
CREATE DATABASE finances_db OWNER finances_user;
Si el role o la DB ya existen, no los recrees. Valida con:
4. Configurar Backend
Edita apps/finances/backend/.env:
FINANCES_DATABASE_URLdebe apuntar afinances_db.FINANCES_JWT_SECRETdebe ser un secreto local fuerte.FINANCES_PUBLIC_URLdebe apuntar al frontend local cuando exista.FINANCES_EMAIL_FROMdebe tener un remitente local o transaccional válido.RESEND_API_KEYpuede quedar vacío fuera de producción.FINANCES_EXPOSE_INVITATION_TOKEN=truesolo para local/tests.
Ejemplo de secreto local:
5. Instalar Dependencias Y Migrar
El revision esperado actualmente es:
6. Arrancar API
URLs locales:
- Healthcheck:
http://localhost:8010/health - Swagger:
http://localhost:8010/docs - OpenAPI runtime:
http://localhost:8010/openapi.json
En producción, FINANCES_ENVIRONMENT=production desactiva /docs y /openapi.json.
7. Smoke Test Manual
Flujo funcional:
POST /api/v1/auth/registerPOST /api/v1/auth/login- Usar
Authorization: Bearer <access_token> GET /api/v1/auth/me- Crear cuenta, categoría, transacción y consultar dashboard.
Los detalles exactos de endpoints viven en la referencia generada: ../../backend/docs/03_REFERENCE/endpoints.md.
No existe usuario fijo de prueba por seguridad. Para probar localmente, registra
un perfil desde el frontend o llama POST /api/v1/auth/register; luego ingresa
con el mismo correo y contraseña. El tenant_slug se genera internamente en el
frontend y solo se pide en login si un mismo correo tiene varios perfiles.
8. Quality Gates
uv run ruff check app tests scripts
uv run mypy --explicit-package-bases app --strict
uv run bandit -c pyproject.toml -r app
uv run pip-audit --skip-editable
uv run pytest tests/unit tests/integration -q
La guía específica de gates está en ../../backend/docs/02_HOW_TO/quality-gates.md.