Enlace de los manuales de usuario: Manuales de usuario
Este documento técnico está diseñado para proporcionar una explicación detallada y comprensiva de la arquitectura, las tecnologías, y los procesos implementados en el desarrollo de ElephanTalk. Sirve como guía exhaustiva para el equipo de desarrollo y como manual de referencia para los administradores del sistema y futuros colaboradores.
ElephanTalk es una plataforma de red social innovadora diseñada específicamente para estudiantes de informática y áreas afines, creada para fomentar la interacción y el intercambio de conocimientos en un entorno seguro y estimulante. La plataforma es dinámica, promoviendo activamente la discusión y colaboración en una variedad de temas tecnológicos y computacionales.
Una característica distintiva de ElephanTalk es la integración del modelo de aprendizaje automático Detoxify, reconocido en la comunidad de código abierto por su capacidad para analizar y detectar contenido tóxico en texto. Detoxify examina el tono y contenido de los mensajes en tiempo real, identificando y categorizando aquellos que podrían ser considerados abusivos, insultantes, o discriminatorios. Esta funcionalidad es esencial para mantener un ambiente de respeto y consideración, libre de las toxinas comúnmente encontradas en redes sociales tradicionales.
La implementación de Detoxify en ElephanTalk no solo mejora la moderación de contenido, sino que también proporciona a los usuarios una plataforma donde pueden expresarse libremente y de manera segura. Los mensajes y publicaciones son analizados automáticamente para detectar signos de toxicidad, ofreciendo una respuesta rápida y efectiva ante el abuso o acoso, lo cual es crucial para preservar la integridad de la comunidad.
Además, ElephanTalk incluirá funcionalidades avanzadas para la gestión de la moderación a través del modelo Detoxify. Esto abarcará desde la validación automática de comentarios y publicaciones hasta un sistema de reportes por parte de los usuarios, permitiendo denunciar contenido inapropiado. Estos reportes serán revisados por moderadores humanos en un proceso de verificación manual, asegurando así que incluso las sutilezas que el modelo automático podría pasar por alto sean adecuadamente gestionadas.
Para garantizar una experiencia óptima y el funcionamiento correcto de ElephanTalk en un entorno de producción, es esencial que los usuarios accedan a la plataforma mediante un navegador web actualizado. Esto asegura la compatibilidad con las tecnologías modernas utilizadas en el desarrollo de ElephanTalk y permite una interacción fluida y segura con todas sus funcionalidades.
Requisitos de Software:
1. Aplicaciones en producción
Para utilizar las aplicaciones del entorno ElephanTalk, es decir:
Únicamente es necesario lo siguiente:
Navegadores Web: Los usuarios deben utilizar la versión más reciente de cualquier navegador web principal para asegurar la plena funcionalidad de las características de ElephanTalk. Los navegadores recomendados incluyen:
Mantener el navegador actualizado es crucial no solo para la compatibilidad con ElephanTalk, sino también para beneficiarse de las últimas mejoras en seguridad y rendimiento que los navegadores modernos ofrecen.
Esta configuración mínima garantiza que todos los componentes interactivos, las visualizaciones dinámicas y las operaciones de moderación de contenido se ejecuten de manera eficiente, proporcionando una experiencia de usuario excepcional y libre de problemas técnicos.
2. Aplicaciones en entorno de desarrollo:
Para desarrollar y mantener el sistema de ElephanTalk, se deben cumplir con los siguientes requisitos de software:
Sistema Operativo:
Se recomienda utilizar Windows 10 o una versión posterior para garantizar la compatibilidad y el rendimiento óptimo de las herramientas de desarrollo. Alternativamente, macOS y las distribuciones recientes de Linux también son compatibles.
Node.js:
Python:
NestJS:
React:
FASTAPI:
Herramientas de Desarrollo:
Estos requisitos aseguran que los desarrolladores cuenten con un entorno de trabajo adecuado para implementar, probar y mantener las aplicaciones de ElephanTalk de manera eficiente.
Para el desarrollo de ElephanTalk, se seleccionaron diversas herramientas y tecnologías que facilitan la creación, prueba y despliegue de la plataforma. A continuación, se detalla cada uno de los componentes de software utilizados:
React.js: Utilizado para construir el frontend de la aplicación, React.js es una biblioteca de JavaScript para construir interfaces de usuario de forma eficiente y declarativa. React facilita la creación de componentes interactivos y reutilizables, ideal para la dinámica de una red social como ElephanTalk.
NestJS: Un framework progresivo para Node.js utilizado para construir aplicaciones de servidor eficientes y escalables. NestJS usa TypeScript y combina elementos de Programación Orientada a Objetos (POO), Programación Funcional y Programación Reactiva, proporcionando una arquitectura bien estructurada que es fácil de mantener.
MongoDB con Mongoose: MongoDB es un sistema de base de datos NoSQL que ofrece alta performance, alta disponibilidad y fácil escalabilidad. Mongoose es una biblioteca para MongoDB y Node.js que facilita la modelación de objetos y manejo de datos con una API sencilla y basada en esquemas para modelar la información de la aplicación.
FastAPI: Utilizado para el microservicio que maneja Detoxify, FastAPI es un framework moderno y rápido (de alto rendimiento) para construir APIs con Python 3.7+ basado en las mejores prácticas de tipo anotado. FastAPI facilita la creación de APIs robustas y eficientes que pueden manejar las solicitudes de análisis de contenido de ElephanTalk de manera efectiva.
Vite y Tailwind CSS: Vite es una herramienta de construcción de frontend que mejora significativamente la experiencia de desarrollo con su reinicio instantáneo del servidor. Tailwind CSS es un framework de CSS que permite diseñar rápidamente interfaces personalizadas sin salir del HTML, facilitando la creación de un diseño coherente y responsivo para ElephanTalk.
Versiones Específicas:
Estas herramientas y tecnologías han sido escogidas no solo por su robustez y escalabilidad, sino también por su compatibilidad y facilidad para integrarse entre sí, asegurando así un desarrollo fluido y un mantenimiento sencillo de ElephanTalk.
ElephanTalk implementa una combinación de patrones de diseño tanto en el frontend como en el backend para optimizar la arquitectura de la aplicación y mejorar la experiencia de desarrollo y usuario.
Frontend:
Composition Pattern y Higher Order Component (HOC) Pattern: Estos patrones se utilizan en React para mejorar la reutilización de la lógica y la composición de componentes. HOC permite envolver un componente dentro de otro, agregando o compartiendo funcionalidades, lo que resulta en una mejor separación de la lógica y la interfaz.
Observer Pattern: Este patrón facilita la comunicación entre los componentes cuando se produce un cambio de estado. Es esencial para manejar actualizaciones en tiempo real en la interfaz de usuario, especialmente útil en una red social donde los datos como mensajes y notificaciones cambian frecuentemente.
Backend:
Dependency Injection Pattern: Utilizado extensivamente en NestJS, este patrón permite desacoplar los componentes del sistema, facilitando un sistema más modular y testeable. Al inyectar dependencias, cada módulo no necesita conocer los detalles de las dependencias necesarias para operar, lo que simplifica la expansión y mantenimiento del backend.
Singleton Pattern: Este patrón asegura que una clase tenga una única instancia, y proporciona un punto de acceso global a ella. En ElephanTalk, se utiliza para manejar la configuración del sistema y la conexión a la base de datos, garantizando que solo exista una instancia de cada una por proceso.
Ambos (Frontend y Backend):
Justificación/Implementación del Uso en el Proyecto:
La adopción de estos patrones en ElephanTalk ha traído múltiples beneficios:
Mantenimiento y Evolución del Sistema: Los patrones como HOC y Dependency Injection permiten un mantenimiento más sencillo y una evolución sistemática sin grandes alteraciones en el sistema existente.
Reutilización de Componentes y Lógica: El uso de patrones como Composition y Observer en el frontend facilita la reutilización de la lógica y mejora la gestión de estado, lo que reduce errores y duplicación de código.
Flexibilidad y Escalabilidad: Los patrones de diseño implementados proporcionan una base sólida que ofrece flexibilidad en el desarrollo y escalabilidad del sistema, permitiendo adaptar fácilmente ElephanTalk a nuevas necesidades y tecnologías emergentes.
La implementación de estos patrones refleja un enfoque estructurado y bien pensado para el desarrollo de software, asegurando que ElephanTalk no solo cumpla con los requisitos actuales sino que también esté preparada para futuras expansiones y mejoras.
Configuración
Copiar el archivo .env.example
y renombrarlo a .env
. Es importante asegurarse de tener las siguientes variables de entorno:
# URL base de la API pública
VITE_PUBLIC_API_URL=""
# Cantidad de publicaciones por página para desplazamiento infinito
VITE_POSTS_PER_PAGE=10
Pruebas Para ejecutar las pruebas unitarias:
$ yarn run test
Para ejecutar las pruebas e2e:
$ yarn run test:e2e
Para ejecutar las pruebas e2e con interfaz gráfica:
$ yarn run test:e2e:open
Requisitos previos para pruebas e2e
Configurar las variables de entorno de prueba
Para poder ejecutar las pruebas e2e, es necesario crear el archivo cypress.env.json
en la raíz del proyecto, donde se configurarán las siguientes variables de entorno:
{
"AUTH_USER": "nombredeusuarioocorreo",
"AUTH_PASSWORD": "contraseña"
}
AUTH_USER
: Es el nombre de usuario o correo electrónico de un usuario válido y activo en la aplicación.
AUTH_PASSWORD
: Es la contraseña del usuario válido y activo en la aplicación.
Configurar la URL base de la aplicación
Es necesario que la aplicación esté en ejecución para poder ejecutar las pruebas e2e. Dado que la aplicación se construye con Vite, por defecto se ejecuta en el puerto 5173, por lo que la URL base configurada en Cypress es http://localhost:5173
. Sin embargo, si se desea cambiar esta URL base (por ejemplo, si la aplicación está ejecutándose en el puerto 3000), se debe ejecutar el comando de prueba e2e de la siguiente manera:
yarn run test:e2e --config baseUrl="http://localhost:3000"
Este proyecto consiste en dos servicios: una API de NestJS y una API de FastAPI. Ambos servicios están configurados para ejecutarse en contenedores Docker utilizando Docker Compose.
Requisitos
Configuración
Antes de construir y ejecutar los contenedores, asegúrate de tener el siguiente archivo .env
en la raíz del proyecto de la API de NestJS (./API/.env
):
MONGO_URI="mongodb://localhost:27017/tu-base-de-datos"
PORT=3000
JWT_SECRET="tu-secreto-jwt"
TOXICITY_URL="http://fastapi-service:8000"
TOXICITY_THRESHOLD=0.25
Asegúrate de actualizar los valores según sea necesario para tu entorno.
git clone https://github.com/tu-usuario/tu-repositorio.git
cd tu-repositorio
Navega al directorio del proyecto y asegúrate de tener el archivo .env
en la ubicación correcta (./API/.env
).
Construye y levanta los servicios usando Docker Compose.
docker-compose up --build
Esto construirá las imágenes Docker para ambos servicios y los levantará en sus respectivos puertos.
Servicios
http://localhost:3000
http://localhost:8000
Detalles del Docker Compose
El archivo docker-compose.yml
define dos servicios:
nestjs-api
: La API de NestJS.fastapi-service
: La API de FastAPI para moderación.Ambos servicios están conectados a una red Docker llamada backend-network
.
Dockerfile de NestJS API
El Dockerfile de la API de NestJS realiza los siguientes pasos:
package.json
y package-lock.json
y las instala..env
.3000
.Dockerfile de FastAPI
El Dockerfile de la API de FastAPI realiza los siguientes pasos:
requirements.txt
e instala las dependencias.8000
.Notas
.env
y los Dockerfiles según sea necesario.Ctrl+C
en la terminal donde están corriendo o ejecutar docker-compose down
para detener y eliminar los contenedores.¡Eso es todo! Ahora deberías tener tus servicios de NestJS y FastAPI corriendo en contenedores Docker listos para usar.
La herramienta "Projects" de GitHub ha sido esencial para organizar y dar seguimiento a cada error de manera estructurada en nuestro proyecto. Cada issue se ha creado como una tarjeta en el tablero de proyectos, con un título descriptivo, etiquetas relevantes y un responsable asignado para su solución. Este tablero ofrece un registro detallado de todos los problemas y errores encontrados durante el desarrollo y despliegue del aplicativo.
Cada issue incluye una descripción clara del problema, con información relevante como el mensaje de error, el archivo afectado, los pasos para reproducir el error, las causas identificadas y las acciones tomadas para solucionarlo. Se ha cuidado la claridad de los comentarios y soluciones, utilizando términos comprensibles y explicando el razonamiento detrás de cada solución implementada.
Las tarjetas se mueven a través de diferentes columnas que representan las etapas del ciclo de vida de un error, como "Backlog", "In Progress" y "Done", lo que permite una visualización clara del estado de cada error y facilita la colaboración entre los miembros del equipo. La documentación exhaustiva y clara ha sido priorizada para evitar confusiones y garantizar una experiencia fluida durante el desarrollo y pruebas del proyecto.
Enlace de GitHub Projects: Projects
Enlace a Taiga: Tablero de Taiga