From f3662f94624e094b3717f582428883032c680f74 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Fri, 6 Feb 2026 15:46:05 -0500 Subject: [PATCH] fix(v3-vision): final hardening of demo models Standardized Badge, Exhibit, and Tracking models to ID Vision standards. Included account_id support for exhibit tracking and removed legacy validators to ensure stable CRUD operations for the Tuesday demo. --- app/models/event_badge_models.py | 160 +++++++++--------- app/models/event_exhibit_models.py | 142 +++++----------- app/models/event_exhibit_tracking_models.py | 94 +++++----- app/object_definitions/events_exhibits.py | 10 +- app/object_definitions/events_registration.py | 28 +-- 5 files changed, 193 insertions(+), 241 deletions(-) diff --git a/app/models/event_badge_models.py b/app/models/event_badge_models.py index 84590a8..6cc7ed2 100644 --- a/app/models/event_badge_models.py +++ b/app/models/event_badge_models.py @@ -11,33 +11,60 @@ from app.models.event_badge_template_models import Event_Badge_Template_Base from app.models.order_models import Order_Base +# ### BEGIN ### API Event Badge Models ### Event_Badge_Base() ### class Event_Badge_Base(BaseModel): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - id_random: Optional[str] = Field( - # **base_fields['event_badge_id_random'], - alias = 'event_badge_id_random', - ) - id: Optional[int] = Field( - alias = 'event_badge_id' - ) - - event_id_random: Optional[str] - event_id: Optional[int] - + # --- Standardized Vision IDs (Strings for API, Integers for DB) --- + id: Optional[Union[int, str]] = Field(None, **base_fields['event_badge_id_random']) + event_badge_id: Optional[Union[int, str]] = Field(None, **base_fields['event_badge_id_random']) + event_id: Optional[Union[int, str]] = Field(None, **base_fields['event_id_random']) + # NOTE: This should only be used when the event_person record can not be created. And records before 2022. - event_id_random_only: Optional[str] - event_id_only: Optional[int] + event_id_only: Optional[Union[int, str]] = Field(None, **base_fields['event_id_random']) - event_badge_template_id_random: Optional[str] - event_badge_template_id: Optional[int] + event_badge_template_id: Optional[Union[int, str]] = Field(None, **base_fields['event_badge_template_id_random']) + event_person_id: Optional[Union[int, str]] = Field(None, **base_fields['event_person_id_random']) + person_id: Optional[Union[int, str]] = Field(None, **base_fields['person_id_random']) - event_person_id_random: Optional[str] - event_person_id: Optional[int] + # --- Standardized Legacy / Internal IDs (Excluded) --- + id_random: Optional[str] = Field(None, alias='event_badge_id_random', exclude=True) + event_id_random: Optional[str] = Field(None, exclude=True) + event_id_random_only: Optional[str] = Field(None, exclude=True) + event_badge_template_id_random: Optional[str] = Field(None, exclude=True) + event_person_id_random: Optional[str] = Field(None, exclude=True) + person_id_random: Optional[str] = Field(None, exclude=True) - person_id_random: Optional[str] - person_id: Optional[int] + @root_validator(pre=True) + def map_v3_ids(cls, values): + """ + Vision Transformer: + Map DB keys to clean API keys and strip internal integers during READ operations. + During CREATE (POST) operations, we ensure resolved integers are preserved. + """ + # 1. Map Random Strings to Clean Names + rid = values.get('id_random') or values.get('event_badge_id_random') + if rid and isinstance(rid, str): + values['id'] = rid + values['event_badge_id'] = rid + + if e_rid := values.get('event_id_random'): values['event_id'] = e_rid + if eo_rid := values.get('event_id_random_only'): values['event_id_only'] = eo_rid + if et_rid := values.get('event_badge_template_id_random'): values['event_badge_template_id'] = et_rid + if ep_rid := values.get('event_person_id_random'): values['event_person_id'] = ep_rid + if p_rid := values.get('person_id_random'): values['person_id'] = p_rid + + # 2. Prevent "Collision Population" or leakage of integers during API responses + # WE MUST NOT DELETE these if they are already integers during a POST operation + # as they have been resolved by sanitize_payload. + for k in ['id', 'event_badge_id', 'event_id', 'event_id_only', 'event_badge_template_id', 'event_person_id', 'person_id']: + val = values.get(k) + if val is not None and not isinstance(val, str): + if values.get(f'{k}_random') or (k=='id' and values.get('id_random')) or (k=='event_id_only' and values.get('event_id_random_only')): + del values[k] + + return values external_id: Optional[str] # Generated internally or externally. Needs to be stable. It should not change. external_event_id: Optional[str] # Event ID generated by external system. Needs to be stable. It should not change. @@ -164,48 +191,6 @@ class Event_Badge_Base(BaseModel): _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) - @validator('id', always=True) - def event_badge_id_lookup(cls, v, values, **kwargs): - if isinstance(v, int) and v > 0: return v - elif id_random := values.get('id_random'): - return redis_lookup_id_random(record_id_random=id_random, table_name='event_badge') - return None - - @validator('event_id', always=True) - def event_id_lookup(cls, v, values, **kwargs): - if isinstance(v, int) and v > 0: return v - elif id_random := values.get('event_id_random'): - return redis_lookup_id_random(record_id_random=id_random, table_name='event') - return None - - @validator('event_id_only', always=True) - def event_id_only_lookup(cls, v, values, **kwargs): - if isinstance(v, int) and v > 0: return v - elif id_random := values.get('event_id_random_only'): - return redis_lookup_id_random(record_id_random=id_random, table_name='event') - return None - - @validator('event_badge_template_id', always=True) - def event_badge_template_id_lookup(cls, v, values, **kwargs): - if isinstance(v, int) and v > 0: return v - elif id_random := values.get('event_badge_template_id_random'): - return redis_lookup_id_random(record_id_random=id_random, table_name='event_badge_template') - return None - - @validator('event_person_id', always=True) - def event_person_id_lookup(cls, v, values, **kwargs): - if isinstance(v, int) and v > 0: return v - elif id_random := values.get('event_person_id_random'): - return redis_lookup_id_random(record_id_random=id_random, table_name='event_person') - return None - - @validator('person_id', always=True) - def person_id_lookup(cls, v, values, **kwargs): - if isinstance(v, int) and v > 0: return v - elif id_random := values.get('person_id_random'): - return redis_lookup_id_random(record_id_random=id_random, table_name='person') - return None - class Config: underscore_attrs_are_private = True allow_population_by_field_name = True @@ -216,18 +201,41 @@ class Event_Badge_Basic_Base(BaseModel): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - id_random: Optional[str] = Field( - **base_fields['event_badge_id_random'], - alias = 'event_badge_id_random', - ) - id: Optional[int] = Field( - alias = 'event_badge_id' - ) - event_badge_template_id_random: Optional[str] - # event_badge_template_id: Optional[int] + # --- Standardized Vision IDs (Strings for API, Integers for DB) --- + id: Optional[Union[int, str]] = Field(None, **base_fields['event_badge_id_random']) + event_badge_id: Optional[Union[int, str]] = Field(None, **base_fields['event_badge_id_random']) + event_badge_template_id: Optional[Union[int, str]] = Field(None, **base_fields['event_badge_template_id_random']) + event_person_id: Optional[Union[int, str]] = Field(None, **base_fields['event_person_id_random']) - event_person_id_random: Optional[str] - # event_person_id: Optional[int] + # --- Standardized Legacy / Internal IDs (Excluded) --- + id_random: Optional[str] = Field(None, alias='event_badge_id_random', exclude=True) + event_badge_template_id_random: Optional[str] = Field(None, exclude=True) + event_person_id_random: Optional[str] = Field(None, exclude=True) + + @root_validator(pre=True) + def map_v3_ids(cls, values): + """ + Vision Transformer: + Map DB keys to clean API keys and strip internal integers during READ operations. + During CREATE (POST) operations, we ensure resolved integers are preserved. + """ + # 1. Map Random Strings to Clean Names + rid = values.get('id_random') or values.get('event_badge_id_random') + if rid and isinstance(rid, str): + values['id'] = rid + values['event_badge_id'] = rid + + if et_rid := values.get('event_badge_template_id_random'): values['event_badge_template_id'] = et_rid + if ep_rid := values.get('event_person_id_random'): values['event_person_id'] = ep_rid + + # 2. Prevent "Collision Population" or leakage of integers during API responses + for k in ['id', 'event_badge_id', 'event_badge_template_id', 'event_person_id']: + val = values.get(k) + if val is not None and not isinstance(val, str): + if values.get(f'{k}_random') or (k=='id' and values.get('id_random')): + del values[k] + + return values external_id: Optional[str] # Generated internally or externally. Needs to be stable. It should not change. # external_sys_id: Optional[str] # Person ID generated by external system (should be stable and not change) @@ -318,14 +326,8 @@ class Event_Badge_Basic_Base(BaseModel): _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) - @validator('id', always=True) - def event_badge_id_lookup(cls, v, values, **kwargs): - if isinstance(v, int) and v > 0: return v - elif id_random := values.get('id_random'): - return redis_lookup_id_random(record_id_random=id_random, table_name='event_badge') - return None - class Config: underscore_attrs_are_private = True allow_population_by_field_name = True fields = base_fields + diff --git a/app/models/event_exhibit_models.py b/app/models/event_exhibit_models.py index bda845f..6ca735c 100644 --- a/app/models/event_exhibit_models.py +++ b/app/models/event_exhibit_models.py @@ -15,32 +15,55 @@ class Event_Exhibit_Base(BaseModel): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - id_random: Optional[str] = Field( - **base_fields['event_exhibit_id_random'], - alias = 'event_exhibit_id_random', - ) - id: Optional[int] = Field( - alias = 'event_exhibit_id' - ) + # --- Standardized Vision IDs (Strings for API, Integers for DB) --- + id: Optional[Union[int, str]] = Field(None, **base_fields['event_exhibit_id_random']) + event_exhibit_id: Optional[Union[int, str]] = Field(None, **base_fields['event_exhibit_id_random']) + account_id: Optional[Union[int, str]] = Field(None, **base_fields['account_id_random']) + event_id: Optional[Union[int, str]] = Field(None, **base_fields['event_id_random']) + organization_id: Optional[Union[int, str]] = Field(None, **base_fields['organization_id_random']) + contact_id: Optional[Union[int, str]] = Field(None, **base_fields['contact_id_random']) + person_id: Optional[Union[int, str]] = Field(None, **base_fields['person_id_random']) + status_id: Optional[Union[int, str]] = Field(None, **base_fields['status_id_random']) + + # --- Standardized Legacy / Internal IDs (Excluded) --- + id_random: Optional[str] = Field(None, alias='event_exhibit_id_random', exclude=True) + account_id_random: Optional[str] = Field(None, exclude=True) + event_id_random: Optional[str] = Field(None, exclude=True) + organization_id_random: Optional[str] = Field(None, exclude=True) + contact_id_random: Optional[str] = Field(None, exclude=True) + person_id_random: Optional[str] = Field(None, exclude=True) + status_id_random: Optional[str] = Field(None, exclude=True) + + @root_validator(pre=True) + def map_v3_ids(cls, values): + """ + Vision Transformer: + Map DB keys to clean API keys and strip internal integers during READ operations. + """ + # 1. Map Random Strings to Clean Names + rid = values.get('id_random') or values.get('event_exhibit_id_random') + if rid and isinstance(rid, str): + values['id'] = rid + values['event_exhibit_id'] = rid + + if a_rid := values.get('account_id_random'): values['account_id'] = a_rid + if e_rid := values.get('event_id_random'): values['event_id'] = e_rid + if o_rid := values.get('organization_id_random'): values['organization_id'] = o_rid + if c_rid := values.get('contact_id_random'): values['contact_id'] = c_rid + if p_rid := values.get('person_id_random'): values['person_id'] = p_rid + if s_rid := values.get('status_id_random'): values['status_id'] = s_rid + + # 2. Prevent "Collision Population" or leakage of integers during API responses + for k in ['id', 'event_exhibit_id', 'account_id', 'event_id', 'organization_id', 'contact_id', 'person_id', 'status_id']: + val = values.get(k) + if val is not None and not isinstance(val, str): + if values.get(f'{k}_random') or (k=='id' and values.get('id_random')): + del values[k] + + return values code: Optional[str] # The assigned booth number or ID - account_id_random: Optional[str] - account_id: Optional[int] - event_id_random: Optional[str] - event_id: Optional[int] - organization_id_random: Optional[str] - organization_id: Optional[int] - contact_id_random: Optional[str] - contact_id: Optional[int] - - # Point of Contact person ID - person_id_random: Optional[str] - person_id: Optional[int] - - status_id_random: Optional[str] - status_id: Optional[int] - staff_passcode: Optional[str] name: Optional[str] @@ -97,79 +120,6 @@ class Event_Exhibit_Base(BaseModel): _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) - #@validator('event_exhibit_id_random', always=True) - def event_exhibit_id_random_copy(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['id_random']: - return values['id_random'] - return None - - @validator('id', always=True) - def event_exhibit_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['id_random']: - log.debug(values['id_random']) - return redis_lookup_id_random(record_id_random=values['id_random'], table_name='event_exhibit') - return None - - @validator('account_id', always=True) - def account_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['account_id_random']: - return redis_lookup_id_random(record_id_random=values['account_id_random'], table_name='account') - return None - - @validator('event_id', always=True) - def event_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['event_id_random']: - return redis_lookup_id_random(record_id_random=values['event_id_random'], table_name='event') - return None - - @validator('organization_id', always=True) - def organization_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['organization_id_random']: - return redis_lookup_id_random(record_id_random=values['organization_id_random'], table_name='organization') - return None - - @validator('contact_id', always=True) - def contact_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['contact_id_random']: - return redis_lookup_id_random(record_id_random=values['contact_id_random'], table_name='contact') - return None - - @validator('person_id', always=True) - def person_id_lookup(cls, v, values, **kwargs): - log.setLevel(logging.WARNING) - log.debug(locals()) - - if values['person_id_random']: - return redis_lookup_id_random(record_id_random=values['person_id_random'], table_name='person') - return None - - # @validator('leads_custom_questions_json', always=True) - # def leads_custom_questions_json_fix(cls, v, values, **kwargs): - # if isinstance(v, str): - # return json.loads(v) - # # return v.dict() - # else: - # return v - # return None - class Config: underscore_attrs_are_private = True allow_population_by_field_name = True diff --git a/app/models/event_exhibit_tracking_models.py b/app/models/event_exhibit_tracking_models.py index f9f703c..d1d4cd7 100644 --- a/app/models/event_exhibit_tracking_models.py +++ b/app/models/event_exhibit_tracking_models.py @@ -17,25 +17,50 @@ class Event_Exhibit_Tracking_Base(BaseModel): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - id_random: Optional[str] = Field( - **base_fields['event_exhibit_tracking_id_random'], - alias = 'event_exhibit_tracking_id_random', - ) - id: Optional[int] = Field( - alias = 'event_exhibit_tracking_id' - ) + # --- Standardized Vision IDs (Strings for API, Integers for DB) --- + id: Optional[Union[int, str]] = Field(None, **base_fields['event_exhibit_tracking_id_random']) + event_exhibit_tracking_id: Optional[Union[int, str]] = Field(None, **base_fields['event_exhibit_tracking_id_random']) + account_id: Optional[Union[int, str]] = Field(None, **base_fields['account_id_random']) + event_id: Optional[Union[int, str]] = Field(None, **base_fields['event_id_random']) + event_exhibit_id: Optional[Union[int, str]] = Field(None, **base_fields['event_exhibit_id_random']) + event_person_id: Optional[Union[int, str]] = Field(None, **base_fields['event_person_id_random']) + event_badge_id: Optional[Union[int, str]] = Field(None, **base_fields['event_badge_id_random']) - event_id_random: Optional[str] - event_id: Optional[int] + # --- Standardized Legacy / Internal IDs (Excluded) --- + id_random: Optional[str] = Field(None, alias='event_exhibit_tracking_id_random', exclude=True) + account_id_random: Optional[str] = Field(None, exclude=True) + event_id_random: Optional[str] = Field(None, exclude=True) + event_exhibit_id_random: Optional[str] = Field(None, exclude=True) + event_person_id_random: Optional[str] = Field(None, exclude=True) + event_badge_id_random: Optional[str] = Field(None, exclude=True) - event_exhibit_id_random: Optional[str] - event_exhibit_id: Optional[int] - - event_person_id_random: Optional[str] - event_person_id: Optional[int] - - event_badge_id_random: Optional[str] - event_badge_id: Optional[int] + @root_validator(pre=True) + def map_v3_ids(cls, values): + """ + Vision Transformer: + Map DB keys to clean API keys and strip internal integers during READ operations. + During CREATE (POST) operations, we ensure resolved integers are preserved. + """ + # 1. Map Random Strings to Clean Names + rid = values.get('id_random') or values.get('event_exhibit_tracking_id_random') + if rid and isinstance(rid, str): + values['id'] = rid + values['event_exhibit_tracking_id'] = rid + + if a_rid := values.get('account_id_random'): values['account_id'] = a_rid + if e_rid := values.get('event_id_random'): values['event_id'] = e_rid + if ex_rid := values.get('event_exhibit_id_random'): values['event_exhibit_id'] = ex_rid + if ep_rid := values.get('event_person_id_random'): values['event_person_id'] = ep_rid + if eb_rid := values.get('event_badge_id_random'): values['event_badge_id'] = eb_rid + + # 2. Prevent "Collision Population" or leakage of integers during API responses + for k in ['id', 'event_exhibit_tracking_id', 'account_id', 'event_id', 'event_exhibit_id', 'event_person_id', 'event_badge_id']: + val = values.get(k) + if val is not None and not isinstance(val, str): + if values.get(f'{k}_random') or (k=='id' and values.get('id_random')): + del values[k] + + return values external_person_id: Optional[str] # This is probably an email address @@ -168,41 +193,6 @@ class Event_Exhibit_Tracking_Base(BaseModel): _processed_at: datetime.datetime = PrivateAttr(default_factory=datetime.datetime.now) - @validator('id', always=True) - def event_exhibit_tracking_id_lookup(cls, v, values, **kwargs): - if isinstance(v, int) and v > 0: return v - elif id_random := values.get('id_random'): - return redis_lookup_id_random(record_id_random=id_random, table_name='event_exhibit_tracking') - return None - - @validator('event_id', always=True) - def event_id_lookup(cls, v, values, **kwargs): - if isinstance(v, int) and v > 0: return v - elif id_random := values.get('event_id_random'): - return redis_lookup_id_random(record_id_random=id_random, table_name='event') - return None - - @validator('event_exhibit_id', always=True) - def event_exhibit_id_lookup(cls, v, values, **kwargs): - if isinstance(v, int) and v > 0: return v - elif id_random := values.get('event_exhibit_id_random'): - return redis_lookup_id_random(record_id_random=id_random, table_name='event_exhibit') - return None - - @validator('event_person_id', always=True) - def event_person_id_lookup(cls, v, values, **kwargs): - if isinstance(v, int) and v > 0: return v - elif id_random := values.get('event_person_id_random'): - return redis_lookup_id_random(record_id_random=id_random, table_name='event_person') - return None - - @validator('event_badge_id', always=True) - def event_badge_id_lookup(cls, v, values, **kwargs): - if isinstance(v, int) and v > 0: return v - elif id_random := values.get('event_badge_id_random'): - return redis_lookup_id_random(record_id_random=id_random, table_name='event_badge') - return None - class Config: underscore_attrs_are_private = True allow_population_by_field_name = True diff --git a/app/object_definitions/events_exhibits.py b/app/object_definitions/events_exhibits.py index e76b84e..6e7f64d 100644 --- a/app/object_definitions/events_exhibits.py +++ b/app/object_definitions/events_exhibits.py @@ -16,8 +16,9 @@ events_exhibits_obj_li = { 'base_name': Event_Exhibit_Base, # V3 Search Security: 'searchable_fields': [ - 'event_exhibit_id', 'event_exhibit_id_random', 'account_id', 'account_id_random', 'event_id_random', - 'organization_id_random', 'contact_id_random', 'person_id_random', + 'id', 'event_exhibit_id', 'account_id', 'event_id', 'organization_id', 'contact_id', 'person_id', 'status_id', + 'id_random', 'event_exhibit_id_random', 'account_id_random', 'event_id_random', + 'organization_id_random', 'contact_id_random', 'person_id_random', 'status_id_random', 'code', 'name', 'tagline', 'description', 'enable', 'hide', 'priority', 'sort', 'group', 'notes', 'created_on', 'updated_on' ], @@ -28,13 +29,16 @@ events_exhibits_obj_li = { 'tbl_update': 'event_exhibit_tracking', 'mdl': Event_Exhibit_Tracking_Base, 'mdl_default': Event_Exhibit_Tracking_Base, + 'mdl_in': Event_Exhibit_Tracking_Base, + 'mdl_out': Event_Exhibit_Tracking_Base, # Legacy V2 keys: 'table_name': 'v_event_exhibit_tracking', 'tbl_name_update': 'event_exhibit_tracking', 'base_name': Event_Exhibit_Tracking_Base, # V3 Search Security: 'searchable_fields': [ - 'event_exhibit_tracking_id_random', 'event_id_random', + 'id', 'event_exhibit_tracking_id', 'event_id', 'event_exhibit_id', 'event_person_id', 'event_badge_id', + 'id_random', 'event_exhibit_tracking_id_random', 'event_id_random', 'event_exhibit_id_random', 'event_person_id_random', 'event_badge_id_random', 'external_person_id', 'enable', 'hide', 'priority', 'sort', 'group', 'notes', 'created_on', 'updated_on' diff --git a/app/object_definitions/events_registration.py b/app/object_definitions/events_registration.py index d53e286..0f529bb 100644 --- a/app/object_definitions/events_registration.py +++ b/app/object_definitions/events_registration.py @@ -13,6 +13,8 @@ events_registration_obj_li = { 'tbl_update': 'event_badge', 'mdl': Event_Badge_Base, 'mdl_default': Event_Badge_Basic_Base, + 'mdl_in': Event_Badge_Base, + 'mdl_out': Event_Badge_Basic_Base, # Legacy V2 keys: 'table_name': 'v_event_badge', 'table_name_alt': 'v_event_badge_only', @@ -20,11 +22,9 @@ events_registration_obj_li = { 'base_name': Event_Badge_Basic_Base, # V3 Search Security: 'searchable_fields': [ - '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', + 'id', 'event_badge_id', 'account_id', 'event_id', 'event_id_only', 'event_badge_template_id', 'event_person_id', 'person_id', + 'id_random', 'event_badge_id_random', 'account_id_random', 'event_id_random', 'event_id_random_only', 'event_badge_template_id_random', 'event_person_id_random', 'person_id_random', + 'external_id', 'pronouns', 'informal_name', 'title_names', 'given_name', 'middle_name', 'family_name', 'designations', 'professional_title', 'full_name', 'affiliations', 'email', 'phone', 'location', 'allow_tracking', 'print_count', 'print_first_datetime', @@ -48,8 +48,8 @@ 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', + 'id', 'event_badge_template_id', 'event_id', + 'id_random', 'event_badge_template_id_random', 'event_id_random', 'name', 'description', 'layout', 'notes', 'enable', 'created_on', 'updated_on' ], @@ -68,7 +68,8 @@ events_registration_obj_li = { 'base_name': Event_Person_Base, # V3 Search Security: 'searchable_fields': [ - 'event_person_id_random', 'account_id_random', 'event_id_random', + 'id', 'event_person_id', 'account_id', 'event_id', 'event_badge_id', 'person_id', 'user_id', + 'id_random', 'event_person_id_random', 'account_id_random', 'event_id_random', 'event_badge_id_random', 'person_id_random', 'user_id_random', 'external_id', 'external_person_id', 'informal_name', 'given_name', 'family_name', 'full_name', 'email', 'enable', 'hide', 'priority', 'sort', 'group', @@ -89,7 +90,8 @@ events_registration_obj_li = { 'base_name': Event_Person_Profile_Base, # V3 Search Security: 'searchable_fields': [ - 'event_person_profile_id_random', 'account_id_random', + 'id', 'event_person_profile_id', 'account_id', 'contact_id', 'event_id', 'event_person_id', 'organization_id', + 'id_random', 'event_person_profile_id_random', 'account_id_random', 'contact_id_random', 'event_id_random', 'event_person_id_random', 'organization_id_random', 'pronouns', 'informal_name', 'given_name', 'family_name', 'professional_title', 'full_name', 'affiliations', @@ -103,13 +105,16 @@ events_registration_obj_li = { 'tbl_update': 'event_person_tracking', 'mdl': Event_Person_Tracking_Base, 'mdl_default': Event_Person_Tracking_Base, + 'mdl_in': Event_Person_Tracking_Base, + 'mdl_out': Event_Person_Tracking_Base, # Legacy V2 keys: 'table_name': 'v_event_person_tracking', 'tbl_name_update': 'event_person_tracking', 'base_name': Event_Person_Tracking_Base, # V3 Search Security: 'searchable_fields': [ - 'event_person_tracking_id_random', 'event_id_random', + 'id', 'event_person_tracking_id', 'event_id', 'event_session_id', 'event_person_id', + 'id_random', 'event_person_tracking_id_random', 'event_id_random', 'event_session_id_random', 'event_person_id_random', 'check_in_out', 'in_datetime', 'out_datetime', 'enable', 'notes', 'created_on', 'updated_on' @@ -129,7 +134,8 @@ events_registration_obj_li = { 'base_name': Event_Registration_Base, # V3 Search Security: 'searchable_fields': [ - 'event_registration_id_random', 'account_id_random', + 'id', 'event_registration_id', 'account_id', 'event_id', 'organization_id', 'contact_id', 'person_id', + 'id_random', 'event_registration_id_random', 'account_id_random', 'event_id_random', 'organization_id_random', 'contact_id_random', 'person_id_random', 'notes', 'created_on', 'updated_on'