Una API RESTful robusta para la gestión de una agencia inmobiliaria
Desarrollada como parte del taller "Backend - NodeJS" de la materia Computación en Internet III
- 🎯 Descripción del Proyecto
- 🛠️ Tecnologías Utilizadas
- 📋 Prerrequisitos
- ⚡ Instalación y Configuración
- 🚀 Ejecución del Proyecto
- 📡 Uso de la API (Endpoints)
- 🧪 Pruebas
- 🏗️ Arquitectura y Características Técnicas
- ☁️ Despliegue
- 📈 Estado del Proyecto
- 📚 Cumplimiento de Requisitos
API backend completa para una herramienta interna de una agencia inmobiliaria desarrollada como parte del taller "Backend - NodeJS" de Computación en Internet III. La aplicación implementa un sistema robusto de gestión de usuarios, propiedades y tareas con autenticación JWT, roles diferenciados y integridad referencial.
- 👥 Gestión de Usuarios: Sistema completo de CRUD con roles y autenticación JWT
- 🔐 Autenticación y Autorización: Seguridad basada en JSON Web Tokens con middleware de roles
- 🛡️ Roles y Permisos: Dos niveles de acceso diferenciados:
superadmin
: Control total sobre todos los módulos (usuarios, propiedades, tareas)agente
: Gestión de sus propias propiedades y tareas asignadas
- 🏠 Gestión de Propiedades: CRUD completo con ownership y control de acceso por roles
- 📝 Gestión de Tareas: CRUD completo vinculado a propiedades con asignación automática
- 🔄 Integridad Referencial: Cascade delete y validación de dependencias
- ⚡ Optimizaciones: Filtros combinados en MongoDB y centralización de errores
Categoría | Tecnología |
---|---|
Runtime | Node.js, Bun |
Framework | Express.js |
Lenguaje | TypeScript |
Base de Datos | MongoDB (Docker) |
ODM | Mongoose |
Seguridad | JWT, bcrypt |
Contenedores | Docker Compose |
Arquitectura | DTOs, Serializers, Service Layer, Middleware |
Patrones | MVC, Service Layer, Centralized Error Handling |
Antes de comenzar, asegúrate de tener instaladas las siguientes herramientas:
- ✅ Node.js: v20.x o superior (
node -v
) - ✅ Bun: v1.x o superior (
bun -v
) - ✅ Docker & Docker Compose: Asegúrate de que Docker Desktop esté en ejecución
docker --version
docker-compose --version
- ✅ Git: Para clonar el repositorio
bun install
Crea un archivo .env
en la raíz del proyecto:
# Puerto de la aplicación
PORT=3000
# Credenciales y URI de la Base de Datos MongoDB (datos de ejemplo)
MONGO_USER=admin
MONGO_PASSWORD=admin123
MONGO_URI=mongodb://admin:admin123@localhost:27017/inmobiliariaDB?authSource=admin
# Secreto para firmar los JSON Web Tokens
JWT_SECRET=clave_007
docker-compose up -d
💡 Tip: Verifica que el contenedor esté corriendo con
docker ps
bun run db:seed
bun run dev
✅ ¡Listo! El servidor estará corriendo en http://localhost:3000
Base URL:
http://localhost:3000/api
Método | Endpoint | Descripción |
---|---|---|
POST |
/users/register |
Registra un nuevo usuario (rol: agente ) |
POST |
/users/login |
Autentica usuario y devuelve JWT |
Método | Endpoint | Descripción | Auth |
---|---|---|---|
GET |
/users/me |
Obtiene perfil del usuario actual | ✅ |
PUT |
/users/me |
Actualiza perfil del usuario actual | ✅ |
DELETE |
/users/me |
Elimina cuenta del usuario actual* | ✅ |
Método | Endpoint | Descripción | Roles |
---|---|---|---|
POST |
/users |
Crea nuevo usuario | superadmin |
GET |
/users |
Lista todos los usuarios | superadmin |
GET |
/users/:id |
Obtiene usuario por ID | superadmin |
PUT |
/users/:id |
Actualiza usuario por ID | superadmin |
DELETE |
/users/:id |
Elimina usuario por ID* | superadmin |
*Solo si no tiene propiedades asignadas
Método | Endpoint | Descripción |
---|---|---|
GET |
/properties |
Lista todas las propiedades |
GET |
/properties/:id |
Obtiene propiedad por ID |
Método | Endpoint | Descripción | Roles |
---|---|---|---|
POST |
/properties/agent |
Crea nueva propiedad | agente |
PUT |
/properties/agent/:id |
Actualiza su propiedad | agente |
DELETE |
/properties/agent/:id |
Elimina su propiedad** | agente |
Método | Endpoint | Descripción | Roles |
---|---|---|---|
POST |
/properties/admin |
Crea propiedad (cualquier owner) | superadmin |
PUT |
/properties/admin/:id |
Actualiza cualquier propiedad | superadmin |
DELETE |
/properties/admin/:id |
Elimina cualquier propiedad** | superadmin |
**Elimina automáticamente todas las tareas asociadas
Método | Endpoint | Descripción | Roles |
---|---|---|---|
GET |
/tasks/agent |
Lista sus tareas asignadas | agente |
GET |
/tasks/agent/:id |
Obtiene su tarea por ID | agente |
GET |
/tasks/property/:propertyId |
Tareas de su propiedad | agente |
POST |
/tasks/agent |
Crea tarea en su propiedad | agente |
PUT |
/tasks/agent/:id |
Actualiza su tarea | agente |
DELETE |
/tasks/agent/:id |
Elimina su tarea | agente |
Método | Endpoint | Descripción | Roles |
---|---|---|---|
GET |
/tasks/admin |
Lista todas las tareas | superadmin |
GET |
/tasks/admin/:id |
Obtiene cualquier tarea | superadmin |
GET |
/tasks/admin/property/:propertyId |
Tareas de cualquier propiedad | superadmin |
POST |
/tasks/admin |
Crea tarea en cualquier propiedad | superadmin |
PUT |
/tasks/admin/:id |
Actualiza cualquier tarea | superadmin |
DELETE |
/tasks/admin/:id |
Elimina cualquier tarea | superadmin |
📁 Colección disponible: Inmobiliaria Express CompleteTest- NodeJS.postman_collection.json
- 📋 Importa la colección de Postman en tu workspace
- 🗄️ Inicia la base de datos con
docker-compose up -d
- 🌱 Puebla con datos iniciales ejecutando
bun run db:seed
- 🚀 Inicia la aplicación con
bun run dev
- 📂 Abre los folders en la colección por módulo (Users, Properties, Tasks)
▶️ Ejecuta las pruebas de manera secuencial (importante, ya que algunas dependen de IDs creados previamente)
-
{{base_url}} → URL base de la API (http://localhost:3000)
-
{{jwt_token}} → Token de autenticación de agente
-
{{jwt_SuperToken}} → Token de autenticación de superadmin
-
{{test_agent_id}} → ID del agente de prueba
-
{{test_property_id}} → ID de la propiedad de prueba
-
{{second_test_property_id}} → ID de segunda propiedad de prueba
-
{{test_property_owner_id}} → ID del owner de la propiedad de prueba
-
{{second_test_property_owner_id}} → ID del owner de la segunda propiedad
-
{{test_task_id}} → ID de la tarea de prueba
✅ Estado: ✨ IMPLEMENTADO - Cobertura del 90.75%
Métrica | Porcentaje | Estado |
---|---|---|
Statements | 90.75% | ✅ |
Branches | 88.17% | ✅ |
Functions | 100% | 🎯 |
Lines | 89.69% | ✅ |
- 260 tests totales pasando ✅
- 11 test suites completos
- Tiempo de ejecución: ~74 segundos
Cobertura por Componente:
- 🎮 Controllers: 88.55% (119 tests)
- User Controller: 40 tests
- Property Controller: 32 tests
- Task Controller: 47 tests
- ⚙️ Services: 91.5% (75 tests)
- User, Property, Task Services
- 🛡️ Middlewares: 100% (cobertura completa)
- Authentication & Authorization
- Error Handler
- 🔧 Utils: 100% (9 tests)
- Serializers (User, Property, Task)
# Ejecutar todos los tests
npm test
# Ejecutar con cobertura
npm run test:coverage
📄 Ver reporte detallado: docs/testCoverage/coverage.md
- DTO (Data Transfer Objects): Validación y serialización de datos de entrada
- Service Layer: Lógica de negocio centralizada que interactúa directamente con modelos Mongoose
- Serializers: Formateo y transformación de datos de salida
- Middleware Chain: Autenticación, autorización y manejo centralizado de errores
- Cascade Delete: Eliminar propiedad → elimina tareas automáticamente
- Dependency Validation: No permite eliminar usuarios con propiedades
- Ownership Control: Agentes solo gestionan sus recursos
- Filtros Combinados: Consultas MongoDB optimizadas
- Error Handler Centralizado: Manejo unificado de errores
- Populate Strategy: Carga eficiente de relaciones
- JWT Authentication: Tokens seguros con expiración
- Role-based Authorization: Permisos diferenciados
- Password Hashing: bcrypt con salt
- Input Validation: Validación de entrada en todos los endpoints
🚀 URL Base: https://inmobiliaria-api-58kh.onrender.com
- Autenticación JWT completa (Login/Register)
- Middlewares de autorización por roles
- CRUD completo con rutas protegidas
- Validación de dependencias para eliminación
- Serialización segura de datos
- Tests: 40 tests unitarios e integración
- Modelo completo con relaciones
- CRUD diferenciado por roles (agente/superadmin)
- Ownership y control de acceso
- Cascade delete de tareas asociadas
- Rutas públicas y privadas
- Tests: 32 tests de integración
- Sistema completo de tareas vinculadas a propiedades
- Asignación automática basada en ownership
- CRUD diferenciado por roles
- Integridad referencial con propiedades
- Optimizaciones con filtros combinados
- Tests: 47 tests de integración
- 260 tests implementados (100% passing)
- 90.75% cobertura de código
- 100% funciones cubiertas
- Middlewares con cobertura completa
- Pruebas de integración con BD en memoria
- Documentación de coverage en docs/
- Colección Postman: Pruebas de integración completas
- Superadmin puede crear, modificar y eliminar usuarios
- Roles implementados:
superadmin
,agente
(usuario regular) - Usuarios autenticados pueden ver/editar su perfil
- Solo superadmin puede gestionar otros usuarios
- Tests: 25 tests en services + 40 en controller
- Sistema JWT completo con middleware de autenticación
- Middleware de validación de roles para cada operación
- Rutas protegidas según permisos de usuario
- Tests: Cobertura 100% en middlewares
- Módulo Propiedades: CRUD completo con ownership
- Módulo Tareas: CRUD vinculado a propiedades
- Relación directa entre propiedades y tareas
- Gestión diferenciada por roles (agente vs superadmin)
- Tests: 75 tests en services + 79 en controllers
- Integridad referencial (cascade delete, validación dependencias)
- Optimizaciones de rendimiento (filtros combinados)
- Error handling centralizado
- Arquitectura escalable con DTOs y Services
- Tests: 100% cobertura en serializers y utils
- Pruebas Unitarias: ✨ 90.75% cobertura (supera el 80% requerido)
- 260 tests implementados con Jest + Supertest
- Documentación completa de testing en docs/
- Reporte HTML interactivo de cobertura