workspace extends ../common/finance-common-model.dsl { name "Finance journal system" description "Finance task processing system is responsible for processing finance task related to balances, payments, redeems, etc." model { !extend mainKafkaCluster { financeJournalRawTopic = container "Finance journal raw topic" { tags "Kafka" "Topic" technology "Kafka topic" description "Contains finance journal raw data" } financeJournalCompactedTopic = container "Finance journal compacted topic" { tags "Kafka" "Topic" technology "Kafka topic" description "Contains finance journal compacted data" } financeJournalServiceInternalTopic = container "Finance journal service internal topic" { tags "Kafka" "Topic" technology "Kafka topic" description "Contains internal data of finance journal service" } financeJournalPublicTopic = container "Finance journal public topic" { tags "Kafka" "Topic" technology "Kafka topic" description "Contains finance journal data for external usage" } } !extend finance { -> financeDb "Store finance journal" "SQL" } !extend financeDb { -> financeJournalRawTopic "Provide finance journal raw data" "Kafka" "Debezium" -> financeJournalCompactedTopic "Provide finance journal compacted data" "Kafka" "Debezium" } financeJournalSystem = softwareSystem "Finance journal system" { tags "FinanceDomain" "Journal" financeJournalDb = container "FinanceJournalDb" { description "Stores finance journal data" technology "MySQL" tags "Google Cloud Platform - Compute Engine" "Database" "MySQL" -> financeJournalServiceInternalTopic "Store finance journal internal data" "Kafka" "Debezium" } financeJournal = container "FinanceJournal" { tags "Google Cloud Platform - Kubernetes Engine" "FinanceDomain" "Journal" technology "Java" financeJournalRawTopic -> this "Provide finance journal raw data" "Kafka" financeJournalCompactedTopic -> this "Provide finance journal compacted data" "Kafka" -> financeJournalPublicTopic "Provide finance journal data" "Kafka" -> financeJournalDb "Store finance journal data" "SQL" -> financeJournalServiceInternalTopic "Handle finance journal internal data updates" "Kafka" } financeInvoiceDb = container "FinanceInvoiceDb" { description "Stores finance invoice data" technology "MySQL" tags "Google Cloud Platform - Compute Engine" "Database" "MySQL" } financeInvoice = container "FinanceInvoice" { tags "Google Cloud Platform - Kubernetes Engine" "FinanceDomain" "Invoice" technology "Java" financeJournalPublicTopic -> this "Provide finance journal data" "Kafka" -> financeInvoiceDb "Store finance invoice data" "SQL" user -> this "Get invoice" finOps -> this "Get user invoice" } } } views { systemLandscape "SystemLandscape" "Finance journal system landscape" { include * autoLayout } systemContext financeJournalSystem "financeJournalSystemContext" { include * autoLayout } container financeJournalSystem "financeJournalSystemContainer" { include * autoLayout } dynamic financeJournalSystem "handle-finance-journal-update" { finance -> financeDb "Store finance journal data" { { financeDb -> financeJournalCompactedTopic } { financeDb -> financeJournalRawTopic } } { { financeJournalCompactedTopic -> financeJournal } { financeJournalRawTopic -> financeJournal } } financeJournal -> financeJournalDb financeJournalDb -> financeJournalServiceInternalTopic financeJournalServiceInternalTopic -> financeJournal financeJournal -> financeJournalPublicTopic financeJournalPublicTopic -> financeInvoice financeInvoice -> financeInvoiceDb { { user -> financeInvoice } { finOps -> financeInvoice } } autoLayout description "Handle finance journal update" } } }