Este proyecto se a desplegadoe en linea, mediante VERCEL que es un plataforma que aloja datos en la nube y se podra visualizar atravez de este Link:(https://chat-converter-frontend.vercel.app/)
Este proyecto es una aplicación web de chat peer-to-peer que incluye un convertidor de divisas en tiempo real utilizando una API externa. Utiliza WebSockets para la comunicación en tiempo real y PostgreSQL para el almacenamiento de datos.
- Chat peer-to-peer en tiempo real
- Convertidor de divisas integrado utilizando la API de cambio.today
- Interfaz de usuario intuitiva construida con React y Vite
- Almacenamiento de historial de chat y conversiones en PostgreSQL
- Pantalla de bienvenida personalizada
- Frontend:
- React
- Vite (para el build y desarrollo)
- Tailwind CSS para estilos
- Backend:
- Node.js con Express
- Base de Datos: PostgreSQL (alojada en la nube)
- Comunicación en tiempo real: Socket.io
- ORM: Prisma
- API de Conversión de Divisas: cambio.today
- Node.js (versión 14.0 o superior)
- PostgreSQL (versión 12.0 o superior)
- NPM o Yarn
- Clave API de cambio.today
-
Clona el repositorio:
git clone https://github.com/tu-usuario/chat-currency-converter.git cd chat-currency-converter
-
Instala las dependencias:
# Instalar dependencias del backend cd backend npm install # Instalar dependencias del frontend cd ../frontend npm install
-
Configura las variables de entorno: Crea un archivo
.env
en la carpetabackend
y añade las siguientes variables:DATABASE_URL="postgresql://usuario:contraseña@localhost:5432/nombre_db" PORT=3000 CURRENCY_API_KEY=tu_clave_api_de_cambio_today BASE_URL_CURRENCY=https://api.cambio.today/v1/quotes
-
Configura la base de datos:
cd backend npx prisma migrate dev
-
Inicia la aplicación:
# Inicia el backend cd backend npm run dev # En otra terminal, inicia el frontend cd frontend npm run dev
- Abre tu navegador y ve a
http://localhost:5173
(o el puerto que Vite esté usando) - Serás recibido por la pantalla de bienvenida del Chat de Divisas
- Ingresa tu nombre en el campo proporcionado
- Haz clic en "Acceder al Chat" para entrar en la sala de chat principal
- Comienza a chatear y usa el convertidor de divisas integrado según sea necesario
La aplicación comienza con una pantalla de bienvenida atractiva que introduce a los usuarios al Chat de Divisas:
Características de la pantalla de bienvenida:
- Título prominente: "Bienvenido al Chat de Divisas"
- Breve descripción del propósito del chat
- Campo de entrada para que el usuario ingrese su nombre
- Botón "Acceder al Chat" para entrar a la sala principal
- Fondo con video relacionado a finanzas y trading (con imagen de respaldo)
La pantalla de bienvenida está implementada como un componente React llamado WelcomeChat
. Aquí se detallan sus principales características y cómo se integra con el resto de la aplicación:
-
Gestión del Estado:
- Utiliza el hook personalizado
useStore
para acceder y modificar el estado global de la aplicación. - Maneja localmente el estado del nombre ingresado usando
useState
.
- Utiliza el hook personalizado
-
Validación del Nombre de Usuario:
- Implementa múltiples validaciones para asegurar un nombre de usuario válido:
- No permite nombres vacíos
- Requiere una longitud mínima de 3 caracteres
- Solo permite letras y números en el nombre
- Implementa múltiples validaciones para asegurar un nombre de usuario válido:
-
Manejo del Envío del Formulario:
- Previene el comportamiento por defecto del formulario.
- Realiza las validaciones mencionadas antes de procesar el nombre.
- Si el nombre es válido, lo establece en el estado global usando
setUserName
.
-
Transición al Chat:
- Utiliza
useEffect
para detectar cambios en el nombre de usuario. - Cuando se establece un nombre válido, cambia el estado
chatStarted
atrue
. - Este cambio de estado desencadena la renderización del componente principal de chat.
- Utiliza
-
Diseño Responsivo:
- Utiliza Tailwind CSS para un diseño adaptable.
- Incluye un video de fondo en dispositivos más grandes y lo oculta en móviles.
-
Accesibilidad:
- Incluye etiquetas y atributos para mejorar la accesibilidad del formulario.
El componente Chat
es el núcleo de la interfaz de usuario de la aplicación:
const Chat = () => {
return (
<div className="rounded-lg flex justify-center items-center w-[150vh] bg-gray-100">
<div className="bg-white rounded-lg shadow p-4 my-4 w-[140vh]">
<div className="flex flex-col h-[80vh] overflow-y-auto">
<MessageList />
</div>
<MessageInput />
</div>
</div>
);
};
Características clave:
- Utiliza Tailwind CSS para estilos responsivos
- Implementa un diseño de columna flexible con desplazamiento vertical
- Incluye dos componentes principales:
MessageList
yMessageInput
El proyecto utiliza un servicio personalizado para manejar las conversiones de divisas. Este servicio se comunica con la API de cambio.today para obtener tasas de cambio en tiempo real.
- Conversión entre múltiples pares de divisas
- Manejo de errores y logging
- Tipado fuerte con TypeScript
import currencyService from './services/currencyService';
// Convertir 100 USD a EUR
const result = await currencyService('USD', 'EUR', 100);
console.log(result);
El servicio devuelve un objeto Currency
con la siguiente estructura:
interface Currency {
update: string;
value: number;
from: string;
to: string;
amount: number;
quantity: number;
}
Este proyecto utiliza la API de cambio.today para obtener tasas de cambio en tiempo real.
La clave API y la URL base se configuran a través de variables de entorno:
const CURRENCY_API_KEY = process.env.CURRENCY_API_KEY || "tu_clave_api_por_defecto";
const BASE_URL_CURRENCY = process.env.BASE_URL_CURRENCY || "https://api.cambio.today/v1/quotes";
GET /{from}/{to}/json
: Obtiene la tasa de cambio entre dos divisas
Para más detalles sobre la API de cambio.today, consulta su documentación oficial.
La aplicación utiliza una base de datos PostgreSQL alojada en la nube para almacenar información crucial sobre las interacciones de los usuarios.
La base de datos está diseñada para almacenar:
- Peticiones realizadas por cada usuario
- Posibles errores encontrados durante las interacciones
- Historial de conversiones de divisas
- PostgreSQL: Base de datos relacional robusta y confiable.
- Prisma ORM: Utilizado para interactuar con la base de datos de manera eficiente y segura.
- Migraciones: Implementadas para gestionar y versionar los cambios en el esquema de la base de datos.
Para configurar Prisma en el proyecto:
-
Instalar Prisma CLI:
npm install prisma --save-dev
-
Inicializar Prisma en el proyecto:
npx prisma init
-
Definir el esquema de la base de datos en
prisma/schema.prisma
. -
Generar el cliente de Prisma:
npx prisma generate
Para crear una nueva migración:
npx prisma migrate dev --name nombre_de_la_migracion
Para aplicar migraciones en producción:
npx prisma migrate deploy
model UserRequest {
id Int @id @default(autoincrement())
userId String
request String
timestamp DateTime @default(now())
error String?
}
- Todos los datos sensibles se almacenan de forma segura y encriptada.
- Se implementan prácticas de seguridad recomendadas por Prisma y PostgreSQL.
- El acceso a la base de datos está restringido y protegido por credenciales seguras.
En el directorio del proyecto, puedes ejecutar:
npm run dev
: Inicia el servidor de desarrollonpm run build
: Compila el proyectonpm start
: Inicia el servidor en modo producción
npm run dev
: Inicia el servidor de desarrollo de Vitenpm run build
: Compila el proyecto para producciónnpm run preview
: Previsualiza la versión de producción localmente
Las contribuciones son bienvenidas. Por favor, abre un issue primero para discutir qué te gustaría cambiar.