Files
VoxPopuli/MODERATION_SETUP.md
2026-05-04 17:37:08 -06:00

6.0 KiB

Guía de Instalación - API de Moderación

Verificar Requisitos Previos

La API de Moderación requiere que ya tengas instalados y funcionando:

1. RabbitMQ

Debe estar ejecutándose con una instancia ya configurada:

# Verificar conexión
telnet localhost 5672

2. MongoDB

Debe estar ejecutándose y accesible:

# Verificar conexión
mongosh --eval "db.version()"

3. Python 3.8+

python --version

4. Dependencias del Proyecto

Las dependencias ya están en requirements.txt:

pip install -r requirements.txt

Instalación de la API de Moderación

Paso 1: Actualizar dependencias (si es necesario)

La API utiliza las siguientes librerías (ya incluidas en requirements.txt):

  • fastapi - Framework web
  • uvicorn - Servidor ASGI
  • pydantic - Validación de datos
  • pika - Cliente de RabbitMQ
  • pymongo - Driver de MongoDB

Si necesitas instalarlas manualmente:

pip install fastapi uvicorn pydantic pika pymongo

Paso 2: Verificar estructura de directorios

Asegúrate que existan los siguientes directorios:

src/
├── domain/
│   └── moderations.py                    ✓ Creado
├── application/
│   ├── ports/
│   │   └── moderation_repository.py      ✓ Creado
│   └── services/
│       └── moderation_services.py        ✓ Creado
├── consumers/
│   └── moderation_consumer.py            ✓ Creado
└── infrastructure/
    ├── adapters/
    │   └── moderation_repository_mongo.py ✓ Creado
    └── api/
        └── moderations/                   ✓ Creado
            ├── __init__.py
            ├── app.py
            ├── router.py
            ├── moderations.py
            ├── schemas.py
            └── root.py

Paso 3: Actualizar archivo principal

El archivo src/main.py ya fue actualizado para incluir:

  • ✓ Importación de la API de Moderación
  • ✓ Función run_moderations_api()
  • ✓ Función run_moderations_consumer()
  • ✓ Threads para ejecutar ambos componentes

Paso 4: Configurar MongoDB (si es necesario)

Si MongoDB no está configurado, crea las colecciones:

// En mongosh o cliente MongoDB
use voxpopuli

// Las colecciones se crearán automáticamente al insertar datos
// Pero puedes pre-crearlas si lo prefieres:
db.createCollection("moderation_actions")
db.createCollection("moderation_logs")

// Crear índices para mejor rendimiento
db.moderation_actions.createIndex({ "action_id": 1 })
db.moderation_actions.createIndex({ "moderator_id": 1 })
db.moderation_actions.createIndex({ "target_id": 1 })
db.moderation_logs.createIndex({ "action_id": 1 })

Paso 5: Configurar RabbitMQ (si es necesario)

La cola se crea automáticamente, pero si quieres pre-crearla:

# Acceder a RabbitMQ Management Console
# http://localhost:15672 (usuario: guest, password: guest)

# O via CLI:
rabbitmqctl declare_queue moderation_queue -d true

Ejecutar la API

Opción 1: Ejecutar todo (Recomendado)

python src/main.py

Esto iniciará automáticamente:

  • API de Usuarios (8000)
  • API de Reportes (8001)
  • API de Notificaciones (8002)
  • API de Moderación (8003) ← NUEVA
  • Todos los consumidores (incluyendo Moderación)

Opción 2: Ejecutar solo la API de Moderación

cd src
python -c "from infrastructure.api.moderations.app import create_app; import uvicorn; app = create_app(); uvicorn.run(app, host='0.0.0.0', port=8003)"

Verificar que funciona

1. Health Check

curl http://localhost:8003/health

Respuesta esperada:

{
    "status": "healthy",
    "service": "Moderation API"
}

2. Información de la API

curl http://localhost:8003/

3. Documentación Interactiva

Abre en tu navegador:

4. Probar un endpoint

curl -X POST http://localhost:8003/moderation/reports/delete \
  -H "Content-Type: application/json" \
  -d '{
    "moderator_id": 1,
    "report_id": "test-report-123",
    "reason": "Contenido inapropiado",
    "description": "Test description"
  }'

Solucionar Problemas

Error: "Connection refused" a RabbitMQ

Error: [Errno 111] Connection refused

Solución:

  • Verifica que RabbitMQ esté ejecutándose
  • Verifica el host y puerto en core/config.py

Error: "ConnectionFailure" a MongoDB

Error: ServerSelectionTimeoutError

Solución:

  • Verifica que MongoDB esté ejecutándose
  • Verifica la configuración de conexión en infrastructure/adapters/persistence/mongodb.py

Error: "Port 8003 already in use"

Error: [Errno 48] Address already in use

Solución: Cambia el puerto en main.py:

def run_moderations_api():
    uvicorn.run(
        app_moderations,
        host=ConfSettings.host,
        port=8004,  # Cambiar puerto aquí
        ...
    )

Los eventos no se procesan

Causas posibles:

  1. Consumer no está ejecutándose

    • Verifica que run_moderations_consumer() esté ejecutándose
    • Revisa los logs del consumer
  2. Cola no existe

    • Se crea automáticamente al enviar el primer evento
    • Verifica en RabbitMQ Management Console
  3. MongoDB no está guardando datos

    • Verifica que moderation_actions colección exista
    • Revisa permisos de MongoDB

Logs

Los logs se guardarán en:

src/logs/

Para ver logs en tiempo real:

tail -f src/logs/moderation_consumer.log

Próximos Pasos

  1. Integrar autenticación JWT para moderadores
  2. Crear dashboard para visualizar acciones
  3. Agregar notificaciones a usuarios afectados
  4. Implementar auditoría más detallada
  5. Agregar rate limiting por moderador

Contacto y Soporte

Para problemas con la instalación:

  1. Revisa logs en src/logs/
  2. Verifica configuración en src/core/config.py
  3. Consulta MODERATION_API.md para arquitectura
  4. Revisa MODERATION_API_EXAMPLES.json para ejemplos