workspace extends ../common/finance-common-model.dsl { name "Finance task processing system" description "Finance task processing system is responsible for processing finance task related to balances, payments, redeems, etc." model { financeKafkaCluster = softwareSystem "Finance Kafka cluster" { tags "Kafka" "FinanceDomain" inputFinanceTaksTopic = container "Input finance task topic" { tags "Kafka" "Topic" technology "Kafka topic" description "Contains all incoming tasks partitioned by task key" } balanceTaskTopic = container "Balance task topic" { tags "Kafka" "Topic" technology "Kafka topic" description "Contains all balance tasks partitioned by task key" } commonTaskTopic = container "Common task topic" { tags "Kafka" "Topic" technology "Kafka topic" description "Contains all common tasks partitioned by task key" } backgroundTaskTopic = container "Background task topic" { tags "Kafka" "Topic" technology "Kafka topic" description "Contains all background tasks partitioned by task key" } } !extend finance { financeTaskReceiver = component "Finance task receiver" "Receives finance task data" "Java" financeTaskRouter = component "Finance task router" "Route tasks depdending on the type" "Java" financeTaskHandler = component "Finance task handler" "Handle tasks depdending on the type" "Java" financeApi = component "Finance API" "API for task engine" "Java" { tags "API" } } !extend financeSystem { tags "Finance" debezium = container "Debezium" { tags "Google Cloud Platform - Compute Engine" technology "Java" } } # Finance finance -> financeDb "Reads task description and corresponding data" "SQL" debezium -> financeDb "Reads incoming finance task data" "SQL" debezium -> inputFinanceTaksTopic "Sends incoming finance task data" "Kafka" "Kafka" inputFinanceTaksTopic -> financeTaskRouter "Sends input finance tasks" "Kafka" "Kafka" financeTaskRouter -> balanceTaskTopic "Route balance tasks" "Kafka" "Kafka" financeTaskRouter -> commonTaskTopic "Route common tasks" "Kafka" "Kafka" financeTaskRouter -> backgroundTaskTopic "Route background tasks" "Kafka" "Kafka" balanceTaskTopic -> financeTaskHandler "Handle balance tasks" "Java" "Kafka" commonTaskTopic -> financeTaskHandler "Handle common tasks" "Java" "Kafka" backgroundTaskTopic -> financeTaskHandler "Handle background tasks" "Java" "Kafka" financeTaskHandler -> balanceTopic "Send balance change event" "Kafka" "Kafka" financeTaskHandler -> purchaseStateTopic "Send purchase state event" "Kafka" "Kafka" financeTaskReceiver -> financeDb "Store finance task data" "SQL" financeTaskHandler -> financeDb "Store finance task data" "SQL" financeApi -> financeTaskReceiver "Process incoming tasks" "Java" # FinanceReadonly financeReadonly -> financeDb "Reads from db" "SQL" } views { systemLandscape "SystemLandscape" "Tango finance task processing landscape" { include * autoLayout } systemContext financeSystem "financesystemContext" { include * autoLayout } container financeSystem "financeSystemContainer" { include * autoLayout } container financeKafkaCluster "financeKafkaClusterContainers" { include * autoLayout } component finance "financeComponents" { include * autoLayout } dynamic finance "handle-finance-tasks" { financeApi -> financeTaskReceiver financeTaskReceiver -> financeDb debezium -> financeDb debezium -> inputFinanceTaksTopic inputFinanceTaksTopic -> financeTaskRouter { { financeTaskRouter -> balanceTaskTopic } { financeTaskRouter -> commonTaskTopic } { financeTaskRouter -> backgroundTaskTopic } } { { balanceTaskTopic -> financeTaskHandler } { commonTaskTopic -> financeTaskHandler } { backgroundTaskTopic -> financeTaskHandler } } { { financeTaskHandler -> balanceTopic } { financeTaskHandler -> purchaseStateTopic } { financeTaskHandler -> financeDb } } autoLayout description "Handle finance task" } } }