250
MODERATION_SETUP.md
Normal file
250
MODERATION_SETUP.md
Normal file
@@ -0,0 +1,250 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user