Saltar al contenido principal

Configuración del Sistema

Endpoints exclusivos para administradores para gestionar la disponibilidad de endpoints, configuración de servicios y límites del sistema.

Descripción General

Las APIs de Configuración del Sistema proporcionan control administrativo sobre la disponibilidad de endpoints, configuraciones de servicios y límites de recursos. Estos endpoints están restringidos a usuarios con rol de ADMIN y están montados bajo /api/v1/config (configurable mediante la variable de entorno API_PREFIX).

Configuración Base

Resumen de Endpoints

MétodoEndpointDescripción
GET/configRecupera todas las configuraciones de endpoints del sistema
POST/configRecupera una configuración de endpoint específica por ruta de endpoint
PUT/configActualiza el estado de disponibilidad de una configuración de endpoint

Obtener Todas las Configuraciones

GET /config

Recupera todas las configuraciones de endpoints del sistema.

Autenticación: Solo administradores (token Bearer requerido)

Ejemplo de Uso:

curl -X GET http://localhost:3000/api/v1/config \
-H "Authorization: Bearer <token_acceso_admin>"

✅ 200 OK - Configuraciones Obtenidas

  • Content-Type: application/json

  • Descripción: Todas las configuraciones de endpoints obtenidas exitosamente

  • Ejemplo:

    [
    {
    "id": "uuid",
    "endpoint": "/users",
    "available": true,
    "limit": null,
    "createdAt": "2024-01-01T00:00:00.000Z",
    "updatedAt": "2024-01-01T00:00:00.000Z"
    }
    ]

❌ 401 No Autorizado

  • Content-Type: application/json

  • Descripción: No se proporcionó token

  • Ejemplo:

    {
    "message": "No se proporcionó token"
    }

❌ 403 Prohibido

  • Content-Type: application/json

  • Descripción: El usuario no es administrador

  • Ejemplo:

    {
    "message": "El usuario no es administrador"
    }

❌ 500 Error Interno del Servidor

  • Content-Type: application/json

  • Descripción: Error de base de datos

  • Ejemplo:

    {
    "message": "Error de base de datos"
    }

Obtener Configuración por Endpoint

POST /config

Recupera una configuración de endpoint específica por ruta de endpoint.

Cuerpo de la Solicitud:

{
"endpoint": "/users"
}

Ejemplo de Uso:

curl -X POST http://localhost:3000/api/v1/config \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token_acceso_admin>" \
-d '{
"endpoint": "/users"
}'

✅ 200 OK - Configuración Obtenida

  • Content-Type: application/json

  • Descripción: Configuración obtenida exitosamente

  • Ejemplo:

    {
    "id": "uuid",
    "endpoint": "/users",
    "available": true,
    "limit": null,
    "createdAt": "2024-01-01T00:00:00.000Z",
    "updatedAt": "2024-01-01T00:00:00.000Z"
    }

❌ 401 No Autorizado

  • Content-Type: application/json

  • Descripción: No se proporcionó token

  • Ejemplo:

    {
    "message": "No se proporcionó token"
    }

❌ 404 No Encontrado

  • Content-Type: application/json

  • Descripción: Configuración no encontrada

  • Ejemplo:

    {
    "message": "Configuración no encontrada"
    }

❌ 500 Error Interno del Servidor

  • Content-Type: application/json

  • Descripción: Error de base de datos

  • Ejemplo:

    {
    "message": "Error de base de datos"
    }

Actualizar Configuración

PUT /config

Actualiza el estado de disponibilidad de una configuración de endpoint.

Cuerpo de la Solicitud:

{
"endpoint": "/users",
"available": false
}

Ejemplo de Uso:

curl -X PUT http://localhost:3000/api/v1/config \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <token_acceso_admin>" \
-d '{
"endpoint": "/users",
"available": false
}'

✅ 200 OK - Configuración Actualizada

  • Content-Type: application/json

  • Descripción: Configuración actualizada exitosamente

  • Ejemplo:

    {
    "message": "Configuración <id> actualizada exitosamente"
    }

Nota: Este endpoint actualiza automáticamente la caché de configuración en memoria después de actualizar.

❌ 400 Solicitud Incorrecta - Falta Endpoint

  • Content-Type: application/json

  • Descripción: Falta el parámetro endpoint

  • Ejemplo:

    {
    "message": "El parámetro endpoint es requerido"
    }

❌ 401 No Autorizado

  • Content-Type: application/json

  • Descripción: No se proporcionó token

  • Ejemplo:

    {
    "message": "No se proporcionó token"
    }

❌ 404 No Encontrado

  • Content-Type: application/json

  • Descripción: Configuración no encontrada

  • Ejemplo:

    {
    "message": "Configuración no encontrada"
    }

❌ 500 Error Interno del Servidor

  • Content-Type: application/json

  • Descripción: Error de base de datos

  • Ejemplo:

    {
    "message": "Error de base de datos"
    }

Límite de Asistente

Resumen de Endpoints

MétodoEndpointDescripción
GET/config/assistant/limitRecupera el límite actual de creación de asistentes
PUT/config/assistant/limit/:limitActualiza el límite de creación de asistentes

Obtener Límite de Asistente

GET /config/assistant/limit

Recupera el límite actual de creación de asistentes.

Ejemplo de Uso:

curl -X GET http://localhost:3000/api/v1/config/assistant/limit \
-H "Authorization: Bearer <token_acceso_admin>"

✅ 200 OK - Límite de Asistente Obtenido

  • Content-Type: application/json

  • Descripción: Límite actual de asistentes obtenido exitosamente

  • Ejemplo:

    {
    "limit": 100
    }

❌ 400 Solicitud Incorrecta - Límite No Establecido

  • Content-Type: application/json

  • Descripción: Límite no establecido en la configuración

  • Ejemplo:

    {
    "message": "Límite no establecido en la configuración"
    }

❌ 404 No Encontrado

  • Content-Type: application/json

  • Descripción: Configuración de asistente no encontrada

  • Ejemplo:

    {
    "message": "Configuración de asistente no encontrada"
    }

❌ 500 Error Interno del Servidor

  • Content-Type: application/json

  • Descripción: Error de base de datos

  • Ejemplo:

    {
    "message": "Error al obtener límite de asistente"
    }

Actualizar Límite de Asistente

PUT /config/assistant/limit/:limit

Actualiza el límite de creación de asistentes.

Parámetros de Ruta:

  • limit (entero): El nuevo valor del límite (debe ser ≥ 1)

Ejemplo de Uso:

curl -X PUT http://localhost:3000/api/v1/config/assistant/limit/200 \
-H "Authorization: Bearer <token_acceso_admin>"

✅ 200 OK - Límite Actualizado

  • Content-Type: application/json

  • Descripción: Límite de asistente actualizado exitosamente

  • Ejemplo:

    {
    "message": "Límite actualizado exitosamente"
    }

Reglas de Validación:

  • El límite debe ser un entero ≥ 1
  • El límite no puede ser menor que el número actual de asistentes
  • Actualiza automáticamente la caché después de actualizar

❌ 400 Solicitud Incorrecta - Límite Inválido

  • Content-Type: application/json

  • Descripción: Valor de límite inválido o límite menor que los asistentes actuales

  • Ejemplo:

    {
    "message": "El límite debe ser al menos 1"
    }

❌ 404 No Encontrado

  • Content-Type: application/json

  • Descripción: Configuración de asistente no encontrada

  • Ejemplo:

    {
    "message": "Configuración de asistente no encontrada"
    }

❌ 500 Error Interno del Servidor

  • Content-Type: application/json

  • Descripción: Error de base de datos

  • Ejemplo:

    {
    "message": "Error de base de datos"
    }

Modelo de Datos de Configuración

El modelo Configuration almacena la configuración de endpoints en PostgreSQL con el siguiente esquema:

CampoTipoDescripción
idUUIDClave primaria
endpointString(50)Ruta del endpoint API
availableBooleanSi el endpoint está habilitado (default: true)
limitIntegerLímite de recurso opcional (default: 1)
createdAtTimestampHora de creación del registro
updatedAtTimestampHora de última actualización del registro

Sistema de Disponibilidad de Endpoints

El sistema utiliza middleware para hacer cumplir la disponibilidad de endpoints antes de procesar solicitudes:

  1. Verificación de Caché: Lee de configurationsCache en memoria para rendimiento
  2. Coincidencia de Prefijos: Utiliza coincidencia de prefijo más largo para encontrar la configuración aplicable
  3. Aplicación de Disponibilidad: Devuelve 404 si el endpoint está deshabilitado

Gestión de Caché

La caché se gestiona a través de tres funciones:

  • getConfigurationsCache(): Devuelve la caché actual
  • setConfigurationsCache(value): Establece el valor de la caché
  • updateConfigurationsCache(): Actualiza la caché desde la base de datos

Importante: La caché se actualiza automáticamente cuando las configuraciones se actualizan a través de la API, pero no cuando se modifican directamente en la base de datos.

Aplicación de Límites de Asistente

El middleware assistantlimitReached hace cumplir los límites de creación comparando el conteo actual de asistentes con el límite configurado. Cuando se alcanza el límite, devuelve HTTP 429 "Limit reached".

Autenticación

Todos los endpoints requieren autenticación JWT con rol de ADMIN:

Authorization: Bearer <admin-jwt-token>

Los intentos de acceso no autorizado se registran y pueden activar alertas de seguridad.

Notas

  • Todos los endpoints de configuración requieren autoridad de ADMIN
  • El sistema utiliza coincidencia de prefijos con preferencia de coincidencia más larga para control jerárquico de endpoints
  • La caché se actualiza automáticamente cuando las configuraciones se actualizan a través de la API
  • El entorno de prueba usa API_PREFIX vacío mientras que producción usa el prefijo configurado