From 987b552157b2399c8ce3b5d60a4771b1720d5980 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Tue, 7 Apr 2026 11:41:54 -0400 Subject: [PATCH] =?UTF-8?q?event:=20Zoom=20CSV=20import=20=E2=80=94=20chec?= =?UTF-8?q?k=20for=20existing=20event=5Fperson=20by=20event=5Fid+external?= =?UTF-8?q?=5Fid=20before=20create;=20handle=20duplicates?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/routers/event_badge_importing.py | 58 ++++++++++++++++------------ 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/app/routers/event_badge_importing.py b/app/routers/event_badge_importing.py index 7419e8f..4e37ec0 100644 --- a/app/routers/event_badge_importing.py +++ b/app/routers/event_badge_importing.py @@ -682,9 +682,7 @@ async def event_id_badge_import_zoom_csv( }, } - event_badge_person_li.append(event_person_data) - event_badge_person_summary_li.append(event_person_summary) - + # Look up existing event_person by event_id + external_id (should be 0 or 1). sql_select_event_person = """ SELECT id AS event_person_id, id_random AS event_person_id_random, external_id AS event_person_external_id, @@ -693,38 +691,50 @@ async def event_id_badge_import_zoom_csv( FROM `event_person` WHERE event_person.event_id = :event_id AND event_person.external_id = :external_id + /*LIMIT 2*/; """ - if event_person_result := sql_select(sql=sql_select_event_person, data=event_person_summary): + event_person_result = sql_select(sql=sql_select_event_person, data=event_person_summary) + if event_person_result: + # If multiple rows are returned that's an integrity problem — log it and + # use the first row for the update to avoid creating duplicates. if isinstance(event_person_result, list): log.error(f'Found more than one Event Person with external_id={external_id}. Count: {len(event_person_result)}') + event_person_result = event_person_result[0] + + event_person_id = event_person_result.get('event_person_id') + event_badge_id = event_person_result.get('event_badge_id') + event_person_profile_id = event_person_result.get('event_person_profile_id') + log.info(f'Found Event Person. Updating existing... Event Person ID: {event_person_id}') + + updated_id = create_update_event_person_obj_v4( + event_person_dict_obj=event_person_data, + event_person_id=event_person_id, + account_id=account_id, + event_id=event_id, + event_badge_id=event_badge_id, + event_person_profile_id=event_person_profile_id, + ) + if updated_id: + log.warning(f'Event Person updated. ID: {updated_id}') else: - event_person_id = event_person_result.get('event_person_id') - event_badge_id = event_person_result.get('event_badge_id') - event_person_profile_id = event_person_result.get('event_person_profile_id') - log.info(f'Updating existing Event Person ID: {event_person_id}') - if create_update_event_person_obj_v4( - event_person_dict_obj=event_person_data, - event_person_id=event_person_id, - account_id=account_id, - event_id=event_id, - event_badge_id=event_badge_id, - event_person_profile_id=event_person_profile_id, - ): - log.warning(f'Event Person updated. ID: {event_person_id}') - else: - log.warning(f'Event Person not updated. ID: {event_person_id}') + log.warning(f'Event Person not updated. ID: {event_person_id}') else: log.info('No Event Person found. Creating new...') - if result_id := create_update_event_person_obj_v4( - event_person_dict_obj=event_person_data, - account_id=account_id, - event_id=event_id, - ): + result_id = create_update_event_person_obj_v4( + event_person_dict_obj=event_person_data, + account_id=account_id, + event_id=event_id, + ) + if result_id: log.warning(f'Event Person created. ID: {result_id}') else: log.warning('Event Person not created.') + # Record the processed input for response summary after DB ops. + event_badge_person_li.append(event_person_data) + event_badge_person_summary_li.append(event_person_summary) + if return_detail: return mk_resp(data=event_badge_person_li, status_message=f'Zoom CSV import complete. Processed {len(event_badge_person_li)} records.', response=commons.response) else: