OrgSync es una API RESTful construida con Node.js, Express y MongoDB que permite gestionar empleados, departamentos, encargados y áreas dentro de una organización. El sistema incluye autenticación JWT, documentación Swagger y un manejo robusto de errores.
- 🔐 Autenticación JWT segura y personalizada
- 🧠 Validaciones cruzadas entre entidades
- 🗃️ CRUD completo para:
- Empleados
- Departamentos
- Encargados (Managers)
- Áreas
- 🧩 Integridad referencial garantizada con Mongoose
- 🧪 Documentación profesional con Swagger
- 📡 Comunicación frontend-backend con Axios
- ⚙️ Middleware global para manejo de errores
El sistema cuenta con dos usuarios definidos en el archivo authService.js:
| Usuario | Contraseña | Rol | Mensaje Especial |
|---|---|---|---|
admin |
admin123 |
admin | — |
jair |
elmejorprofe |
admin | Sabemos que es el mejor profe 💙 |
Dependiendo del usuario que inicie sesión:
- El usuario
jairverá un mensaje especial en el dashboard. - El sistema muestra distintos elementos visuales o secciones según el rol o usuario.
- Esto permite personalizar la experiencia de usuario y validar la autenticación desde el cliente (React).
💡 Nota: Los usuarios están definidos en el backend y se autentican sin necesidad de una base de datos. El token JWT generado incluye información del usuario y se usa para controlar el acceso a las rutas protegidas.
- Backend: Node.js + Express
- Base de datos: MongoDB + Mongoose
- Autenticación: JSON Web Tokens (JWT)
- Documentación: Swagger UI
- Frontend: React (no incluido en este repo)
- HTTP Cliente: Axios
├── index.js
├── swagger.js
├── middlewares/
│ └── errorHandler.js
├── models/
│ ├── employee.js
│ ├── department.js
│ ├── manager.js
│ └── area.js
├── routes/
│ ├── employeeRouter.js
│ ├── departmentRouter.js
│ ├── managerRouter.js
│ └── areaRouter.js
├── services/
│ ├── employeeService.js
│ ├── departmentService.js
│ ├── managerService.js
│ └── areaService.js
└── .env
Una vez corras el proyecto, accede a la documentación desde:
👉 http://localhost:3000/api-docs
Incluye endpoints para todos los recursos: GET, POST, PATCH, PUT, DELETE.
- Inicia sesión y obtén un JWT válido.
- Incluye el token en los headers:
Authorization: Bearer <token>
- Clona el repositorio
- Instala dependencias:
npm install- Crea un archivo
.envcon tu variable de entornoTOKEN_SECRET - Corre el servidor:
npm start- Token válido (usuario con permisos):
Bearer eyJhbGciOi... - Token inválido:
Bearer token_invalido
-
GET todos:
GET /employee -
GET por ID:
GET /employee/{id} -
Crear:
POST /employee
Cuerpo (JSON):{ "firstName": "Laura", "lastName": "González", "age": 29, "gender": "F", "department1": "665db1...", "department2": "665db2...", "department3": "665db3..." } -
Reemplazo con restricción (PATCH):
PATCH /employee/{id}
Se requiere el campooverride: truepara modificar un departamento.
- Crear o editar: requiere que
managerIdyareaIdexistan previamente. - Eliminar con seguridad:
- Falla si está en uso.
- Funciona si se añade
?force=true
- Ejemplo de eliminación forzada:
DELETE /department/DP001?force=true
| Entidad | Ejemplo ID |
|---|---|
| Empleado | EMP123 |
| Manager | MNG001 |
| Área | AREA001 |
| Departamento | DP001 |
- Ángel David Onesto Frías
- Marcos Ariciaga Valdez
- Giorgio Lisandro Téllez Barrón
- Samuel Yoshua Guzmán Gutiérrez
Este proyecto es educativo y forma parte de la materia "Programación para el Desarrollo de Aplicaciones Web" en la Universidad La Salle Bajío.