@startuml c4_container
'!includeurl https://raw.githubusercontent.com/xuanye/plantuml-style-c4/master/c4_context.puml
' uncomment the following line and comment the first to use locally
!include c4_context.puml

' Scope: A single software system.
' Primary elements: Containers within the software system in scope.
' Supporting elements: People and software systems directly connected to the containers.
' Intended audience: Technical people inside and outside of the software development team; including software architects, developers and operations/support staff.



' Styling
' ##################################

skinparam rectangle<<container>> {
    StereotypeFontColor ELEMENT_FONT_COLOR
    FontColor ELEMENT_FONT_COLOR
    BackgroundColor CONTAINER_BG_COLOR
    BorderColor CONTAINER_BORDER_COLOR
}

skinparam database<<container>> {
    StereotypeFontColor ELEMENT_FONT_COLOR
    FontColor ELEMENT_FONT_COLOR
    BackgroundColor CONTAINER_BG_COLOR
    BorderColor CONTAINER_BORDER_COLOR
}

' Layout
' ##################################
!function LAYOUT_WITH_LEGEND_CN()
hide stereotype
legend right
|=    颜色          |= 类型 |
|<PERSON_BG_COLOR>      | 用户 |
|<EXTERNAL_PERSON_BG_COLOR>      | 外部用户 |
|<SYSTEM_BG_COLOR>   | 系统 |
|<EXTERNAL_SYSTEM_BG_COLOR>      | 外部系统 |
|<CONTAINER_BG_COLOR>   | 容器 |
endlegend
!endfunction

!function LAYOUT_WITH_LEGEND()
hide stereotype
legend right
|=              |= Type |
|<PERSON_BG_COLOR>      | person |
|<EXTERNAL_PERSON_BG_COLOR>      | external person |
|<SYSTEM_BG_COLOR>   | system |
|<EXTERNAL_SYSTEM_BG_COLOR>      | external system |
|<CONTAINER_BG_COLOR>   | container |
endlegend
!endfunction

' Elements
' ##################################

!define Container(e_alias, e_label, e_techn) rectangle "==e_label\n//<size:TECHN_FONT_SIZE>[e_techn]</size>//" <<container>> as e_alias
!define Container(e_alias, e_label, e_techn, e_descr) rectangle "==e_label\n//<size:TECHN_FONT_SIZE>[e_techn]</size>//\n\n e_descr" <<container>> as e_alias

!define ContainerDb(e_alias, e_label, e_techn) database "==e_label\n//<size:TECHN_FONT_SIZE>[e_techn]</size>//" <<container>> as e_alias
!define ContainerDb(e_alias, e_label, e_techn, e_descr) database "==e_label\n//<size:TECHN_FONT_SIZE>[e_techn]</size>//\n\n e_descr" <<container>> as e_alias

' Boundaries
' ##################################

!define Container_Boundary(e_alias, e_label) Boundary(e_alias, e_label, "Container")

@enduml