Persistencia
La elección de base de datos ocurre solo en el scaffolding (create-bb-app wizard o --database). El proyecto generado incluye un único stack (XOR): nunca ambos, nunca un flag runtime DATABASE_DRIVER.
PostgreSQL + TypeORM
Incluido con --database=postgres.
- Entities
*Entity.tsbajoinfrastructure/persistence/ - Wiring vía
OrmSwitcherModule+ repositorio TypeORM UserRepositoryModule.init({ disable })selecciona Memory vs TypeORM- Migraciones bajo
src/database/migrations/— nuncasynchronize: trueen config compartida - Seeders bajo
src/database/seeders/(pnpm seed) - Local:
pnpm docker:up→pnpm migration:run(opcionalpnpm seed)
Health check de BD
bash
GET /api/v1/health-check/databaseMongoDB + Mongoose
Incluido con --database=mongo.
- Schemas
*Schema.ts,UserRepositoryMongo,MongoSwitcherModule - Compose con perfil mongo (
pnpm docker:up) - Sin migraciones TypeORM — arranca y desarrolla tras
pnpm install
Puertos de dominio
El dominio se mantiene puro:
- Interfaces de repositorio en
domain/repositories/ - Token de DI (p. ej.
USER_REPOSITORY_TOKEN) - El use case inyecta el puerto; el adapter vive en infrastructure
- Mapear domain ↔ persistence en el adapter; no filtrar tipos ORM/ODM a application
Reglas
- No meter TypeORM/Mongoose en
domain/ni en use cases más allá del puerto. - Cambios de schema Postgres → nueva migración, no reescribir migraciones ya aplicadas.
- En tests, preferir Memory / fakes; e2e alineado con el bootstrap real.