Qué hace
spraxium database (alias spraxium db) genera un módulo de base de datos completamente cableado dentro de tu proyecto. Te guía con un asistente interactivo donde seleccionas un ORM y un motor de base de datos; después hace scaffolding de los archivos del módulo, parchea tu configuración de entorno con las claves necesarias, instala los paquetes requeridos y opcionalmente registra el módulo en tu AppModule. Al final del asistente, tu proyecto queda listo para ejecutar consultas sin configuración manual.
El comando acepta un argumento opcional de ORM para omitir el primer paso de selección. Cuando ya sabes lo que quieres, spraxium database prisma salta directamente al prompt del motor de base de datos.
Cuándo usarlo
Usa este comando al inicio de un proyecto o al añadir acceso a base de datos en una aplicación Spraxium existente. Es el equivalente a instalar paquetes manualmente, escribir el boilerplate de conexión y registrar el módulo, todo condensado en un único flujo interactivo. Ejecútalo una vez por integración de base de datos; para cambios de schema o migraciones, usa directamente la herramienta del ORM después de la configuración.
ORMs soportados
Qué hace el asistente
Selección de ORM
Si no pasaste un ORM como argumento de CLI, el asistente muestra una lista interactiva de los cinco ORMs soportados con una descripción corta para cada uno. Navega con las flechas y presiona Enter para confirmar.
Selección de motor de base de datos
Para ORMs que soportan varios motores (Prisma, Drizzle, TypeORM, Mikro-ORM), el asistente pregunta cuál quieres usar. Mongoose omite este paso porque solo apunta a MongoDB.
Nombre del módulo
El asistente pide un nombre de módulo con database como valor por defecto.
El nombre se convierte a kebab-case para la carpeta y a PascalCase para los
nombres de clase. Un nombre como user-db produce un UserDbModule y un
directorio src/modules/user-db/.
Scaffolding de archivos
El CLI descarga la plantilla para la combinación de ORM y motor elegida y
escribe los archivos de módulo, servicio, schema y configuración en
src/modules/{name}/. También se agrega un archivo de configuración en la
raíz (como drizzle.config.ts o prisma/schema.prisma) si el ORM lo
requiere.
Inyección de claves de entorno
Las variables de entorno requeridas (DATABASE_URL, DATABASE_PATH, etc.)
se añaden automáticamente a tu app.env.ts si todavía no existen. No hace
falta edición manual.
Instalación de paquetes
El asistente pregunta si quieres instalar paquetes de inmediato. Al
confirmar, ejecuta el package manager detectado para añadir dependencias de
runtime (como el cliente ORM y driver de base de datos) y dependencias de
desarrollo (herramientas CLI, definiciones de tipos). También se ejecutan
automáticamente comandos post-instalación como npx prisma generate.
Registro en AppModule
Si se encuentra un app.module.ts en tu directorio src/, el asistente
ofrece añadir automáticamente el módulo generado al array imports. Esto
conecta el módulo al contenedor de DI para que puedas inyectar
DatabaseService en cualquier parte de la aplicación.
Estructura de archivos generada
Los archivos exactos varían según el ORM, pero la estructura sigue la misma convención para cada combinación.
También se crean archivos de configuración en la raíz
Algunos ORMs requieren un archivo de configuración en la raíz del proyecto. Prisma genera un directorio prisma/ con schema.prisma. Drizzle genera drizzle.config.ts. Estos archivos se escriben junto a los del módulo y deben versionarse.
Después del asistente
Cuando el comando termina, puedes inyectar DatabaseService en cualquier handler, guard o servicio dentro del mismo alcance de módulo. El servicio se exporta desde el módulo de base de datos, así que al importar DatabaseModule en cualquier otro módulo obtienes acceso a través del contenedor de DI.
import { Injectable } from '@spraxium/common';
import { DatabaseService } from '../database/database.service';
@Injectable()
export class HelloService {
constructor(private readonly db: DatabaseService) {}
async getCount(): Promise<number> {
// Use the ORM client returned by the service
return this.db
.getDb()
.select()
.from(table)
.then((rows) => rows.length);
}
}