C4 Components

Customers

C4Component
    title Component Diagram for Customers Module

    Container_Boundary(customers, "Customers Module") {
        Component(customers_http, "HTTP Handler", "chi handler", "Recebe requisições HTTP e converte entrada/saída")
        Component(customers_uc, "Customer Use Cases", "Application", "Orquestra criação, atualização e inativação de clientes")
        Component(customers_domain, "Customer Aggregate", "Domain", "Aplica invariantes de negócio do cliente")
        Component(customers_repo_port, "Customer Repository Port", "Domain Port", "Contrato para persistência de clientes")
        Component(customers_repo_adapter, "PostgreSQL Repository", "Infrastructure", "Implementa persistência de clientes em PostgreSQL")
        Component(customers_event_publisher, "Internal Event Publisher", "Application Service", "Publica eventos internos do módulo")
    }

    ContainerDb(main_db, "PostgreSQL", "Relational Database", "Armazena dados do sistema")

    Rel(customers_http, customers_uc, "Invoca")
    Rel(customers_uc, customers_domain, "Executa regras")
    Rel(customers_uc, customers_repo_port, "Usa")
    Rel(customers_repo_adapter, customers_repo_port, "Implementa")
    Rel(customers_repo_adapter, main_db, "Lê/Escreve", "SQL")
    Rel(customers_uc, customers_event_publisher, "Publica eventos")

Responsabilidades

Invoices

C4Component
    title Component Diagram for Invoices Module

    Container_Boundary(invoices, "Invoices Module") {
        Component(invoices_http, "HTTP Handler", "chi handler", "Recebe requisições de emissão e consulta de faturas")
        Component(invoices_uc, "Invoice Use Cases", "Application", "Orquestra emissão, listagem e atualização de status")
        Component(invoices_domain, "Invoice Aggregate", "Domain", "Aplica invariantes de valor, vencimento e transição de status")
        Component(invoices_repo_port, "Invoice Repository Port", "Domain Port", "Contrato para persistência de faturas")
        Component(invoices_repo_adapter, "PostgreSQL Repository", "Infrastructure", "Implementa persistência de faturas em PostgreSQL")
        Component(invoices_event_publisher, "Internal Event Publisher", "Application Service", "Publica eventos internos do ciclo de fatura")
    }

    ContainerDb(main_db, "PostgreSQL", "Relational Database", "Armazena dados do sistema")

    Rel(invoices_http, invoices_uc, "Invoca")
    Rel(invoices_uc, invoices_domain, "Executa regras")
    Rel(invoices_uc, invoices_repo_port, "Usa")
    Rel(invoices_repo_adapter, invoices_repo_port, "Implementa")
    Rel(invoices_repo_adapter, main_db, "Lê/Escreve", "SQL")
    Rel(invoices_uc, invoices_event_publisher, "Publica eventos")

Responsabilidades

Billing