Added two new apis

Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
2026-05-04 17:37:08 -06:00
parent 2be72ae7be
commit b3788beedd
30 changed files with 2736 additions and 2 deletions

250
MODERATION_SETUP.md Normal file
View 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