¡Bienvenido! Este es un template de backend robusto y listo para usar, construido con NestJS, que te permitirá arrancar tus proyectos rápidamente.
Asegúrate de tener instalado lo siguiente en tu entorno de desarrollo:
-
Clona el repositorio:
git clone cd proyect -
Instala las dependencias:
npm install
Este proyecto utiliza variables de entorno para la configuración. Para empezar, copia el archivo de ejemplo:
cp .env.example .envAhora, abre el archivo .env y configúralo. Aquí tienes una explicación de las variables más importantes:
DATABASE_URL: ¡Esencial! Esta es la cadena de conexión para tu base de datos PostgreSQL, usada por Prisma.- Formato:
postgresql://USER:PASSWORD@HOST:PORT/DATABASE
- Formato:
JWT_SECRET: ¡Crítico para la seguridad! Es la clave secreta que se usa para firmar los JSON Web Tokens (JWT). Debe ser una cadena larga y aleatoria.JWT_EXPIRES_IN: Define el tiempo de vida de los tokens JWT (ej.60s,1h,7d).SSO_API_URLySSO_API_KEY: Si te integras con un servicio de Single Sign-On (SSO), aquí van la URL de la API y la clave de autorización.
-
Modo Desarrollo (con hot-reload):
npm run dev
Este comando vigila los cambios en los archivos y reinicia la aplicación automáticamente. ¡Ideal para desarrollar!
-
Modo Producción:
npm run start
Este comando primero se asegura de que las migraciones de la base de datos estén aplicadas y luego inicia el servidor de forma optimizada para producción.
El flujo de autenticación está diseñado para integrarse con un servicio de Single Sign-On (SSO).
-
Petición del Cliente: El frontend envía una petición
POSTal endpoint/auth/login. En el cuerpo de la petición, debe incluir uncodede autorización obtenido del SSO. -
Validación con el SSO: El
AuthSignInServicetoma esecodey lo envía al servicio de SSO para validarlo. -
Búsqueda o Creación de Usuario: Si el
codees válido, el SSO devuelve los datos del usuario (nombre, email, RUT). El servicioUserFindOrCreateServicebusca si ya existe un usuario con ese email y RUT en la base de datos. Si no existe, lo crea. -
Generación de JWT: Con los datos del usuario, se genera un JSON Web Token (JWT). Este token contiene información clave como el ID del usuario, su nombre, email y roles, y está firmado digitalmente con el
JWT_SECRET. -
Respuesta al Cliente: El servidor responde con el
access_token(el JWT). El cliente debe guardar este token y enviarlo en la cabeceraAuthorizationde las peticiones a rutas protegidas (ej.Authorization: Bearer <token>).
El AuthGuard es un guardián que protege las rutas que requieren autenticación, verificando la validez del JWT en cada petición.
Usamos Prisma para interactuar con la base de datos de una forma moderna y segura.
-
Schema de Prisma: El modelo de datos está definido en
src/shared/services/prisma/schema.prisma. Cada vez que modifiques este archivo, necesitas generar una nueva migración. -
Crear una Migración: Para reflejar los cambios de tu
schema.prismaen la base de datos, crea una nueva migración:# Reemplaza <nombre-descriptivo> con algo como 'add-product-table' npx prisma migrate dev --name <nombre-descriptivo>
Este comando también ejecuta
npx prisma generatepara actualizar el Cliente de Prisma con los nuevos modelos. -
Aplicar Migraciones: Para aplicar las migraciones pendientes en un entorno (como producción), usa:
npx prisma migrate deploy
La carpeta src/shared contiene lógica reutilizable en toda la aplicación.
-
Services:
PrismaService: Gestiona la conexión con la base de datos y proporciona una instancia del cliente de Prisma.SsoService: Encapsula la lógica para comunicarse con la API del SSO.FetcherService: Un servicio global para realizar peticiones HTTP a otras APIs. Al ser global, puedes inyectarlo en cualquier servicio sin necesidad de importar su módulo.
-
Helpers:
default-logger.helper.ts: Un logger simple y personalizable.get-time-duration.helper.ts: Utilidad para medir tiempos de ejecución.http-responses.helper.ts: Funciones para estandarizar las respuestas HTTP (éxito, error, etc.).
-
Decorators:
is-chilean-rut.decorator.ts: Un decorador de validación personalizado (class-validator) que comprueba si un string es un RUT chileno válido.
-
Interceptors:
logger.interceptor.ts: Intercepta todas las peticiones entrantes para registrar información útil como la URL, el método y el tiempo de respuesta.
Puedes ver todos los scripts en package.json. Aquí están los más importantes:
npm run dev: Inicia la app en modo desarrollo.npm run start: Inicia la app en modo producción.npm run build: Compila el código TypeScript a JavaScript.npm run format: Formatea todo el código con Prettier.npm run lint: Revisa el código en busca de errores de estilo con ESLint.npm run test: Ejecuta las pruebas unitarias.npm run test:e2e: Ejecuta las pruebas end-to-end.# template-nestjs
- docker compose -f docker-compose.dev.yml up --build
1 - Para y elimina contenedores + volúmenes del compose actual docker compose down --volumes --remove-orphans
2 - Borra cualquier volumen “huérfano” docker volume prune # ENTER y confirma
3 - Arranca de nuevo docker compose up --build