event: ensure event_id preserved on event_person insert by converting to id_random when available
This commit is contained in:
@@ -3,7 +3,7 @@ import datetime
|
|||||||
from typing import Dict, List, Optional, Set, Union
|
from typing import Dict, List, Optional, Set, Union
|
||||||
from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator
|
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.lib_general import log, logging, logger_reset
|
||||||
|
|
||||||
# from app.methods.event_abstract_methods import load_event_abstract_obj
|
# 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:
|
if account_id:
|
||||||
event_person_dict['account_id'] = account_id
|
event_person_dict['account_id'] = account_id
|
||||||
if event_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:
|
try:
|
||||||
event_person_obj = Event_Person_Base(**event_person_dict)
|
event_person_obj = Event_Person_Base(**event_person_dict)
|
||||||
except ValidationError as e:
|
except ValidationError as e:
|
||||||
@@ -434,7 +446,16 @@ def create_update_event_person_obj_v4(
|
|||||||
if account_id:
|
if account_id:
|
||||||
event_person_obj.account_id = account_id
|
event_person_obj.account_id = account_id
|
||||||
if event_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)
|
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'})
|
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'})
|
||||||
|
|||||||
Reference in New Issue
Block a user