Equipo — The Good App

Mail 10 — Continuacion del Mail 9 (moderacion y UX de errores)

Hola equipo,

Este correo continua la linea del Mail 9 (plan-frontend/mailnine.html): despues del trabajo de suscripciones y AdMob, en este ciclo se incorporo moderacion de comentarios y noticias, configuracion centralizada en el panel admin (sin depender de variables de entorno para la IA), politica de strikes y bloqueo de cuentas, y se alineo la app Flutter para mostrar mensajes de API en el idioma del dispositivo cuando el backend envia texto en ingles y espanol.

1) API Nest (good-app): moderacion y bloqueos

  • La configuracion de moderacion (activacion, lista extra, OpenAI opcional, umbral de rechazos, bloqueo automatico) 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 quedo bloqueado en ese intento.
  • Campos nuevos en User: contentModerationStrikeCount y contentModerationBlockedAt. Migracion Prisma aplicable con npx prisma migrate deploy.
  • Login, refresh, social login y JWT rechazan sesiones de usuarios bloqueados por moderacion, con codigo CONTENT_MODERATION_BLOCKED y mensajes bilingues.
  • El filtro de formato de errores en rutas /api/auth/* ahora reenvia tambien messageEs dentro de error para que el cliente pueda localizar sin parsear cuerpos distintos.

2) Admin Laravel (admin-goodapp)

  • Nueva pestana Content moderation en Configuracion: formulario que persiste el JSON en Setting (misma base que la API).
  • Listado de usuarios bloqueados por moderacion con accion Desbloquear (POST dedicado); al desbloquear se reinicia el contador de strikes.

3) Flutter (flutter-good): errores segun idioma de la app

  • Antes, muchos fallos mostraban solo el mensaje en ingles (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 segun localeName de AppLocalizations.
  • Repositorios de auth, suscripciones, comunidades, crear noticia/proyecto y comentarios usan un parser comun; pantallas relevantes (login, alta de comentarios, suscripcion, etc.) ya pasan por ese camino donde aplica.

4) Documentacion 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 produccion.

Saludos,

Correo interno — avance tecnico (Mail 10)