# 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: ```bash # Verificar conexión telnet localhost 5672 ``` ### 2. MongoDB Debe estar ejecutándose y accesible: ```bash # Verificar conexión mongosh --eval "db.version()" ``` ### 3. Python 3.8+ ```bash python --version ``` ### 4. Dependencias del Proyecto Las dependencias ya están en `requirements.txt`: ```bash 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: ```bash 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: ```javascript // 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: ```bash # 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) ```bash 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 ```bash 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 ```bash curl http://localhost:8003/health ``` Respuesta esperada: ```json { "status": "healthy", "service": "Moderation API" } ``` ### 2. Información de la API ```bash curl http://localhost:8003/ ``` ### 3. Documentación Interactiva Abre en tu navegador: - http://localhost:8003/docs (Swagger UI) - http://localhost:8003/redoc (ReDoc) ### 4. Probar un endpoint ```bash 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`: ```python 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: ```bash 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