Backend API para la plataforma OneEnglish, construido con NestJS, PostgreSQL, MongoDB y Redis.
| Módulo | Endpoints | Tests | Estado |
|---|---|---|---|
| Schools | 7 | 19 ✅ | ✅ Completo |
| Students | 7 | 20 ✅ | ✅ Completo |
| Teachers | 7 | 20 ✅ | ✅ Completo |
| Coordinators | 7 | 20 ✅ | ✅ Completo |
| Admins | 6 | 18 ✅ | ✅ Completo |
| Auth Guards | - | 15 ✅ | ✅ Completo |
| TOTAL | 34 | 112 ✅ | 🚀 Production Ready |
Se ha implementado un sistema robusto de control de acceso con:
- ✅ 3 Guards personalizados: UserRoleGuard, SchoolOwnershipGuard, SchoolReadGuard
- ✅ 4 Decorators: @Auth, @SchoolAuth, @SchoolRead, @SkipSchoolReadCheck
- ✅ Validación de escuela: Coordinators/Teachers solo gestionan su escuela
- ✅ Lectura restringida: Coordinators/Teachers solo leen de su escuela
- ✅ Admin bypass: Admins tienen acceso completo
📚 Ver: Sistema de Permisos | Flujos | Ejemplos
El seeder genera automáticamente un dataset completo y realista:
- ✅ 5 Escuelas con datos realistas (direcciones, teléfonos, emails)
- ✅ 12 Usuarios distribuidos en roles (2 admins, 3 coords, 3 teachers, 4 students)
- ✅ Perfiles completos con avatares, biografías y especializaciones
- ✅ 3 Challenges con categorías y puntos variados
- ✅ 24-60 Actividades de usuario con IPs y metadata
- ✅ Progreso realista en challenges con fechas y scores
🚀 Ejecutar: make seed o npm run prisma:seed
📚 Ver: Credenciales | Postman Bodies | Getting Started
¿Primera vez configurando el proyecto? Lee la Guía de Setup Completa que incluye:
- ✅ Configuración paso a paso del archivo
.env - ✅ Script
scripts/runner.shque automatiza Prisma y MongoDB - ✅ Solución de problemas comunes
- ✅ Flujo automático de inicialización
TL;DR - Comandos básicos:
# 1. Copiar variables de entorno
cp .env.example .env
# 2. Levantar todos los servicios
make up-dev
# 3. Ver logs
make logs-devEl runner.sh se encarga automáticamente de:
- ✅ Esperar a que PostgreSQL, MongoDB y Redis estén listos
- ✅ Crear la base de datos
onenglishdben MongoDB - ✅ Ejecutar
prisma generate - ✅ Ejecutar
prisma migrate deploy - ✅ Iniciar la aplicación
- Descripción
- Tecnologías
- Prerrequisitos
- Configuración Inicial
- Inicio Rápido
- Comandos Disponibles
- Estructura del Proyecto
- Variables de Entorno
- Base de Datos
- Testing
- Deployment
- Recursos
OneEnglish Backend es una API RESTful construida con NestJS que proporciona servicios para una plataforma de aprendizaje de inglés. Utiliza PostgreSQL como base de datos principal, MongoDB para datos no estructurados, y Redis para caché y sesiones.
- Framework: NestJS (Node.js)
- Lenguaje: TypeScript
- Base de Datos Relacional: PostgreSQL 16
- Base de Datos NoSQL: MongoDB 7.0
- ORM: Prisma
- Caché: Redis 7.4
- Autenticación: JWT
- Contenedores: Docker & Docker Compose
- Gestión de Tareas: Makefile
Antes de comenzar, asegúrate de tener instalado:
- Docker: >= 20.10.0
- Docker Compose: >= 2.0.0
- Make: (opcional, pero recomendado)
- Node.js: >= 18.x (solo para desarrollo local sin Docker)
- npm o yarn
docker --version
docker-compose --version
make --version
node --versiongit clone <repository-url>
cd onenglishbackendCopia el archivo de ejemplo y configura tus variables:
cp .env.example .envEdita el archivo .env con tus credenciales y configuraciones:
nano .env
# o
code .env
⚠️ Importante: Cambia todos los valoresyour_secure_*yyour_*por contraseñas seguras reales.
# Ver todos los comandos disponibles
make help
# Levantar la aplicación en modo desarrollo
make up-dev
# Ver logs en tiempo real
make logs-dev
# Ver solo logs del backend
make logs-backend-dev# Levantar la aplicación en modo producción
make up-prod
# Ver logs en tiempo real
make logs-prod# Levantar contenedores
docker-compose -f docker-compose.dev.yml -p onenglish_dev up --build
# Levantar en segundo plano
docker-compose -f docker-compose.dev.yml -p onenglish_dev up -d --build
# Detener contenedores
docker-compose -f docker-compose.dev.yml -p onenglish_dev down# Levantar contenedores
docker-compose -f docker-compose.prod.yml -p onenglish_prod up -d --build
# Detener contenedores
docker-compose -f docker-compose.prod.yml -p onenglish_prod down| Comando | Descripción |
|---|---|
make up-dev |
Levantar contenedores en desarrollo |
make down-dev |
Bajar contenedores en desarrollo |
make logs-dev |
Mostrar todos los logs en desarrollo |
make restart-dev |
Reiniciar contenedores en desarrollo |
make build-dev |
Construir imágenes en desarrollo |
make clean-dev |
Limpiar contenedores y volúmenes |
make destroy-dev |
Destruir todo (contenedores, volúmenes e imágenes) |
make ps-dev |
Ver estado de contenedores |
| Comando | Descripción |
|---|---|
make up-prod |
Levantar contenedores en producción |
make down-prod |
Bajar contenedores en producción |
make logs-prod |
Mostrar todos los logs en producción |
make restart-prod |
Reiniciar contenedores en producción |
make build-prod |
Construir imágenes en producción |
make clean-prod |
Limpiar contenedores y volúmenes |
make destroy-prod |
Destruir todo |
make ps-prod |
Ver estado de contenedores |
| Comando | Descripción |
|---|---|
make migrate-dev |
Ejecutar migraciones de Prisma |
make migrate-deploy-dev |
Ejecutar migraciones (deploy) |
make generate-dev |
Generar cliente de Prisma |
make studio-dev |
Abrir Prisma Studio |
make seed-dev |
Ejecutar seed de base de datos |
| Comando | Descripción |
|---|---|
make migrate-prod |
Ejecutar migraciones en producción |
make generate-prod |
Generar cliente de Prisma |
make seed-prod |
Ejecutar seed en producción |
| Comando | Descripción |
|---|---|
make shell-backend-dev |
Acceder al shell del backend |
make shell-postgres-dev |
Acceder al shell de PostgreSQL |
make shell-mongo-dev |
Acceder al shell de MongoDB |
make shell-redis-dev |
Acceder al shell de Redis |
| Comando | Descripción |
|---|---|
make logs-backend-dev |
Logs del backend (desarrollo) |
make logs-postgres-dev |
Logs de PostgreSQL (desarrollo) |
make logs-mongo-dev |
Logs de MongoDB (desarrollo) |
make logs-redis-dev |
Logs de Redis (desarrollo) |
make logs-backend-prod |
Logs del backend (producción) |
make logs-postgres-prod |
Logs de PostgreSQL (producción) |
make logs-mongo-prod |
Logs de MongoDB (producción) |
| Comando | Descripción |
|---|---|
make stats |
Ver estadísticas de recursos Docker |
make prune |
Limpiar recursos Docker no utilizados |
onenglishbackend/
├── src/
│ ├── auth/ # Módulo de autenticación
│ │ ├── decorators/ # Decoradores personalizados
│ │ ├── dto/ # Data Transfer Objects
│ │ ├── guards/ # Guards de autenticación y roles
│ │ ├── models/ # Modelos de usuario y roles
│ │ └── services/ # Servicios de autenticación
│ ├── common/ # Recursos compartidos
│ │ └── definitions/ # Definiciones comunes
│ ├── database/ # Módulo de base de datos
│ │ ├── database.module.ts
│ │ └── prisma.service.ts
│ ├── app.module.ts # Módulo principal
│ ├── app.controller.ts
│ ├── app.service.ts
│ └── main.ts # Punto de entrada
├── prisma/
│ └── schema.prisma # Schema de Prisma
├── test/ # Tests E2E
├── docker-compose.dev.yml # Docker Compose para desarrollo
├── docker-compose.prod.yml # Docker Compose para producción
├── Dockerfile.dev # Dockerfile de desarrollo
├── Dockerfile.prod # Dockerfile de producción
├── Makefile # Comandos automatizados
├── .env.example # Ejemplo de variables de entorno
├── package.json
└── README.md
TZ=America/Caracas
NODE_ENV=developmentPOSTGRES_USER=postgres
POSTGRES_PASSWORD=your_secure_postgres_password
POSTGRES_DB=onenglishdb
POSTGRES_EXT_PORT=5432
DATABASE_URL=postgresql://postgres:your_secure_postgres_password@postgres:5432/onenglishdb?schema=publicPGADMIN_DEFAULT_EMAIL=[email protected]
PGADMIN_DEFAULT_PASSWORD=your_secure_pgadmin_password
PGADMIN_PORT=5050MONGO_USERNAME=mongoadmin
MONGO_PASSWORD=your_secure_mongo_password
MONGO_EXT_PORT=27017
MONGO_URI=mongodb://mongoadmin:your_secure_mongo_password@mongo:27017/onenglishdb?authSource=adminREDIS_HOST=redis
REDIS_PORT=6379
REDIS_URL=redis://redis:6379BACKEND_PORT=3000
API_PREFIX=api
API_VERSION=v1JWT_SECRET=your_super_secret_jwt_key_change_this_in_production
JWT_EXPIRATION=24h
JWT_REFRESH_SECRET=your_super_secret_refresh_token_key
JWT_REFRESH_EXPIRATION=7d# Crear una nueva migración
make migrate-dev
# Aplicar migraciones (producción)
make migrate-prod
# Generar cliente de Prisma
make generate-dev
# Abrir Prisma Studio
make studio-devmake shell-postgres-dev
# o directamente:
docker exec -it postgres psql -U postgres -d onenglishdbmake shell-mongo-dev
# o directamente:
docker exec -it mongo mongosh -u mongoadmin -pAbre tu navegador en: http://localhost:5050
- Email: El configurado en
PGADMIN_DEFAULT_EMAIL - Password: El configurado en
PGADMIN_DEFAULT_PASSWORD
Abre tu navegador en: http://localhost:8081
- Usuario: El configurado en
MONGO_EXPRESS_USERNAME - Password: El configurado en
MONGO_EXPRESS_PASSWORD
npm run testnpm run test:e2enpm run test:covUna vez la aplicación esté corriendo, puedes acceder a:
- API Backend:
http://localhost:3000 - API Docs (Swagger):
http://localhost:3000/api(si está configurado) - PgAdmin:
http://localhost:5050 - Mongo Express:
http://localhost:8081 - Portainer (solo producción):
http://localhost:9000 - Nginx Proxy Manager (solo producción):
http://localhost:81
- Asegúrate de configurar todas las variables de entorno en
.env - Cambia
NODE_ENV=production - Configura secretos JWT seguros
- Configura las credenciales de bases de datos seguras
# Construir y levantar en producción
make up-prod
# Ejecutar migraciones
make migrate-prod
# Verificar estado
make ps-prod
# Ver logs
make logs-prod- Nginx Proxy Manager: Gestión de proxy reverso y certificados SSL
- Portainer: Gestión visual de contenedores Docker
# Ver logs detallados
make logs-dev
# Verificar estado de contenedores
docker ps -a
# Reconstruir desde cero
make destroy-dev
make up-dev# Verificar que el contenedor de PostgreSQL esté corriendo
docker ps | grep postgres
# Ver logs de PostgreSQL
make logs-postgres-dev
# Reiniciar servicio
make restart-dev# Eliminar contenedores, volúmenes e imágenes
make destroy-dev
# Limpiar recursos Docker no utilizados
make prune
# Levantar de nuevo
make up-devPara documentación detallada del proyecto, consulta la carpeta docs/:
- DATABASE_ARCHITECTURE.md - Arquitectura completa de bases de datos
- PRISMA_SETUP.md - Configuración y uso de Prisma
- DUAL_DATABASE_SETUP.md - Setup de PostgreSQL + MongoDB
- LOCAL_DEVELOPMENT.md - Workflow de desarrollo local
- ARCHITECTURE.md - Diagramas de arquitectura del sistema
- RENAMED_FILES.md - Historial de cambios de estructura
- CREDENTIALS.md - 🔒 Referencia de credenciales (git-ignored)
- NestJS Documentation
- Prisma Documentation
- Mongoose Documentation
- PostgreSQL Documentation
- MongoDB Documentation
- Redis Documentation
- Docker Documentation
Para preguntas y soporte:
- Crea un issue en el repositorio
- Contacta al equipo de desarrollo
Este proyecto es privado y confidencial.
Si prefieres ejecutar la aplicación sin Docker:
npm installAsegúrate de tener PostgreSQL, MongoDB y Redis corriendo localmente y actualiza las variables de entorno con las credenciales locales.
npx prisma migrate dev# Modo desarrollo
npm run start:dev
# Modo producción
npm run build
npm run start:prodHecho con ❤️ para OneEnglish