@startuml
skinparam monochrome true
skinparam ClassBackgroundColor White
hide empty members
hide circle
skinparam defaultFontName Arial
skinparam defaultFontSize 11
left to right direction
class "<b>Product/System</b>" as __1_Product_System <<metaclass>> 
class "<b>Microservice</b>" as __2_Microservice <<metaclass>> 
class "<b>Api Interface</b>" as __3_Api_Interface <<metaclass>> 
class "<b>Api Operation</b>" as __4_Api_Operation <<metaclass>> {
persistent_access: String
endpoint: String
}

class "<b>Persistence Operation</b>" as __5_Persistence_Operation <<metaclass>> 
class "<b>Persistence Store</b>" as __6_Persistence_Store <<metaclass>> 
class "<b>Connection Operation</b>" as __7_Connection_Operation <<metaclass>> 
class "<b>Connection</b>" as __8_Connection <<metaclass>> 
class "<b>synchronous</b>" as __9_synchronous <<stereotype>> 
class "<b>asynchronous</b>" as __10_asynchronous <<stereotype>> 
class "<b>Java FeignClient</b>" as __11_Java_FeignClient <<stereotype>> 
class "<b>Java Rest Template</b>" as __12_Java_Rest_Template <<stereotype>> 
class "<b>Java Message Template</b>" as __13_Java_Message_Template <<stereotype>> 
class "<b>RabbitMQ Event Bus</b>" as __14_RabbitMQ_Event_Bus <<stereotype>> 
class "<b>read</b>" as __15_read <<stereotype>> 
class "<b>write</b>" as __16_write <<stereotype>> 
class "<b>Operation Responsibility</b>" as __17_Operation_Responsibility <<stereotype>> 
class "<b>Computation Function</b>" as __18_Computation_Function <<stereotype>> 
class "<b>State Creation Operation</b>" as __19_State_Creation_Operation <<stereotype>> 
class "<b>Retrieval Operation</b>" as __20_Retrieval_Operation <<stereotype>> 
class "<b>State Transition Operation</b>" as __21_State_Transition_Operation <<stereotype>> 
__17_Operation_Responsibility <|--- __18_Computation_Function
__17_Operation_Responsibility <|--- __19_State_Creation_Operation
__17_Operation_Responsibility <|--- __20_Retrieval_Operation
__17_Operation_Responsibility <|--- __21_State_Transition_Operation
__1_Product_System " 1 "  -->  " 1..* " __2_Microservice: "composes" 
__2_Microservice " 1 "  -->  " 1..* " __3_Api_Interface: "exposes" 
__2_Microservice " 1 "  -->  " 1..* " __4_Api_Operation
__3_Api_Interface " 1 "  -->  " 1..* " __4_Api_Operation
__3_Api_Interface " 1 "  -->  " 1..* " __7_Connection_Operation: "calls" 
__4_Api_Operation " 0..* "  -->  " 0..* " __5_Persistence_Operation
__4_Api_Operation " 1..* "  -->  " 0..* " __7_Connection_Operation
__4_Api_Operation " 1..* "  -->  " 0..* " __4_Api_Operation
__6_Persistence_Store " 1 "  -->  " 1..* " __5_Persistence_Operation
__7_Connection_Operation " 0..* "  -->  " 0..* " __5_Persistence_Operation: "accesses" 
__7_Connection_Operation " 1..* "  -->  " 1..* " __4_Api_Operation
__8_Connection " 1 "  -->  " 1..* " __7_Connection_Operation
__9_synchronous --> __4_Api_Operation: "<<extended>>"
__9_synchronous --> __3_Api_Interface: "<<extended>>"
__9_synchronous --> __7_Connection_Operation: "<<extended>>"
__10_asynchronous --> __4_Api_Operation: "<<extended>>"
__10_asynchronous --> __3_Api_Interface: "<<extended>>"
__10_asynchronous --> __7_Connection_Operation: "<<extended>>"
__11_Java_FeignClient --> __7_Connection_Operation: "<<extended>>"
__12_Java_Rest_Template --> __7_Connection_Operation: "<<extended>>"
__13_Java_Message_Template --> __7_Connection_Operation: "<<extended>>"
__14_RabbitMQ_Event_Bus --> __7_Connection_Operation: "<<extended>>"
__15_read --> __5_Persistence_Operation: "<<extended>>"
__16_write --> __5_Persistence_Operation: "<<extended>>"
__17_Operation_Responsibility --> __4_Api_Operation: "<<extended>>"
@enduml
