MarketWeb3 es una plataforma de comercio electrónico descentralizada que integra tecnologías Web3. El sistema está diseñado utilizando una arquitectura de microservicios para garantizar la escalabilidad, la mantenibilidad y el despliegue independiente de cada componente.
La plataforma se compone de un frontend web, una aplicación de escritorio y un conjunto de microservicios backend que gestionan funcionalidades específicas como autenticación, productos, carrito de compras, pagos con criptomonedas y más.
A continuación, se presenta una descripción textual de la arquitectura del sistema:
[Frontend Web (Next.js)] <--> [API Gateway] <--> [Microservicios Backend (Django)]
[App de Escritorio (Electron)] <--> [API Gateway] <--> [Microservicios Backend (Django)]
+--------------------------------+
| Bus de Mensajes |
| (RabbitMQ / Kafka) |
+--------------------------------+
^ ^ ^
| | |
[Servicio A] |-----------|-----------| [Servicio B]
(Publica eventos) (Consume eventos)
- Clientes: Los usuarios interactúan con el sistema a través de la aplicación web o la aplicación de escritorio.
- API Gateway (Concepto): Un API Gateway (no implementado explícitamente en el código base actual) debería actuar como un punto de entrada único para todas las solicitudes de los clientes. Este enruta las solicitudes al microservicio apropiado, simplificando la comunicación y mejorando la seguridad.
- Microservicios Backend: Cada microservicio es una aplicación independiente construida con Django y Django REST Framework, encargada de una lógica de negocio específica.
- Comunicación Asíncrona: Los microservicios se comunican entre sí de forma asíncrona a través de un bus de mensajes. Esto desacopla los servicios y mejora la resiliencia del sistema. Por ejemplo, cuando se crea una orden, el servicio de órdenes publica un evento y los servicios de pagos y notificaciones reaccionan a él.
- Tecnología: Next.js, React, Tailwind CSS.
- Descripción: Es la interfaz principal para los usuarios. Permite a los clientes navegar por productos, gestionar su cuenta, realizar compras y interactuar con las funcionalidades de la plataforma.
- Directorio:
frontend-main/
- Tecnología: Electron, React, Vite.
- Descripción: Ofrece una experiencia de escritorio nativa con funcionalidades similares a las de la aplicación web.
- Directorio:
electron-main/
Cada microservicio es un proyecto Django containerizado con Docker.
auth_microservice-main: Gestiona el registro, inicio de sesión y autenticación de usuarios mediante JWT.products_microservices-main: Administra el catálogo de productos, categorías, inventario y precios.cart_microservice-main: Gestiona los carritos de compra de los usuarios.orders_microservice-main: Procesa las órdenes de compra, desde la creación hasta la finalización.payments_microservice-main: Se encarga de la lógica de pagos tradicional.cryptocurrency_microservice-main: Maneja los pagos y transacciones utilizando criptomonedas. Interactúa con contratos inteligentes.cryptography_microservice-main: Provee servicios criptográficos para la firma y verificación de datos sensibles.coupons_microservice-main: Administra la creación, validación y aplicación de cupones de descuento.courses_microservice-main: Gestiona los cursos online, en caso de que la plataforma los ofrezca como productos.email_microservice-main: Centraliza el envío de correos electrónicos transaccionales (confirmaciones de compra, bienvenida, etc.).notifications_microservice-main: Gestiona y envía notificaciones a los usuarios (posiblemente en tiempo real con WebSockets).messages_microservice-main: Facilita la comunicación entre usuarios dentro de la plataforma.
- Contenerización (
Docker): Cada microservicio se ejecuta en su propio contenedor Docker, lo que garantiza un entorno aislado y consistente. Los archivosdocker-compose.yamldefinen los servicios, redes y volúmenes para el entorno de desarrollo local. - Comunicación Síncrona (API REST): Los frontends se comunican con los microservicios a través de APIs REST.
- Comunicación Asíncrona (
consumer.py): La presencia de archivosconsumer.pyen cada microservicio indica el uso de un bus de mensajes (como RabbitMQ) para la comunicación entre servicios, siguiendo un patrón de publicador/suscriptor.
- Añadir al Carrito: El usuario, desde el frontend, hace una solicitud HTTP al servicio de
cart_microservicepara añadir un producto. - Crear Orden: El usuario procede al checkout. El frontend envía una solicitud al servicio de
orders_microservicepara crear una nueva orden. - Publicar Evento: El
orders_microservicecrea la orden con estado "pendiente" y publica un eventoorder_createden el bus de mensajes. - Procesar Pago:
- El
cryptocurrency_microserviceconsume el eventoorder_created, procesa el pago con criptomonedas y, si es exitoso, publica un eventopayment_successful. - El
products_microserviceconsume el eventoorder_createdpara reducir el stock del producto.
- El
- Confirmar Orden: El
orders_microserviceconsume el eventopayment_successfuly actualiza el estado de la orden a "completada". - Notificar al Usuario:
- El
notifications_microserviceconsume el eventopayment_successfuly envía una notificación en la plataforma. - El
email_microserviceconsume el mismo evento y envía un correo de confirmación.
- El
- Docker y Docker Compose
- Node.js y Yarn (para
frontend-main) - Node.js y NPM (para
electron-main) - Python
-
Clonar el Repositorio:
git clone <URL_DEL_REPOSITORIO> cd MarketWeb3
-
Levantar los Microservicios: Navega a cada directorio de microservicio y ejecuta Docker Compose.
cd auth_microservice-main docker-compose up -d cd ../products_microservices-main docker-compose up -d # Repetir para todos los microservicios...
-
Ejecutar Frontend Web:
cd frontend-main yarn install yarn devLa aplicación estará disponible en
http://localhost:3000. -
Ejecutar Aplicación de Escritorio:
cd electron-main npm install npm run dev