diff --git a/app/routers/event_importing.py b/app/routers/event_importing.py index 74a6957..8c2c661 100644 --- a/app/routers/event_importing.py +++ b/app/routers/event_importing.py @@ -1053,6 +1053,104 @@ async def pre_program_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() ### # Updated 2025-06-13 def process_person_data(account_id, source_code, record):