kevocodes / ElephanTalk

Repositorio principal del proyecto ElephanTalk
https://elephantalk.vercel.app/
Apache License 2.0
0 stars 0 forks source link

Índice

Repositorios

Frontend Frontend Backend

Manuales de usuario

Enlace de los manuales de usuario: Manuales de usuario

Aspectos generales

Objetivos del Documento

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.

Descripción General

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.

Requerimientos del Sistema

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.

Software utilizado:

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.

Arquitectura del Sistema

Patrones de diseño

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:

Backend:

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:

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.

Diagrama de modelo de datos

no relation db

Guía de configuración

Configuración para el front end del sistema

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"

Configuración para el back end del sistema

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.

  1. Clona este repositorio en tu máquina local.
git clone https://github.com/tu-usuario/tu-repositorio.git
cd tu-repositorio
  1. Navega al directorio del proyecto y asegúrate de tener el archivo .env en la ubicación correcta (./API/.env).

  2. 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

Detalles del Docker Compose

El archivo docker-compose.yml define dos servicios:

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:

  1. Usa una imagen base con Node.js 20.
  2. Establece el directorio de trabajo.
  3. Copia los archivos package.json y package-lock.json y las instala.
  4. Copia el resto de los archivos de la aplicación.
  5. Copia el archivo .env.
  6. Compila el proyecto.
  7. Expone el puerto 3000.
  8. Define el comando para correr la aplicación.

Dockerfile de FastAPI

El Dockerfile de la API de FastAPI realiza los siguientes pasos:

  1. Usa una imagen base con Python 3.10.
  2. Establece el directorio de trabajo.
  3. Copia el archivo requirements.txt e instala las dependencias.
  4. Descarga y almacena el modelo de clasificación en una capa de la imagen.
  5. Copia el resto de los archivos de la aplicación.
  6. Expone el puerto 8000.
  7. Define el comando para correr la aplicación.

Notas

¡Eso es todo! Ahora deberías tener tus servicios de NestJS y FastAPI corriendo en contenedores Docker listos para usar.

Compatibilidad de licencias

Tipos de error

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

Tablero

Enlace a Taiga: Tablero de Taiga