# Backend: Staging y Produccion

## Objetivo

Dejar el backend con una sola configuracion de base de datos, migraciones reproducibles y una politica explicita para `local-fallback`.

## Variables clave

```bash
PORT=3000
APP_ENV=staging
ALLOW_LOCAL_FALLBACK=false
DATABASE_URL=postgresql://postgres:password@localhost:5433/dentaflow?schema=public
```

## Archivo base recomendado

- desarrollo local: `backend/.env`
- staging real: partir de `backend/.env.staging.example`

Regla practica:

- no reutilizar `backend/.env` de desarrollo para staging sin cambiar `APP_ENV` y `ALLOW_LOCAL_FALLBACK`;
- en staging debe quedar `APP_ENV=staging`;
- en staging debe quedar `ALLOW_LOCAL_FALLBACK=false`.

## Regla operativa

- `development`: puede usar `ALLOW_LOCAL_FALLBACK=true` para desarrollo y contingencias locales.
- `staging` y `production`: la recomendacion es `ALLOW_LOCAL_FALLBACK=false`.
- Si la base principal cae y `ALLOW_LOCAL_FALLBACK=false`, el backend respondera con error explicito en vez de seguir silenciosamente sobre JSON locales.

## Flujo recomendado

1. Levantar PostgreSQL:

```bash
docker compose up -d
```

2. Verificar credenciales y entorno en `backend/.env`.

3. Generar cliente Prisma:

```bash
npm run db:generate
```

4. Aplicar migraciones:

```bash
npm run db:migrate:deploy
```

5. Cargar seed si corresponde:

```bash
npm run db:seed
```

6. Levantar backend:

```bash
npm run dev
```

## Healthchecks

- Liveness: `GET /health`
- Readiness: `GET /health/ready`

Interpretacion:

- `/health` confirma que el proceso esta arriba y reporta estado de DB y politica de fallback.
- `/health/ready` devuelve `200` si la DB esta disponible o si el fallback sigue permitido.
- `/health/ready` devuelve `503` si la DB no responde y `ALLOW_LOCAL_FALLBACK=false`.

## Scripts utiles

```bash
npm run db:validate
npm run db:migrate:status
npm run db:migrate:dev
npm run db:migrate:deploy
```

## Pendiente para 100%

- mover mas stores operativos desde JSON locales a PostgreSQL;
- agregar CI/CD;
- backups y restore automatizados;
- monitoreo y alertas;
- tests API y E2E.
