From 8a6d332bca7ce179801e0026ff8b47395984f01d Mon Sep 17 00:00:00 2001 From: PhilipWafula Date: Tue, 11 May 2021 09:45:19 +0300 Subject: [PATCH] Move account creation to package init file. --- apps/cic-ussd/cic_ussd/account/__init__.py | 62 ++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 apps/cic-ussd/cic_ussd/account/__init__.py diff --git a/apps/cic-ussd/cic_ussd/account/__init__.py b/apps/cic-ussd/cic_ussd/account/__init__.py new file mode 100644 index 00000000..e7c81a0e --- /dev/null +++ b/apps/cic-ussd/cic_ussd/account/__init__.py @@ -0,0 +1,62 @@ +"""This package handles account operations.""" + +# external imports +from cic_eth.api import Api + +# local imports +from cic_ussd.operations import (add_tasks_to_tracker, + cache_account_creation_task_id, + create_or_update_session, + define_multilingual_responses) +from cic_ussd.menu.ussd_menu import UssdMenu + + +def create(chain_str: str, + external_session_id: str, + phone_number: str, + service_code: str, + user_input: str) -> str: + """This function issues a task to create a blockchain account on cic-eth. It then creates a record of the ussd + session corresponding to the creation of the account and returns a response denoting that the user's account is + being created. + :param chain_str: The chain name and network id. + :type chain_str: str + :param external_session_id: A unique ID from africastalking. + :type external_session_id: str + :param phone_number: The phone number for the account to be created. + :type phone_number: str + :param service_code: The service code dialed. + :type service_code: str + :param user_input: The input entered by the user. + :type user_input: str + :return: A response denoting that the account is being created. + :rtype: str + """ + # attempt to create a user + cic_eth_api = Api(callback_task='cic_ussd.tasks.callback_handler.process_account_creation_callback', + callback_queue='cic-ussd', + callback_param='', + chain_str=chain_str) + creation_task_id = cic_eth_api.create_account().id + + # record task initiation time + add_tasks_to_tracker(task_uuid=creation_task_id) + + # cache account creation data + cache_account_creation_task_id(phone_number=phone_number, task_id=creation_task_id) + + # find menu to notify user account is being created + current_menu = UssdMenu.find_by_name(name='account_creation_prompt') + + # create a ussd session session + create_or_update_session( + external_session_id=external_session_id, + phone=phone_number, + service_code=service_code, + current_menu=current_menu.get('name'), + user_input=user_input) + + # define response to relay to user + response = define_multilingual_responses( + key='ussd.kenya.account_creation_prompt', locales=['en', 'sw'], prefix='END') + return response