96 lines
2.8 KiB
Markdown
96 lines
2.8 KiB
Markdown
```plantuml
|
|
@startuml
|
|
title Exchange Connection Logic Flow
|
|
|
|
start
|
|
|
|
:User Lands on Client Page;
|
|
|
|
if ("Is User New?") then (Yes)
|
|
:Attempt to Connect to Default Exchange (Public-Only);
|
|
if ("Default Exchange Supports Public Connection?") then (Yes)
|
|
:Connect Default Exchange in Public-Only Mode;
|
|
note right: Scenario A
|
|
else (No)
|
|
:Failed to Connect Default Exchange;
|
|
stop
|
|
endif
|
|
else (No)
|
|
:Retrieve Previously Connected Exchanges and Modes;
|
|
:Reconnect to Default Exchange based on Previous Mode;
|
|
endif
|
|
|
|
:User Chooses to Connect an Exchange;
|
|
|
|
if ("Exchange is Already Connected?") then (Yes)
|
|
if ("User Provides New API Keys?") then (Yes)
|
|
:Compare New API Keys with Existing Ones;
|
|
if ("Keys Differ?") then (Yes)
|
|
:Update API Keys in Database;
|
|
:Re-instantiate Exchange Object with New Keys;
|
|
:Attempt Authentication;
|
|
if ("Authentication Successful?") then (Yes)
|
|
:Status = api_keys_updated;
|
|
note right: Scenarios C, F, G
|
|
else (No)
|
|
:Status = failure;
|
|
note right: Scenarios E
|
|
endif
|
|
else (No)
|
|
:Status = already_connected;
|
|
note right: Scenario D
|
|
endif
|
|
else (No)
|
|
:Check Current Connection Mode;
|
|
if ("Currently in Authenticated Mode?") then (Yes)
|
|
:Status = already_connected;
|
|
else (No)
|
|
:Status = connected_public_only;
|
|
note right: Scenarios B, D
|
|
endif
|
|
endif
|
|
else (No)
|
|
:User Provides API Keys?;
|
|
if ("Exchange Requires API Keys?") then (Yes)
|
|
if ("API Keys Provided?") then (Yes)
|
|
:Attempt to Connect and Authenticate Exchange;
|
|
if ("Authentication Successful?") then (Yes)
|
|
:Status = success;
|
|
note right: Scenarios C, F
|
|
else (No)
|
|
:Status = failure;
|
|
note right: Scenario E
|
|
endif
|
|
else (No)
|
|
:Alert User to Provide API Keys;
|
|
stop
|
|
endif
|
|
else (No)
|
|
:Attempt to Connect to Exchange in Public-Only Mode;
|
|
if ("Connection Successful?") then (Yes)
|
|
:Status = connected_public_only;
|
|
note right: Scenarios B
|
|
else (No)
|
|
:Status = failure;
|
|
note right: Scenario B
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
:Return Status to Client;
|
|
|
|
if ("Status = success or api_keys_updated") then (Yes)
|
|
:Client Reloads Page to Reflect Changes;
|
|
else (No)
|
|
if ("Status = connected_public_only or already_connected") then (Yes)
|
|
:Client Shows Informational Message;
|
|
else (No)
|
|
:Client Shows Error Message;
|
|
endif
|
|
endif
|
|
|
|
stop
|
|
|
|
@enduml
|
|
|
|
``` |