Chat APP ITAcademy por Claudio Martin es una aplicación de chat en tiempo real construida con Node.js, Express, MongoDB, Socket.IO y Google OAuth para autenticación segura. Desarrollada íntegramente en Typescript.
El frontend ha sido desarrollado con Bootstrap, CSS y HTML.
Es perfecta para aprender sobre desarrollo full-stack y como integrar diferentes tecnologías.
La entrega hace énfasis en el desarrollo de una API REST que integre un servidor Socket IO para permitir la comunicación en tiempo real con los demás usuarios, además de aplicar autenticación con JWT, Google OAUTH20, y poder ingresar como usuario invitado.
Como funcionalidades extra he desarrollado un buscador de usuarios conectados, salas de chat disponibles, y posibilidad de crear salas de chat a las que todos pueden unirse, y otras salas para conversaciones privadas solo accesibles para los 2 usuarios que la integren. Además, he aplicado tanto la función debounce para retardar el evento de busqueda de los inputs, asi como una función throttle para actualizar las listas de usuarios y salas disponibles. Y la persistencia de datos con mongoose. Así he podido integrar varias de las entregas anteriores del curso.
Durante el registro de un usuario, he integrado multer para el manejo de la carga de fotos y su posterior utilización dentro de la app.
No ha sido fácil, pero el resultado hace que haya valido la pena. Espero que os guste.
- Mensajería en tiempo real usando Socket.IO.
- Autenticación segura con JWT y Google OAuth.
- Persistencia de datos con MongoDB.
- Interfaz de usuario intuitiva con Bootstrap para una experiencia de usuario fluida.
Sigue estos pasos para configurar y ejecutar el proyecto en tu entorno local:
# Clona el repositorio
git clone https://github.com/ClaudioMartinH/7.1-claudimartin-chat-app.git
# Instala las dependencias
npm run install
Necesitarás crear un archivo .env
en la carpeta /backend
que contenga las siguientes variables:
MONGO_DB_URI=tu_string_de_conexion a mongodb
PORT=5050
JWT_SECRET=your_secret
SESSION_SECRET=your_session_secret
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
He creado comandos desde la raíz del proyecto para que se ejecute sin necesidad de navegar por las diferentes carpetas.
Una vez se hayan instalado las dependecias necesarias, incluso se copia el archivo .env
de manera automatizada
Tan solo será necesario:
# Compilar el proyecto completo y copiar las variables de entorno en dist/
npm run build
# y finalmente, para ejecutar el servidor (server.js)
npm start
Con estos sencillos comandos, una vez ejecutados uno a uno y en el orden establecido aquí, tendremos el proyecto construido y funcionando pinchando el siguiente enlace:
- Node.js - Entorno de ejecución de JavaScript.
- Express - Framework minimalista para servidores web.
- MongoDB (mongoose) - Base de datos NoSQL para almacenar los mensajes y usuarios.
- Socket.IO - Librería para mensajería en tiempo real.
- JWT - Autenticación basada en JSON Web Tokens.
- Google OAuth - Autenticación a través de cuentas de Google.
- Bootstrap - CSS - HTMl para el frontend
POST /auth/google - Redirige a la página de inicio de sesión de Google OAuth.
GET /auth/google/callback - Callback de Google OAuth después de autenticarse.
GET /api/users/all Obtiene todos los usuarios registrados.
GET /api/users/search/id/:id Obtiene un usuario por su ID.
GET /api/users/search/userName/:userName Busca un usuario por su nombre de usuario.
POST /api/users/login Autentica a un usuario existente mediante correo electrónico y contraseña.
POST /api/users/signup Registra un nuevo usuario. Soporta la carga de una imagen de perfil. Request Body: FormData (username, password, profilePic)
POST /api/users/guest-login Autenticación como usuario invitado sin necesidad de registro.
POST /api/users/logout Cierra sesión del usuario actual.
PUT /api/users/update/:id Actualiza la información de un usuario por su ID. Request Body: JSON con los campos a actualizar.
Rutas para gestionar las salas de chat en la aplicación.
GET /rooms/all Obtiene todas las salas de chat disponibles.
POST /rooms/create Crea una nueva sala de chat. Request Body: JSON con el nombre y descripción de la sala.
GET /rooms/id/:id Obtiene una sala de chat por su ID.
GET /rooms/name/:name Obtiene una sala de chat por su nombre.
POST /rooms/private Crea una sala de conversación privada. Request Body: JSON con los usuarios que participarán en la sala privada.
DELETE /api/users/delete/:id Elimina un usuario por su ID.
Rutas para gestionar los mensajes dentro de las salas y entre los usuarios.
GET /messages/all Obtiene todos los mensajes de la aplicación.
GET /messages/rooms/messages/:name Obtiene todos los mensajes de una sala por su nombre.
GET /messages/users/messages/:id Obtiene todos los mensajes enviados por un usuario específico mediante su ID.
POST /messages/create Crea un nuevo mensaje. Request Body: JSON con el contenido del mensaje, ID de usuario y sala.
DELETE /messages/delete/:id Elimina un mensaje por su ID.
DELETE /messages/users/delete/:id Elimina todos los mensajes de un usuario específico.
Para ejecutar las 9 suites de pruebas con más de 90 pruebas unitarias, utiliza el siguiente comando:
npm test
Se adjunta en carpeta /backend/requests
las pruebas a los diferentes Endpoints de la API, además de algunas realizadas durante el desarrollo con REST CLIENT
midudev ASEGURA TU API CON JWT
midudev AUTENTICACIÓN JWT COOKIES
midudev CHAT EN TIEMPO REAL
falconmasters CURSO BOOTSTRAP
eduardo arias GOOGLE oAuth20
jon mircha CURSO DESARROLLO WEB NODEJS Y EXPRESS