@startuml ' struct CiscoCreateData { ' + ip: str ' + login: str ' + password: str ' + port: str = DEFAULT_SSH_PORT ' + device_name: str ' + device_protocol: str ' + manufacturer: str = CISCO_ASA_MANUFACTURER ' } ' struct CiscoAuthenticationCheckDataPyModel { ' device_name : str ' ip : str ' login : str ' manufacturer : str ' password : str ' port : int ' } package CiscoApp { class AsaBackendService { + {static} create_cisco_asa_insatnce(\n name: str,\n ip: str,\n user: str,\n password: str,\n enable_password: str,\n connection_type: Optional[str] = CONNECTION_CLI_TYPE,\n protocol: Optional[str] = CONNECTION_SSH_PROTOCOL,\n rsa_limit: Optional[int] = 0,\n port: Optional[str] = DEFAULT_ASA_PORT,\n description: Optional[str] = "",\n administrators: Optional[list] = None\n) } AsaBackendService --> CiscoASAUnifiedStrategy : "Использование статического\nметода create_cisco_asa_instance" class CiscoFTDRepository { + {static} create_instance(create_data: Dict) } CiscoFTDRepository --> CiscoFTDUnifiedStrategy : "Использование статического\nметода create_instance" class CiscoFTDCreateDataModel { name: str ip: str username: str password: str connection_type: str = CONNECTION_CLI_TYPE port: int = DEFAULT_FTD_PORT description: str = "" administrators: List[int] = [] } CiscoFTDCreateDataModel --> CiscoFTDRepository : "Pydantic model\nдля валидации create_data" abstract CiscoUnifiedStrategyABC{ + create_instance(cisco_create_data: Dict) + check_authentication_status(cisco_connect_data: Dict) } class CiscoFTDUnifiedStrategy { + create_instance(cisco_create_data: Dict) + check_authentication_status(cisco_connect_data: Dict) } CiscoFTDUnifiedStrategy ..|> CiscoUnifiedStrategyABC class CiscoASAUnifiedStrategy { + create_instance(cisco_create_data: Dict) + check_authentication_status(cisco_connect_data: Dict) } CiscoASAUnifiedStrategy ..|> CiscoUnifiedStrategyABC class CiscoUnifiedManager { + _cisco_strategy : Optional[CiscoUnifiedStrategyABC] + cisco_strategy + __init__(cisco_strategy: Optional[CiscoUnifiedStrategyABC]) -> None # _check_strategy_existance() + check_authentiaction(cisco_connect_data: Dict) -> bool + create_cisco_instance(cisco_create_data: Dict) -> Union[Cisco, CiscoFTD] + set_strategy_by_device_name(device_name: str) } CiscoUnifiedStrategyABC --* CiscoUnifiedManager CiscoUnifiedManager --* .PingServices.FirewallAuthStatusService } package PingServices { class FirewallAuthStatusService { + manufacturer: str + ip: str + login: str + password: str + port: str + device_name: Optional[str] + device_protocol: Optional[str] } } @enduml