### get_indicators() ```plantuml @startuml start :Get the user id.; :Fetch all indicators from database that were created by that id.; :return indicators; stop @enduml ``` ### get_id() ```plantuml @startuml start :db.get_user_id(username); :return id; stop @enduml ``` ### get_username() ```plantuml @startuml start :db.get_username(u_id); :return username; stop @enduml ``` ### save_indicators() ```plantuml @startuml start :db.insert_indicator(data=indicator); :return indicators; stop @enduml ``` ### is_logged_in() ```plantuml @startuml start if (username in session?) then (no) #white/pink:return False; stop else (yes) :get username; endif if (poll_login_flag?) then (set) #white/green:return True; stop else (not set) #white/pink:return False; stop partition poll_login_flag() start :get_user_from_cache; if (user?) then (yes) if (status) then (not logged in) :remove from cache; #white/pink:return False; stop else (logged in) #white/green:return True; stop endif else (no) :Get user from database| if (user in database?) then (no) #white/pink:return False; stop else (yes) if (status) then (Logged in) :add user to cache; if (user is guest) then (yes) :add suffix to cache; note suffixes are autogenerated and must be tracked to avoid dupes end note endif #white/green:return True; stop else (not logged in) #white/pink:return False; stop @enduml ``` ### create_unique_guest_name() ```plantuml @startuml start :Retrieve the used suffixes from the cache; if (number of guest_suffixes > self.max_guests) then (no) repeat :Pick a random suffix.; repeat while (Suffix choice already in use?) :Return: username appended with suffix; stop else (yes) :return None; stop @enduml ``` ### create_guest() ```plantuml @startuml start :Request a unique user name; if (Username received?) then (no) #white/pink:return None; stop else (yes) :Create new user in db; :Login user; if (Success?) then (true) #white/green:Return: username; stop else (no) #white/pink:Return: None; stop @enduml ``` ### user_attr_is_taken(attr, val) ```plantuml @startuml start :Retrieve user status from database.; if (result) then (yes) :Return: True; stop else :Return: False; stop @enduml ``` ### scramble_text(text) ```plantuml @startuml start :scamble text; :Return: text; @enduml ``` ### create_new_user_in_db(attrs) ```plantuml @startuml start :Get the default user template.; repeat :Modify template with received attribute; repeat while (Another attribute?) :Drop database index; :Insert modified user.; :Return: None; @enduml ``` ### create_new_user() ```plantuml @startuml start if (user exists?) then (yse) #white/pink:return False; stop endif if (email exists?) then (yse) #white/pink:return False; stop endif :Encrypt password; :Create new user in db; #green/grey:Return: True; stop @enduml ``` ### load_or_create_user() ```plantuml @startuml start if (is logged in?) then (no) :create guest; if (success?) then (no) #pink/grey:Raise error; end else (yes) endif else (yes) endif :Load user data; #green/grey:Return: username; stop @enduml ``` ### log_in_user(username, password) ```plantuml @startuml start :Validate password; if (success) then (yes) :Set the user's status flag as logged in; :Record the login time; :Return: True; stop else (no) :Return False; stop @enduml ``` ### log_out_user(username) ```plantuml @startuml start :Set the user's status flag as logged out; :Record the logout time; :Remove the user from the cache; :Return: True; stop @enduml ``` ### log_out_all_users() ```plantuml @startuml start repeat :get data from cache data; if (cached data is a user) then (yes) :delete data; else (no) endif repeat while(another key?) :get logged-in users from the database; :drop the default user; repeat :set user log-in flag in db; repeat while(Loop through all logged-in users) is (another user?) :Return: None; stop @enduml ``` ### load_user_data() ```plantuml @startuml start if (cache loaded?) then (yes) :Return None; stop else (no) endif :Get user from db; if (success) :; stop @enduml ``` ### modify_user_data(username, field_name, new_data) ```plantuml @startuml start :Get the user data from the db; :Drop the db id column; :Modify the targeted field; :Replace the user records in the cache; :Delete the old record from the db; :Replace the records in the database; stop @enduml ``` ### validate_password(username, password) ```plantuml @startuml start if (input invalid) then (yes) :Return False; stop else (no) :Request the password from the database; if (password?) then (no) :Return False; stop else (yes) :Validate password; :Return result; stop @enduml ``` ### get_chart_view(user_name, prop) ```plantuml @startuml start :Get user from db; if (user?) then (no) :Return False; stop else (yes) :Get user from db; :Get chartview from user; :Return: chartview or specified property; stop @enduml ``` ### set_chart_view(user_name, values, specific_property, default_market) ```plantuml @startuml start :Get user from db; if (Specific_property undefined?) then (yes) if (Values type is dict?) then (no) :raise; end endif if (Values len is 3?) then (no) :raise; end endif :Set user['chart view'] = values; :return; stop else (no) if (type(specific_property) is str?) then (no) :raise; end endif :chartview = user['chart view']; if (specific_property == exchange?) then (yes) if (default_market?) then (no) :raise; end endif :chart_view['market'] = default_market; :chart_view['exchange_name'] = values; elseif (specific_property == 'timeframe'?) then (yes) :chart_view['timeframe'] = values; elseif (specific_property == 'market'?) then (yes) :chart_view['market'] = values; else (raise) end endif :modify_user_data(username=user_name, field_name='chart_views', new_data=str(chart_view)); stop @enduml ``` ### get_user_from_db(user_name) ```plantuml @startuml start :db --> get_rows_where( username == username ); if (success) then (yse) :Return: User; stop else (no) :Return: None; stop endif @enduml ``` ### get_user_from_cache(user_name) ```plantuml @startuml start :get users from cache; if (user_name in users?) then (yse) :Return: user; stop else (no) :Return: None; stop endif @enduml ``` ### remove_user_from_cache(user_name) ```plantuml @startuml start :get users from cache; :del user; :save users to cache; @enduml ``` ### add_user_to_cache(user) ```plantuml @startuml start :update users in cache with new user; :Return: None; @enduml ``` ### add_user_to_cache(user) ```plantuml @startuml start :update users in cache with new user; :Return: None; @enduml ``` ### update_api_keys(api_keys, exchange, user_name) ```plantuml @startuml start :Get the user from the database; :Get the old api keys dictionary; :Add the new keys to the dictionary; :Modify the cache and db; :Get the old list of configured exchanges; :Append the list of configured exchanges; :Modify the cache and db; :Activate the newly configured exchange; @enduml ``` ### active_exchange(exchange, user_name, cmd) ```plantuml @startuml start :Get the user from the database; :Get the old active_exchanges list; if (cmd == 'toggle') then (yes) :Remove then add; elseif (cmd == 'set') then (yes) :Add; elseif (cmd == 'remove') then (yes) :delete; :Modify the cache and db; endif :Return: None; stop @enduml ```