diff --git a/app/lib_sql_search.py b/app/lib_sql_search.py index 5d27023..8855f43 100644 --- a/app/lib_sql_search.py +++ b/app/lib_sql_search.py @@ -159,12 +159,12 @@ def sql_search_qry_part( else: use_match = True if table_name: - try: + try: with lib_sql_core.engine.connect() as conn: conn.execute(text(f"SELECT default_qry_str FROM `{table_name}` LIMIT 0")) - except: + except: use_match = False - else: + else: use_match = False if use_match: @@ -213,32 +213,46 @@ def sql_search_qry_part( target_field = f.field vision_fields = [ 'id', 'account_id', 'site_id', 'person_id', 'user_id', - 'journal_id', 'journal_entry_id', 'page_id', 'post_id', - 'post_comment_id', 'organization_id', 'address_id', 'hosted_file_id' + 'archive_id', 'archive_content_id', + 'event_id', + 'event_session_id', 'event_presentation_id', 'event_presenter_id', + 'event_device_id', 'event_location_id', 'event_track_id', + 'event_exhibit_id', + 'event_person_id', 'event_registration_id', + 'order_id', 'product_id', 'order_cart_id', 'membership_id', 'sponsorship_id', + 'journal_id', 'journal_entry_id', 'page_id', + 'post_id', 'post_comment_id', + 'organization_id', 'address_id', 'contact_id', + 'hosted_file_id' ] if target_field in vision_fields: - candidate_field = 'id_random' if target_field == 'id' else f"{target_field}_random" + # ONLY map to _random if the value is a string (looks like a random ID) + # If it's an integer, we want to query the original integer column. + is_int_val = isinstance(f.value, int) or (isinstance(f.value, str) and f.value.isdigit()) - # Schema Check: Verify if the random version exists in the current table/view - use_random = False - if table_name: - try: - with lib_sql_core.engine.connect() as conn: - conn.execute(text(f"SELECT `{candidate_field}` FROM `{table_name}` LIMIT 0")) - use_random = True - except Exception: + if not is_int_val: + candidate_field = 'id_random' if target_field == 'id' else f"{target_field}_random" + + # Schema Check: Verify if the random version exists in the current table/view + use_random = False + if table_name: + try: + with lib_sql_core.engine.connect() as conn: + conn.execute(text(f"SELECT `{candidate_field}` FROM `{table_name}` LIMIT 0")) + use_random = True + except Exception: + pass + + if use_random: + target_field = candidate_field + # print(f"Search Trace: Mapping filter field '{f.field}' -> '{target_field}'", flush=True) + else: + # If random doesn't exist, we must stick to the integer column + # but we'll need to resolve the string value to an integer elsewhere + # or rely on the user providing an integer for now. pass - if use_random: - target_field = candidate_field - # print(f"Search Trace: Mapping filter field '{f.field}' -> '{target_field}'", flush=True) - else: - # If random doesn't exist, we must stick to the integer column - # but we'll need to resolve the string value to an integer elsewhere - # or rely on the user providing an integer for now. - pass - if searchable_fields is not None and target_field not in searchable_fields: # Fallback check for original field just in case if f.field not in searchable_fields: diff --git a/app/object_definitions/events_general.py b/app/object_definitions/events_general.py index e01475f..d0112b8 100644 --- a/app/object_definitions/events_general.py +++ b/app/object_definitions/events_general.py @@ -44,6 +44,7 @@ events_general_obj_li = { ], # V3 Search Security: 'searchable_fields': [ + 'account_id', 'event_id', 'event_id_random', 'account_id_random', 'event_code', 'conference', 'type', 'name', 'summary', 'description', 'format', 'timezone', 'location_text', 'status', 'enable', 'hide', 'priority', 'sort', @@ -67,6 +68,7 @@ events_general_obj_li = { 'public_read': True, # V3 Search Security: 'searchable_fields': [ + 'event_id', 'event_file_id', 'hosted_file_id', 'event_file_id_random', 'hosted_file_id_random', 'event_id_random', 'event_exhibit_id_random', 'event_location_id_random', 'event_presentation_id_random', 'event_presenter_id_random', diff --git a/app/object_definitions/events_registration.py b/app/object_definitions/events_registration.py index 1eeeb77..12379d2 100644 --- a/app/object_definitions/events_registration.py +++ b/app/object_definitions/events_registration.py @@ -20,7 +20,10 @@ events_registration_obj_li = { 'base_name': Event_Badge_Basic_Base, # V3 Search Security: 'searchable_fields': [ - 'event_badge_id_random', 'event_badge_template_id_random', + 'account_id', 'event_badge_id', 'event_badge_template_id', + 'event_id', + 'account_id_random', 'event_badge_id_random', 'event_badge_template_id_random', + 'event_id_random', 'event_person_id_random', 'external_id', 'pronouns', 'informal_name', 'title_names', 'given_name', 'middle_name', 'family_name', 'designations', 'professional_title', 'full_name', 'affiliations', 'email', 'phone', @@ -43,6 +46,7 @@ events_registration_obj_li = { 'base_name': Event_Badge_Template_Base, # V3 Search Security: 'searchable_fields': [ + 'event_badge_template_id', 'event_id', 'event_badge_template_id_random', 'event_id_random', 'name', 'description', 'layout', 'notes', 'enable', 'created_on', 'updated_on' diff --git a/app/object_definitions/journals.py b/app/object_definitions/journals.py index 08f635e..4fb63af 100644 --- a/app/object_definitions/journals.py +++ b/app/object_definitions/journals.py @@ -23,8 +23,9 @@ journal_obj_li = { 'id', 'account_id', 'person_id', 'user_id', 'journal_id_random', 'account_id_random', 'person_id_random', 'user_id_random', 'name', 'short_name', 'summary', 'outline', - 'description', 'type_code', 'tags', 'billable', 'enable', 'hide', - 'priority', 'sort', 'group', 'notes', 'created_on', 'updated_on', 'default_qry_str' + 'description', 'type_code', 'tags', 'billable', + 'enable', 'hide', 'priority', 'sort', 'group', 'notes', + 'created_on', 'updated_on', 'default_qry_str' ], }, 'journal_entry': { @@ -48,8 +49,8 @@ journal_obj_li = { 'journal_entry_id_random', 'journal_id_random', 'account_id_random', 'name', 'short_name', 'summary', 'content', 'type_code', 'topic_code', 'category_code', - 'tags', 'location', 'billable', 'enable', 'hide', 'priority', 'sort', - 'group', 'notes', 'created_on', 'updated_on' + 'tags', 'location', 'billable', 'enable', 'hide', 'priority', 'enable', 'hide', 'priority', 'sort', 'group', 'notes', + 'created_on', 'updated_on', 'default_qry_str' ], }, }