TangibleAI/mathtext-fastapi
1
1import os2from datetime import datetime3 4from dotenv import load_dotenv5from supabase import create_client6 7load_dotenv()8 9SUPA = create_client(10 os.environ.get('SUPABASE_URL'),11 os.environ.get('SUPABASE_KEY')12)13 14 15def log_message_data_through_supabase_api(table_name, log_data):16 return SUPA.table(table_name).insert(log_data).execute()17 18 19def format_datetime_in_isoformat(dt):20 return getattr(dt.now(), 'isoformat', lambda x: None)()21 22 23def get_or_create_supabase_entry(table_name, insert_data, check_variable=None):24 """ Checks if project or contact exists and adds entry if not found25 26 Input:27 - table_name: str- the name of the table in Supabase that is being examined28 - insert_data: json - the data to insert29 - check_variable: str/None - the specific field to check for existing match30 31 Result32 - logged_data - an object with the Supabase data33 """34 if table_name == 'contact':35 resp = SUPA.table('contact').select("*").eq(36 "original_contact_id",37 insert_data['original_contact_id']38 ).eq(39 "project",40 insert_data['project']41 ).execute()42 else:43 resp = SUPA.table(table_name).select("*").eq(44 check_variable,45 insert_data[check_variable]46 ).execute()47 48 if len(resp.data) == 0:49 logged_data = log_message_data_through_supabase_api(50 table_name,51 insert_data52 )53 else:54 logged_data = resp55 return logged_data56 57 58def prepare_message_data_for_logging(message_data, nlu_response):59 """ Builds objects for each table and logs them to the database60 61 Input:62 - message_data: an object with the full message data from Turn.io/Whatsapp63 """64 project_data = {65 'name': "Rori",66 # Autogenerated fields: id, created_at, modified_at67 }68 project_data_log = get_or_create_supabase_entry(69 'project',70 project_data,71 'name'72 )73 74 contact_data = {75 'project': project_data_log.data[0]['id'], # FK76 'original_contact_id': message_data['contact_uuid'],77 'urn': "",78 'language_code': "en",79 'contact_inserted_at': format_datetime_in_isoformat(datetime.now())80 # Autogenerated fields: id, created_at, modified_at81 }82 contact_data_log = get_or_create_supabase_entry('contact', contact_data)83 84 del message_data['author_id']85 86 message_data = {87 'contact': contact_data_log.data[0]['id'], # FK88 'original_message_id': message_data['message_id'],89 'text': message_data['message_body'],90 'direction': message_data['message_direction'],91 'sender_type': message_data['author_type'],92 'channel_type': "whatsapp / turn.io",93 'message_inserted_at': message_data['message_inserted_at'],94 'message_modified_at': message_data['message_updated_at'],95 'message_sent_at': format_datetime_in_isoformat(datetime.now()),96 'nlu_response': nlu_response,97 'request_object': message_data98 # Autogenerated fields: created_at, modified_at99 }100 message_data_log = log_message_data_through_supabase_api(101 'message',102 message_data103 )104 