Pular para conteúdo

Diagrama C4 — Containers

O diagrama de containers detalha os componentes internos da plataforma AMia e seus relacionamentos.

C4Container
    title AMia — Diagrama de Containers

    Person(user, "Usuário", "PO, Arquiteto, Dev, QA, Admin")

    System_Boundary(amia, "AMia Platform") {
        Container(portal, "Portal", "Angular 19", "Interface web SPA — gestão de projetos, specs, Work Items, iterações e administração")
        Container(core, "AMia Core", ".NET 10 / ASP.NET Core", "API REST + SignalR — orquestração de negócio, RBAC, Work Items, Specs, CQRS, RabbitMQ consumer")
        Container(agents, "AMia Agents", "Python 3.11 / FastAPI / LangChain", "Agentes especializados de IA — Visão, Arquitetura, Design, Story Mapping, Codificação, QA")
        Container(mcp, "MCP Server", "Python 3.11 / FastAPI", "Servidor MCP local — operações de arquivo no repositório do desenvolvedor, integração com Agents")
        Container(cli, "CLI", "Python 3.11", "Inicialização e autenticação local do MCP Server")
        ContainerDb(db, "PostgreSQL 15+", "Banco de dados relacional", "Projetos, Specs, Work Items, Iterações, Prompts, AuditLogs")
        Container(mq, "RabbitMQ", "Message Broker", "Comunicação assíncrona entre Core e Agents — filas de geração de specs e Work Items")
        Container(cache, "Redis", "Cache distribuído", "Estado de contingência de LLM — compartilhado entre workers do Agents")
    }

    System_Ext(azure_ad, "Azure AD", "SSO corporativo")
    System_Ext(anthropic, "Anthropic Claude API", "LLM primário")
    System_Ext(gemini, "Google Gemini API", "LLM fallback")
    System_Ext(keyvault, "Azure Key Vault", "Secrets, connection strings, API keys")
    System_Ext(blob, "Azure Blob Storage", "Artefatos gerados — specs, código")
    System_Ext(elastic, "Elasticsearch / Grafana", "APM, logs, métricas")

    Rel(user, portal, "Acessa via browser — HTTPS")
    Rel(user, mcp, "Usa via IDE / Claude Code — MCP Protocol")
    Rel(user, cli, "Executa localmente — terminal")

    Rel(portal, core, "Chama API REST — HTTPS + JWT")
    Rel(portal, core, "Recebe eventos em tempo real — SignalR/WSS")

    Rel(core, db, "Lê e escreve — Entity Framework Core")
    Rel(core, mq, "Publica eventos de geração — AMQP")
    Rel(core, keyvault, "Recupera secrets em runtime")
    Rel(core, blob, "Armazena artefatos gerados")
    Rel(core, azure_ad, "Valida tokens JWT — Microsoft Graph")

    Rel(agents, mq, "Consome eventos de geração — AMQP")
    Rel(agents, core, "Consulta specs e salva resultados — HTTPS")
    Rel(agents, anthropic, "Chamadas de geração — HTTPS")
    Rel(agents, gemini, "Fallback automático — HTTPS")
    Rel(agents, cache, "Estado de contingência de LLM")
    Rel(agents, keyvault, "Recupera API keys em runtime")
    Rel(agents, elastic, "Envia métricas de LLM e spans APM")

    Rel(mcp, core, "Consulta specs e Work Items — HTTPS + JWT")
    Rel(mcp, agents, "Aciona geração de código e testes — HTTPS")
    Rel(cli, azure_ad, "Autenticação OAuth2/OIDC")

Comunicação entre containers

De Para Protocolo Autenticação
Portal Core HTTPS REST JWT (Azure AD)
Portal Core WebSocket Secure (SignalR) JWT
Core Agents AMQP (RabbitMQ) Credencial RabbitMQ (Key Vault)
Agents Core HTTPS REST JWT de serviço
MCP Server Core HTTPS REST JWT (Azure AD)
MCP Server Agents HTTPS REST JWT de serviço

Todos os secrets (connection strings, API keys, tokens) são recuperados em runtime do Azure Key Vault — nunca hardcoded ou em variáveis de ambiente no código.