New link and sync function. It is mostly good to go, but could probably use more testing and improvements.

This commit is contained in:
Scott Idem
2025-06-24 18:48:38 -04:00
parent 882c740880
commit 6d04a8ac19

View File

@@ -1053,6 +1053,104 @@ async def pre_program_data_import(
# ### END ### Event Importing ### pre_program_person_data_import() ### # ### END ### Event Importing ### pre_program_person_data_import() ###
# ### BEGIN ### Event Presenter Person Link ### presenter_person_link() ###
# This is the new import endpoint to run through the presenters for an event, check if they have a person_id, and if not then try to find a person to link to based on their full_name. Currently this is intended for use with LCI to link their presenters with their iMIS IDs.
# Required fields: account_id (from commons header), event_id, begin_at, end_at, link_person, sync_person, sync_external_id
# Updated 2025-06-24
@router.get('/event/{event_id}/presenter/link_sync_person', response_model=Resp_Body_Base)
async def presenter_person_link(
event_id: str = Path(min_length=11, max_length=22),
begin_at: int = 0,
end_at: int = 20000,
link_person: bool = True, # At least one of these should be True
sync_person: bool = True, # At least one of these should be True
sync_external_id: bool = False, # Changing the external_id can break future imports
commons: Common_Route_Params = Depends(common_route_params),
):
log.setLevel(logging.INFO)
log.debug(locals())
account_id = commons.x_account_id
if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass
else: return mk_resp(data=None, status_code=404, response=commons.response)
if not link_person and not sync_person:
log.error('At least one of link_person or sync_person must be True.')
return mk_resp(data=None, status_code=400, response=commons.response)
# Get the event presenter list
event_presenter_li_data = sql_select(table_name='v_event_presenter', field_name='event_id', field_value=event_id)
if not isinstance(event_presenter_li_data, list):
log.error('Something unexpected may have happened while getting the event presenter list.')
log.error(event_presenter_li_data)
return mk_resp(data=None, status_code=500, response=commons.response)
if not event_presenter_li_data:
log.info('No event presenters found for this event.')
return mk_resp(data=None, status_code=404, response=commons.response)
log.info(f'Found {len(event_presenter_li_data)} event presenters for this event.')
log.debug(event_presenter_li_data)
loop_count = 0
event_presenter_summary_data_li = []
for event_presenter_data in event_presenter_li_data:
log.info(f'Loop Count: {loop_count}')
loop_count = loop_count + 1
if loop_count <= begin_at: continue
if loop_count > end_at: break
log.debug(event_presenter_data)
event_presenter_id = event_presenter_data.get('event_presenter_id', None)
event_session_id = event_presenter_data.get('event_session_id', None)
event_presentation_id = event_presenter_data.get('event_presentation_id', None)
presenter_full_name = event_presenter_data.get('full_name', None)
person_id = event_presenter_data.get('person_id', None)
# Check if the event presenter has a person_id
if not person_id and link_person:
log.warning(f'Event Presenter ID: {event_presenter_id} does not have a person_id. Attempting to link person.')
else:
log.info(f'Event Presenter ID: {event_presenter_id} already has a person_id: {person_id}. Skipping.')
continue
if not presenter_full_name:
log.warning(f'No presenter full name found for event presenter ID: {event_presenter_id}. Skipping.')
continue
log.info(f'Processing Event Presenter ID: {event_presenter_id} | Full Name: {presenter_full_name}')
# Process the event presenter with the full name
event_presenter_record_results = process_event_presenter_w_full_name(
account_id = account_id,
event_id = event_id,
event_session_id = event_session_id,
event_presentation_id = event_presentation_id,
presenter_full_name = presenter_full_name,
event_presenter_id = event_presenter_id,
link_person = link_person,
sync_person = sync_person,
sync_external_id = sync_external_id,
)
if not isinstance(event_presenter_record_results, dict):
# log.error('Something unexpected may have happened while processing the event presenter with the full name.')
# log.error(event_presenter_record_results)
# return mk_resp(data=None, status_code=500, response=commons.response)
log.warning(f'A matching person full_name was not found.')
# Append the summary data to the list
event_presenter_summary_data_li.append(event_presenter_record_results)
log.info(f'Processed {len(event_presenter_summary_data_li)} event presenters.')
return mk_resp(data=event_presenter_summary_data_li, response=commons.response)
# ### END ### Event Presenter Person Link ### presenter_person_link() ###
# ### BEGIN ### Event Importing ### process_person_data() ### # ### BEGIN ### Event Importing ### process_person_data() ###
# Updated 2025-06-13 # Updated 2025-06-13
def process_person_data(account_id, source_code, record): def process_person_data(account_id, source_code, record):