@startuml
!include ..\..\.c4s\C4_Container.puml

AddElementTag("state:new", $bgColor=green, $fontColor=#ffffff, $borderColor=green, $shadowing="False")
AddElementTag("state:changed", $bgColor=orange, $fontColor=#ffffff, $borderColor=orange, $shadowing="False")
AddElementTag("state:removed", $bgColor=red, $fontColor=#ffffff, $borderColor=red, $shadowing="False")

AddRelTag("state:new", $textColor=green, $lineColor=green)
AddRelTag("state:changed", $textColor=orange, $lineColor=orange)
AddRelTag("state:removed", $textColor=red, $lineColor=red)

SHOW_PERSON_PORTRAIT()
LAYOUT_TOP_DOWN()

skinparam linetype polyline

title Fraud Service - C4 - Container level


System_Boundary(ECommercePlatform.SoftwareSystems.FraudService, "Fraud Service") {
    Container(ECommercePlatform.SoftwareSystems.FraudService.Containers.Api, "Api", "", "")
    Container(ECommercePlatform.SoftwareSystems.FraudService.Containers.Database, "Database", "", "")
    Container(ECommercePlatform.SoftwareSystems.FraudService.Containers.Messaging, "Messaging", "", "")
    Container(ECommercePlatform.SoftwareSystems.FraudService.Containers.MessageHandler, "Message Handler", "", "")
}

System_Boundary(ECommercePlatform.SoftwareSystems.OrderService, "Order Service") {
    Container(ECommercePlatform.SoftwareSystems.OrderService.Containers.Messaging, "Messaging", "", "")
}
System(ECommercePlatform.SoftwareSystems.FraudEngine, "Fraud Engine", "")

Rel(ECommercePlatform.SoftwareSystems.FraudService.Containers.Api, ECommercePlatform.SoftwareSystems.FraudService.Containers.Database, "Select High Risk Orders\nUpdate Fraud Check Result")
Rel(ECommercePlatform.SoftwareSystems.FraudService.Containers.Api, ECommercePlatform.SoftwareSystems.FraudService.Containers.Messaging, "Send Fraud Check Result Event")
Rel(ECommercePlatform.SoftwareSystems.FraudService.Containers.MessageHandler, ECommercePlatform.SoftwareSystems.OrderService.Containers.Messaging, "Receive Order Created Event")
Rel(ECommercePlatform.SoftwareSystems.FraudService.Containers.MessageHandler, ECommercePlatform.SoftwareSystems.FraudService.Containers.Database, "Insert Order\nInsert Fraud Check Result")
Rel(ECommercePlatform.SoftwareSystems.FraudService.Containers.MessageHandler, ECommercePlatform.SoftwareSystems.FraudEngine, "Get Fraud Check Result")
Rel(ECommercePlatform.SoftwareSystems.FraudService.Containers.MessageHandler, ECommercePlatform.SoftwareSystems.FraudService.Containers.Messaging, "Send Fraud Check Result Event")


SHOW_LEGEND()
@enduml
