workspace "Algesta Maintenance & Marketplace Platform" "System context and container architecture for Algesta's digital transformation project." { model { // People cliente = person "Cliente de Algesta" "Usuario final que solicita servicios de mantenimiento vía WhatsApp" algestaTeam = person "Equipo Algesta" "Curadores y administradores del sistema" tecnico = person "Técnico Externo" "Proveedor que oferta en el marketplace" // External Software Systems jelou = softwareSystem "Jelou WhatsApp" "Bot que recibe solicitudes estructuradas desde WhatsApp" "External" sendGrid = softwareSystem "SendGrid" "Servicio de envío de emails transaccionales" "External" asana = softwareSystem "Asana" "Gestión interna de tareas y seguimiento" "External" docuSign = softwareSystem "DocuSign" "Firma digital de documentos y contratos" "External" qsystems = softwareSystem "Qsystems" "Sistema de clientes empresariales" "External" sistemaActivos = softwareSystem "Sistema de Activos" "Gestión interna de activos técnicos" "External" algestaPlatform = softwareSystem "Plataforma Algesta" "Sistema principal para gestión de mantenimiento y marketplace con arquitectura de microservicios NestJS" { // Frontend Container reactDashboard = container "React Dashboard" "Dashboard interno de Algesta y portal para proveedores con arquitectura Bulletproof React" "React 19, Vite, TypeScript, TanStack Query, Zustand, shadcn/ui" { tags "Frontend" } // API Gateway Container apiGateway = container "API Gateway" "Punto de entrada único con CQRS, autenticación JWT y circuit breaker" "NestJS 11, TypeScript, Redis/Kafka" { tags "Backend" "Gateway" } // Microservices Containers ordersMS = container "Orders Microservice" "Gestión de órdenes, marketplace, subastas y ciclo de vida completo" "NestJS 11, MongoDB, CQRS, Clean Architecture" { tags "Backend" "Microservice" } providerMS = container "Provider Microservice" "Gestión de proveedores, documentos, subastas y asignaciones" "NestJS 11, MongoDB, CQRS, Azure Blob Storage" { tags "Backend" "Microservice" } notificationsMS = container "Notifications Microservice" "Orquestación de notificaciones multicanal (email, WhatsApp, push)" "NestJS 11, MongoDB, SendGrid, @nestjs/schedule" { tags "Backend" "Microservice" } // Data Storage Containers ordersDB = container "Orders Database" "Persistencia de órdenes, clientes, activos, cotizaciones" "MongoDB" { tags "Database" } providerDB = container "Provider Database" "Persistencia de proveedores, documentos, subastas, ofertas" "MongoDB" { tags "Database" } notificationsDB = container "Notifications Database" "Persistencia de notificaciones y templates" "MongoDB" { tags "Database" } blobStorage = container "Blob Storage" "Almacenamiento de documentos, fotos, informes PDF" "Azure Blob Storage" { tags "Storage" } messageBroker = container "Message Broker" "Comunicación asíncrona entre microservicios" "Redis/Kafka" { tags "Messaging" } // Frontend to Gateway Relationships reactDashboard -> apiGateway "Hace peticiones HTTP/REST a" "HTTPS" // Gateway to Microservices Relationships (via Message Broker) apiGateway -> ordersMS "Enruta comandos/consultas vía" "Redis/Kafka MessagePattern" apiGateway -> providerMS "Enruta comandos/consultas vía" "Redis/Kafka MessagePattern" apiGateway -> notificationsMS "Enruta comandos/consultas vía" "Redis/Kafka MessagePattern" // Microservices to Databases Relationships ordersMS -> ordersDB "Lee/Escribe usando" "Mongoose ODM" providerMS -> providerDB "Lee/Escribe usando" "Mongoose ODM" notificationsMS -> notificationsDB "Lee/Escribe usando" "Mongoose ODM" // Microservices to Storage providerMS -> blobStorage "Almacena/Recupera documentos usando" "Azure SDK" ordersMS -> blobStorage "Almacena/Recupera archivos usando" "Azure SDK" // Microservices to Message Broker (Event Publishing) ordersMS -> messageBroker "Publica/Suscribe eventos" "Redis/Kafka Pub/Sub" providerMS -> messageBroker "Publica/Suscribe eventos" "Redis/Kafka Pub/Sub" notificationsMS -> messageBroker "Publica/Suscribe eventos" "Redis/Kafka Pub/Sub" // Notifications MS to External Services notificationsMS -> sendGrid "Envía emails vía" "HTTP REST API" notificationsMS -> jelou "Envía mensajes WhatsApp vía" "HTTP REST API" // Orders MS to External Systems ordersMS -> sendGrid "Envía emails específicos de órdenes (anticipo, cotización, descuento) vía" "HTTP REST API" ordersMS -> asana "Crea/Actualiza tareas vía" "HTTP REST API" ordersMS -> docuSign "Solicita firmas vía" "HTTP REST API" ordersMS -> qsystems "Consulta datos vía" "HTTP REST API" ordersMS -> sistemaActivos "Sincroniza activos vía" "HTTP REST API" } // External System Relationships cliente -> jelou "Envía solicitudes de servicio vía" "WhatsApp" jelou -> apiGateway "Envía webhooks con solicitudes estructuradas a" "HTTPS" cliente -> reactDashboard "Consulta estado de solicitudes en" "HTTPS" tecnico -> reactDashboard "Gestiona ofertas y órdenes asignadas en" "HTTPS" algestaTeam -> reactDashboard "Gestiona órdenes, proveedores y curación en" "HTTPS" } views { systemContext algestaPlatform "SystemContext" { include * autolayout lr } container algestaPlatform "Containers" { include * autolayout lr } styles { element "Frontend" { background #438dd5 color #ffffff } element "Backend" { background #85bbf0 color #000000 } element "Gateway" { background #1168bd color #ffffff } element "Microservice" { background #438dd5 color #ffffff } element "Database" { shape Cylinder background #ff6b6b color #ffffff } element "Storage" { shape Folder background #feca57 color #000000 } element "Messaging" { background #48dbfb color #000000 } element "External" { background #cccccc color #000000 } } theme default } }