@startuml __Commu-Dia-Depot-fail
!pragma teoz true
title Kommunikation zwischen Frontend, ERP und Depots
actor User
participant "Port" as FE <<Frontend>>
participant "Fokus" as ERP <<ERP>>
database "address_changes" as KAFKA <<Kafka Topic>> #LightBlue
participant "Depot 1" as SM1 <<Submodul>>
participant "Depot 2" as SM2 <<Submodul>>
== Submodule fail on Address Change  ==
User -> FE ++: Adressänderungs-\nWunsch
activate KAFKA #LightBlue
FE ->(10) ERP ++: Adressänderungs-\nWunsch eingegangen
activate ERP
FE --> User: Wunsch wird überprüft
ERP --> ERP: Validierung positiv
deactivate ERP
ERP ->(10) FE: Adressänderung\n angefragt
ERP ->(10) KAFKA: <color #darkgreen><<event>>\nAdressänderung angefragt
KAFKA ->(10) SM2 ++: Adressänderung\n angefragt
& KAFKA ->(20) SM1 ++: 
activate ERP
FE --> User: Wunsch in Bearbeitung
SM1 ->(10) KAFKA --: <color #darkgreen><<event>>\nZustimmung\n Submodul 1
KAFKA ->(10) ERP: Zustimmung\n Submodul 1
SM2 ->(10) KAFKA --: <color #darkgreen><<event>>\nZustimmung\n Submodul 2
KAFKA ->(10) ERP: Zustimmung\n Submodul 2
ERP -> ERP: Zustimmungen komplett
ERP ->(10) KAFKA: <color #darkgreen><<event>>\nAdressänderung beauftragt
deactivate ERP
KAFKA ->(10) SM2 ++: Adressänderung beauftragt
& KAFKA ->(20) SM1 ++:
activate ERP
SM1 ->(10) KAFKA: <color #darkgreen><<event>>\nAdressänderung\n erfolgt
KAFKA ->(10) ERP: Adressänderung\n erfolgt Submodul 1
deactivate SM1
SM2 ->(10) KAFKA: <color #darkgreen><<event>>\n<color #red>**Änderung abgebrochen**
KAFKA ->(10) ERP: <color #red>**Änderung abgebrochen**\nSubmodul 2
& KAFKA ->(10) SM1 ++: <color #red>**Änderung abgebrochen**
SM1 -> SM1: Storno\nder Änderung
deactivate SM2
deactivate ERP
ERP ->(10) FE --: <color #red>**Adressänderung**\n <color #red>**abgebrochen**
deactivate SM1
FE -[#red]-> User --: <color #red>**Adressänderung gescheitert**
deactivate KAFKA
@enduml