Skip to content

About

API REST para la gestión de abogados y casos legales en un bufete jurídico.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Law Firm API

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.


Tecnologías

  • Node.js 18+
  • Express.js
  • PostgreSQL (Docker Compose)
  • Sequelize ORM
  • JWT (JSON Web Tokens)
  • Joi (Validación de datos)
  • Docker & Docker Compose

Prerequisitos

  • Node.js 18+
  • Docker y Docker Compose

Instalación

  1. Clonar repositorio
git clone <url-del-repositorio>
cd law_firm_API
  1. Instalar dependencias
npm install
  1. Configurar variables de entorno
cp .env.example .env
  1. Levantar la base de datos con Docker
docker-compose up -d
  1. Ejecutar migraciones
npm run db:migrate

5.1 Ejecutar migraciones con Docker:

docker-compose exec api npm run db:reset
  1. Ejecutar seeders
npm run db:seed

Configuración de Variables de Entorno

Crea un archivo .env basado en .env.example:

Con Docker:

DB_HOST=postgres

Ejecución

Desarrollo (local)

npm run dev

Producción (local)

npm start

Con Docker

docker-compose up -d

Verificar contenedores:

docker-compose ps

Ver logs:

docker-compose logs -f api

Detener:

docker-compose down

Reset de Base de Datos

El siguiente comando elimina todas las tablas, vuelve a ejecutar las migraciones y carga los datos de prueba:

npm run db:reset

Manualmente:

npm run db:undo       # Deshacer migraciones
npm run db:migrate    # Ejecutar migraciones
npm run db:seed       # Cargar datos de prueba

Credenciales de Prueba

Después de ejecutar los seeders, usa estas credenciales para autenticarte:

Usuario Password Rol
admin Admin123! admin
operator Oper123! operator

Autenticación

La API utiliza autenticación basada en JWT (JSON Web Tokens).

Login

POST /api/auth/login
Content-Type: application/json

{
  "username": "admin",
  "password": "Admin123!"
}

Respuesta:

{
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  }
}

Usar Token en Requests

Incluir en header:

Authorization: Bearer <tu_token_jwt>

Endpoints

Abogados

  • 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

Casos Legales

  • 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)

Reportes

  • GET /api/reports/lawyers/:id/cases - Obtener casos y estadísticas de un abogado

Filtros y Paginación

Paginación

?page=1&limit=10

Filtros por Lawyer

?status=active&specialization=Laboral

Filtros por Legal Cases

?status=pending&case_type=civil&lawyer_id=uuid

Documentación de API

Postman

Importar colección:

docs/postman/Law_firm_API.postman_collection.json

OpenAPI/Swagger (opcional)

Acceder a /api/docs en la aplicación corriendo.


Datos de Prueba (Seeders)

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

Levantar todo con un comando

docker-compose up -d

Estructura

services:
  postgres:   # PostgreSQL 15-alpine
  api:        # Node.js 18-alpine

Variables de entorno automáticas

  • DB_HOST: postgres (nombre del servicio)
  • DB_USER: postgres
  • DB_PASSWORD: postgres
  • DB_NAME: law_firm

Comandos útiles

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 contenedor

Estructura del Proyecto

law_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

Troubleshooting

Error: Puerto 3000 en uso

# Windows
netstat -ano | findstr :3000
taskkill /PID <PID> /F

# Linux/Mac
lsof -i :3000
kill -9 <PID>

Error: BD no conecta

Verificar:

docker-compose ps          # BD levantada
docker-compose logs db     # Logs de PostgreSQL

Resetear BD con Docker

docker-compose down -v     # Elimina volumen
docker-compose up -d       # Recrear
docker-compose exec api npm run db:reset

Autor

Luz Coronado

Proyecto desarrollado como prueba técnica de backend.


Licencia

MIT

About

API REST para la gestión de abogados y casos legales en un bufete jurídico.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages