diff --git a/app/methods/event_person_methods.py b/app/methods/event_person_methods.py index 2818058..ed3536f 100644 --- a/app/methods/event_person_methods.py +++ b/app/methods/event_person_methods.py @@ -3,7 +3,7 @@ import datetime from typing import Dict, List, Optional, Set, Union from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator -from app.db_sql import get_account_id_w_for_type_id, redis_lookup_id_random, sql_insert, sql_select, sql_update +from app.db_sql import get_account_id_w_for_type_id, redis_lookup_id_random, sql_insert, sql_select, sql_update, get_id_random from app.lib_general import log, logging, logger_reset # from app.methods.event_abstract_methods import load_event_abstract_obj @@ -420,7 +420,19 @@ def create_update_event_person_obj_v4( if account_id: event_person_dict['account_id'] = account_id if event_id: - event_person_dict['event_id'] = event_id + # The model expects random-string IDs (eg. id_random). If we have an + # integer internal ID, convert it to the random string form so the + # Pydantic root_validator preserves it. This ensures `event_id` is + # present when inserting a new `event_person` record. + if isinstance(event_id, int): + if idr := get_id_random(record_id=event_id, table_name='event'): + event_person_dict['event_id_random'] = idr + else: + # Fallback: set the integer (will likely be removed by the model), + # but allow downstream logic to attempt insertion. + event_person_dict['event_id'] = event_id + else: + event_person_dict['event_id'] = event_id try: event_person_obj = Event_Person_Base(**event_person_dict) except ValidationError as e: @@ -434,7 +446,16 @@ def create_update_event_person_obj_v4( if account_id: event_person_obj.account_id = account_id if event_id: - event_person_obj.event_id = event_id + # If an integer internal ID was provided, convert to the random ID + # string form for the Pydantic object so it is preserved when + # serializing to the DB insert/update payload. + if isinstance(event_id, int): + if idr := get_id_random(record_id=event_id, table_name='event'): + event_person_obj.event_id = idr + else: + event_person_obj.event_id = event_id + else: + event_person_obj.event_id = event_id log.debug(event_person_obj) event_person_dict = event_person_obj.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge', 'event_person_profile', 'event_registration', 'created_on', 'updated_on', 'external_id_old'})