Base de datos
Visión general de la capa de datos de ixiclinic — Drizzle ORM sobre PostgreSQL, los dos entornos (desarrollo y producción) y el mapa de subpáginas.
La persistencia de ixiclinic vive enteramente en apps/api. Es la única pieza del
monorepo con acceso a la base de datos: todas las apps cliente (admin, console, portal,
lab-site, landing, mobile) hablan con el API REST, nunca directamente con PostgreSQL.
Stack
- PostgreSQL como motor relacional.
- Drizzle ORM (
drizzle-orm) para el esquema y las consultas, tipado en TypeScript. - Drizzle Kit (
drizzle-kit) para generar y aplicar migraciones. - postgres-js (
postgres) como driver de bajo nivel.
El esquema se declara en apps/api/src/db/schema/ (un archivo por dominio) y la instancia
de conexión se exporta desde apps/api/src/db/index.ts como db.
Dos entornos
ixiclinic trabaja con dos bases de datos distintas que deben mantenerse en paralelo:
| Entorno | Motor | Dónde |
|---|---|---|
| Desarrollo | Neon Serverless PostgreSQL | Nube (Neon), por desarrollador |
| Producción | PostgreSQL 17 en Docker | El VPS de despliegue |
Nota: Todo cambio de esquema debe aplicarse a ambas bases. En desarrollo se aplica con los comandos
db:*; en producción la migración se ejecuta automáticamente al arrancar el contenedor del API. Ver Neon vs Docker.
En esta sección
- Drizzle ORM — configuración, los comandos
db:*y Drizzle Studio. - Migraciones — flujo
generate → migrate, la migración en arranque, la función NCF y el riesgo de drift. - Neon vs Docker — diferencias entre los entornos de desarrollo y producción.
- Dominios del esquema — qué contiene cada archivo de
src/db/schema/.
packages/types
@ixiclinic/types — tipos TypeScript compartidos (entidades y contratos de API) que consumen todas las apps del monorepo. Compila primero en Turbo.
Drizzle ORM
Configuración de Drizzle en apps/api, los comandos db:* (generate, migrate, push, studio, seed) y el detalle de que db/index.ts importa cada schema explícitamente.