API REST para la gestión de abogados y casos legales en un bufete jurídico.
Este proyecto permite administrar abogados, casos legales, asignaciones, transferencias y generar reportes básicos, utilizando autenticación JWT y una base de datos PostgreSQL.
- Node.js 18+
- Express.js
- PostgreSQL (Docker Compose)
- Sequelize ORM
- JWT (JSON Web Tokens)
- Joi (Validación de datos)
- Docker & Docker Compose
- Node.js 18+
- Docker y Docker Compose
- Clonar repositorio
git clone <url-del-repositorio>
cd law_firm_API- Instalar dependencias
npm install- Configurar variables de entorno
cp .env.example .env- Levantar la base de datos con Docker
docker-compose up -d- Ejecutar migraciones
npm run db:migrate5.1 Ejecutar migraciones con Docker:
docker-compose exec api npm run db:reset- Ejecutar seeders
npm run db:seedCrea un archivo .env basado en .env.example:
Con Docker:
DB_HOST=postgresnpm run devnpm startdocker-compose up -dVerificar contenedores:
docker-compose psVer logs:
docker-compose logs -f apiDetener:
docker-compose downEl siguiente comando elimina todas las tablas, vuelve a ejecutar las migraciones y carga los datos de prueba:
npm run db:resetManualmente:
npm run db:undo # Deshacer migraciones
npm run db:migrate # Ejecutar migraciones
npm run db:seed # Cargar datos de pruebaDespués de ejecutar los seeders, usa estas credenciales para autenticarte:
| Usuario | Password | Rol |
|---|---|---|
| admin | Admin123! | admin |
| operator | Oper123! | operator |
La API utiliza autenticación basada en JWT (JSON Web Tokens).
POST /api/auth/login
Content-Type: application/json
{
"username": "admin",
"password": "Admin123!"
}Respuesta:
{
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}Incluir en header:
Authorization: Bearer <tu_token_jwt>
- POST
/api/lawyers- Crear un abogado (requiere autenticación) - GET
/api/lawyers?page=1&limit=10&status=active- Listar abogados con paginación y filtro por estado - GET
/api/lawyers/:id- Obtener abogado por ID junto con sus casos asignados
- POST
/api/legal-cases- Crear un caso legal - GET
/api/legal-cases?page=1&limit=10&status=pending&lawyer_id=uuid- Listar casos con filtros opcionales - GET
/api/legal-cases/:id- Obtener caso por ID con información del abogado asignado - PUT
/api/legal-cases/:id/assign- Asignar abogado a un caso - PUT
/api/legal-cases/:id/transfer- Transferir un caso a otro abogado (usa transacción)
- GET
/api/reports/lawyers/:id/cases- Obtener casos y estadísticas de un abogado
?page=1&limit=10
?status=active&specialization=Laboral
?status=pending&case_type=civil&lawyer_id=uuid
Importar colección:
docs/postman/Law_firm_API.postman_collection.json
Acceder a /api/docs en la aplicación corriendo.
Se incluyen seeders para:
Usuarios:
- 1 admin:
admin/Admin123! - 1 operator:
operator/Oper123!
Abogados:
- 5 abogados (3 activos, 2 inactivos)
- Especializaciones: Laboral, Civil, Penal, Comercial, Fiscal
Casos Legales:
- 10 casos con diferentes estados y tipos
- 3 casos sin asignar (pending)
- 6 casos asignados a diferentes abogados
- Tipos: civil, criminal, labor, commercial
docker-compose up -dservices:
postgres: # PostgreSQL 15-alpine
api: # Node.js 18-alpine- DB_HOST: postgres (nombre del servicio)
- DB_USER: postgres
- DB_PASSWORD: postgres
- DB_NAME: law_firm
docker-compose up -d # Levantar
docker-compose down # Detener
docker-compose logs -f api # Ver logs
docker-compose ps # Ver estado
docker-compose exec api bash # Acceder al contenedorlaw_firm_API/
├── src/
│ ├── config/ # Configuración (DB, JWT, etc)
│ ├── constants/ # Constantes de la app
│ ├── controllers/ # Lógica de endpoints
│ ├── middlewares/ # Middlewares (auth, validación)
│ ├── models/ # Modelos Sequelize
│ ├── routes/ # Rutas API
│ ├── services/ # Lógica de negocio
│ ├── utils/ # Funciones utilitarias
│ ├── validations/ # Esquemas Joi
│ ├── app.js # Configuración Express
│ └── server.js # Punto de entrada
├── migrations/ # Migraciones DB
├── seeders/ # Datos de prueba
├── docs/
│ └── postman/ # Colección Postman
├── .env.example # Variables de ejemplo
├── .gitignore # Archivos ignorados
├── docker-compose.yml # Configuración Docker
├── Dockerfile # Imagen Docker
├── package.json # Dependencias
└── README.md # Este archivo
# Windows
netstat -ano | findstr :3000
taskkill /PID <PID> /F
# Linux/Mac
lsof -i :3000
kill -9 <PID>Verificar:
docker-compose ps # BD levantada
docker-compose logs db # Logs de PostgreSQLdocker-compose down -v # Elimina volumen
docker-compose up -d # Recrear
docker-compose exec api npm run db:resetLuz Coronado
Proyecto desarrollado como prueba técnica de backend.
MIT