Skip to content

tecnomanu/multitenant-nestjs-api-base

Repository files navigation

🏗️ Multi-Tenant API Base

Nest Logo

Una base de API Multitenant robusta y escalable construida con NestJS, lista para ser reutilizada en múltiples proyectos.

NPM Version Package License NPM Downloads CircleCI Coverage Discord Backers on Open Collective Sponsors on Open Collective Donate us Support us Follow us on Twitter

🚀 Características Principales

🔐 Autenticación Completa

  • JWT Authentication - Access & Refresh tokens
  • Registro de usuarios - Con validación de email
  • Gestión de sesiones - Múltiples dispositivos
  • Recuperación de contraseña - Via email
  • Verificación de email - Cuentas seguras

🏢 Arquitectura Multitenant

  • Tenant Isolation - Datos separados por inquilino
  • Tenant Management - CRUD completo de inquilinos
  • User-Tenant Relationship - Usuarios en múltiples tenants
  • Rol-Based Access Control - Permisos por tenant

🛡️ Seguridad

  • Rate Limiting - Protección contra spam
  • CORS Configuration - Orígenes permitidos
  • Helmet - Headers de seguridad
  • Password Hashing - Bcrypt seguro
  • Input Validation - Sanitización de datos

📊 Base de Datos

  • PostgreSQL - Base de datos relacional
  • Prisma ORM - Type-safe database access
  • Migrations - Control de versiones de BD
  • Seeding - Datos iniciales

🚀 Performance

  • Redis Cache - Caché de alta velocidad
  • Connection Pooling - Optimización de conexiones
  • Query Optimization - Consultas eficientes
  • Pagination - Datos paginados

📝 Documentación

  • Swagger UI - Documentación interactiva
  • OpenAPI 3.0 - Especificación estándar
  • Postman Collection - Colección de endpoints
  • Docker Documentation - Guía de despliegue

📋 Prerequisitos

  • Node.js >= 18.0.0
  • pnpm >= 8.0.0
  • Docker >= 20.0.0
  • Docker Compose >= 2.0.0

🚀 Instalación Rápida

1. Clonar el repositorio

git clone <este-repo> mi-proyecto-api
cd mi-proyecto-api

2. Configurar variables de entorno

cp .env.example .env
# Edita .env con tus valores específicos

3. Instalar dependencias

pnpm install

4. Iniciar con Docker (Recomendado)

# Desarrollo
pnpm run dev:up

# Producción
pnpm run docker:up

5. Acceder a la aplicación

🛠️ Desarrollo Local

Sin Docker

# Instalar dependencias
pnpm install

# Configurar base de datos
pnpm run db:setup

# Iniciar en modo desarrollo
pnpm run start:dev

Con Docker (Recomendado)

# Iniciar todos los servicios
pnpm run dev:up

# Ver logs en tiempo real
pnpm run dev:logs

# Reiniciar API
pnpm run dev:restart

🧪 Testing

# Tests unitarios
pnpm run test

# Tests de integración
pnpm run test:e2e

# Cobertura de tests
pnpm run test:cov

# Tests en modo watch
pnpm run test:watch

📦 Scripts Disponibles

Desarrollo

pnpm run start:dev          # Iniciar en modo desarrollo
pnpm run dev:up             # Docker desarrollo
pnpm run dev:down           # Parar Docker desarrollo
pnpm run dev:logs           # Ver logs
pnpm run dev:clean          # Limpiar completamente

Base de Datos

pnpm run db:setup           # Configurar BD
pnpm run db:migrate         # Ejecutar migraciones
pnpm run db:seed            # Poblar con datos iniciales
pnpm run db:studio          # Abrir Prisma Studio

Producción

pnpm run build             # Compilar para producción
pnpm run start:prod        # Iniciar en producción
pnpm run docker:up         # Docker producción
pnpm run docker:down       # Parar Docker producción

🔧 Personalización

1. Configurar tu proyecto

# Cambiar nombre del proyecto en package.json
{
  "name": "mi-proyecto-api",
  "description": "Mi API específica"
}

2. Actualizar variables de entorno

# .env
DOCKER_PROJECT_NAME=mi_proyecto
POSTGRES_DB=mi_proyecto_dev
JWT_ACCESS_SECRET=tu-secreto-super-seguro
CORS_ORIGIN=https://mi-frontend.com

3. Personalizar esquema de base de datos

// prisma/schema.prisma
// Añade tus modelos específicos aquí

📚 Estructura del Proyecto

src/
├── auth/              # Módulo de autenticación
├── users/             # Gestión de usuarios
├── tenants/           # Gestión de inquilinos
├── common/            # Utilidades compartidas
├── database/          # Configuración de BD
├── config/            # Configuración de la app
└── main.ts           # Punto de entrada

prisma/
├── schema.prisma     # Esquema de base de datos
├── migrations/       # Migraciones
└── seeds/           # Datos iniciales

docker/
├── Dockerfile       # Imagen de producción
├── Dockerfile.dev   # Imagen de desarrollo
└── docker-compose.* # Orquestación

🌐 Endpoints Principales

Autenticación

  • POST /api/v1/auth/register - Registro de usuario
  • POST /api/v1/auth/login - Inicio de sesión
  • POST /api/v1/auth/refresh - Renovar token
  • POST /api/v1/auth/logout - Cerrar sesión

Usuarios

  • GET /api/v1/users/profile - Perfil del usuario
  • PUT /api/v1/users/profile - Actualizar perfil
  • POST /api/v1/users/change-password - Cambiar contraseña

Tenants

  • GET /api/v1/tenants - Listar tenants
  • POST /api/v1/tenants - Crear tenant
  • GET /api/v1/tenants/:id - Obtener tenant
  • PUT /api/v1/tenants/:id - Actualizar tenant

🚀 Despliegue

Docker (Recomendado)

# Construcción optimizada
docker build -t mi-api .

# Ejecutar en producción
docker-compose up -d

PM2

# Instalar PM2
npm install -g pm2

# Iniciar con PM2
pm2 start ecosystem.config.js

📖 Documentación Adicional

🤝 Contribuciones

Las contribuciones son bienvenidas. Por favor:

  1. Fork el proyecto
  2. Crea una rama para tu feature (git checkout -b feature/amazing-feature)
  3. Commit tus cambios (git commit -m 'Add amazing feature')
  4. Push a la rama (git push origin feature/amazing-feature)
  5. Abre un Pull Request

📄 Licencia

Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.

🆘 Soporte

  • 📧 Email: soporte@tu-empresa.com
  • 💬 Discord: [Tu servidor de Discord]
  • 📖 Documentación: [Tu documentación]
  • 🐛 Issues: [GitHub Issues]

¡Construye APIs increíbles con esta base multitenant! 🚀

About

Example base for a multitenant nestjs api with users and authentication functions.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors