|
Equipo — The Good App
Mail 10 — Continuación del Mail 9 (moderación y UX de errores)
|
|
Hola equipo,
Este correo continúa la línea del Mail 9 (plan-frontend/mailnine.html): después del trabajo de suscripciones y AdMob, en este ciclo se incorporó moderación de comentarios y noticias, configuración centralizada en el panel admin (sin depender de variables de entorno para la IA), política de strikes y bloqueo de cuentas, y se alineó la app Flutter para mostrar mensajes de API en el idioma del dispositivo cuando el backend envía texto en inglés y español.
|
1) API Nest (good-app): moderación y bloqueos
- La configuración de moderación (activación, lista extra, OpenAI opcional, umbral de rechazos, bloqueo automático) se lee desde la tabla Setting con clave
content_moderation (JSON), no desde .env.
- En comentarios y noticias, ante contenido rechazado la API devuelve 400 con
message y messageEs, lista matchedTerms, contador de strikes y si el usuario quedó bloqueado en ese intento.
- Campos nuevos en User:
contentModerationStrikeCount y contentModerationBlockedAt. Migración Prisma aplicable con npx prisma migrate deploy.
- Login, refresh, social login y JWT rechazan sesiones de usuarios bloqueados por moderación, con código
CONTENT_MODERATION_BLOCKED y mensajes bilingües.
- El filtro de formato de errores en rutas
/api/auth/* ahora reenvía también messageEs dentro de error para que el cliente pueda localizar sin parsear cuerpos distintos.
|
2) Admin Laravel (admin-goodapp)
- Nueva pestaña Content moderation en Configuración: formulario que persiste el JSON en
Setting (misma base que la API).
- Listado de usuarios bloqueados por moderación con acción Desbloquear (POST dedicado); al desbloquear se reinicia el contador de strikes.
|
3) Flutter (flutter-good): errores según idioma de la app
- Antes, muchos fallos mostraban solo el mensaje en inglés (o fallback fijo) porque
ApiException guardaba una sola cadena.
- Ahora se parsean respuestas con
message + messageEs (y error.messageEs en auth); AuthController.messageForError elige la cadena según localeName de AppLocalizations.
- Repositorios de auth, suscripciones, comunidades, crear noticia/proyecto y comentarios usan un parser común; pantallas relevantes (login, alta de comentarios, suscripción, etc.) ya pasan por ese camino donde aplica.
|
4) Documentación y despliegue
Este archivo vive junto al Mail 9 en good-app/plan-frontend/. Recordatorio: aplicar migraciones en el entorno que comparte base entre API y admin antes de usar bloqueos en producción.
|
|
Saludos,
|
Correo interno — avance técnico (Mail 10)
|