251 lines
6.0 KiB
Markdown
251 lines
6.0 KiB
Markdown
# 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
|