diff --git a/app/methods/event_person_methods.py b/app/methods/event_person_methods.py index 776ce41..fc78fa9 100644 --- a/app/methods/event_person_methods.py +++ b/app/methods/event_person_methods.py @@ -13,7 +13,7 @@ from app.methods.event_badge_methods import load_event_badge_obj # from app.methods.event_file_methods import load_event_file_obj # from app.methods.event_presentation_methods import load_event_presentation_obj # from app.methods.event_presenter_methods import load_event_presenter_obj -# from app.methods.event_registration_methods import load_event_registration_obj +# from app.methods.event_registration_methods import create_event_registration_obj, load_event_registration_obj, update_event_registration_obj_v3 # from app.methods.event_session_methods import load_event_session_obj # from app.methods.event_track_methods import load_event_track_obj from app.methods.person_methods import create_person_obj, load_person_obj, update_person_obj @@ -187,26 +187,148 @@ def get_event_person_rec_list( # ### BEGIN ### API Event Person Methods ### create_event_person_obj() ### # NOTE: This will create an event_person. This event_person should include at least a person_id. # NOTE: Is it a good idea to create and or update a person and or user here??? The create_event_person_obj() below does do that. +# NOTE NOTE NOTE NOTE: I don't like the idea of creating or updating person and or user here. It just does not seem right... Security risk? Complexity? # Reviewed and updated 2021-08-10 -def create_event_person_obj(event_person_obj_new:Event_Person_Base) -> int|bool: +def create_event_person_obj( + event_id: int|str, + event_person_obj_new: Event_Person_Base, + create_sub_obj: bool = False, + fail_any: bool = False, # Fail if any thing goes wrong for sub objects + ) -> int|bool: log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - if not event_person_obj_new: - return False + if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass + else: return False - event_person_obj_data = event_person_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'created_on', 'updated_on'}) + event_person_obj_data = event_person_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge', 'event_registration', 'created_on', 'updated_on'}) log.debug(event_person_obj_data) if event_person_obj_in_result := sql_insert(data=event_person_obj_data, table_name='event_person', rm_id_random=True, id_random_length=8): pass else: + log.warning(f'Event Person not created.') + log.debug(event_person_obj_in_result) return False - #log.setLevel(logging.DEBUG) - log.debug(event_person_obj_in_result) - event_person_id = event_person_obj_in_result + return_dict = {} + return_dict['event_person_id'] = None + return_dict['event_badge_id'] = None + return_dict['event_registration_id'] = None + + if event_person_obj_new.event_badge and isinstance(event_person_obj_new.event_badge, dict): + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + event_badge_obj_unknown = event_person_obj_new.event_badge + log.debug(event_badge_obj_unknown) + if event_badge_id := event_badge_obj_unknown.get('event_badge_id_random', None): + log.warning('Event Badge ID found. This is not expected, but should be ok.') + from app.methods.event_badge_methods import update_event_badge_obj_v3 + if update_event_badge_obj_result := update_event_badge_obj_v3( + event_badge_id = event_badge_id, + event_badge_obj_exist = event_badge_obj_unknown, + create_sub_obj = create_sub_obj, + fail_any = fail_any, + ): + event_badge_id = update_event_badge_obj_result + log.info(f'Event Badge updated. Event Badge ID: {event_badge_id}') + else: + log.warning(f'Event Badge not updated. Event Person ID: {event_person_id}') + log.debug(update_event_badge_obj_result) + event_badge_id = None + if fail_any: return False + + if isinstance(update_event_badge_obj_result, int): + event_badge_id = update_event_badge_obj_result + log.info(f'Event Badge updated. Event Badge ID: {event_badge_id}') + else: + log.warning(f'Event Badge not updated. Event Person ID: {event_person_id}') + log.debug(update_event_badge_obj_result) + event_badge_id = None + if fail_any: return False + else: + log.info(f'No Event Badge ID found.') + from app.methods.event_badge_methods import create_event_badge_obj + if create_event_badge_obj_result := create_event_badge_obj( + event_person_id = event_person_id, + event_badge_obj_new = event_badge_obj_unknown, + create_sub_obj = create_sub_obj, + fail_any = fail_any, + ): + if isinstance(create_event_badge_obj_result, int): + event_badge_id = create_event_badge_obj_result + log.info(f'Event Badge created. Event Badge ID: {event_badge_id}') + else: + log.warning(f'Event Badge not created. Event Person ID: {event_person_id}') + log.debug(create_event_badge_obj_result) + event_badge_id = None + if fail_any: return False + else: + log.warning(f'Event Badge not created. Event Person ID: {event_person_id}') + log.debug(create_event_badge_obj_result) + event_badge_id = None + if fail_any: return False + return_dict['event_badge_id'] = event_badge_id + else: + log.info('Event Badge not found or not in a dict.') + pass + + if event_person_obj_new.event_registration and isinstance(event_person_obj_new.event_registration, dict): + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + event_registration_obj_unknown = event_person_obj_new.event_registration + log.debug(event_registration_obj_unknown) + if event_registration_id := event_registration_obj_unknown.get('event_registration_id_random', None): + log.warning('Event Registration ID found. This is not expected, but should be ok. Careful with primary vs secondary registrants.') + from app.methods.event_registration_methods import update_event_registration_obj_v3 + if update_event_registration_obj_result := update_event_registration_obj_v3( + event_registration_id = event_registration_id, + event_registration_obj_exist = event_registration_obj_unknown, + create_sub_obj = create_sub_obj, + fail_any = fail_any, + ): + event_registration_id = update_event_registration_obj_result + log.info(f'Event Registration updated. Event Registration ID: {event_registration_id}') + else: + log.warning(f'Event Registration not updated. Event Person ID: {event_person_id}') + log.debug(update_event_registration_obj_result) + event_registration_id = None + if fail_any: return False + + if isinstance(update_event_registration_obj_result, int): + event_registration_id = update_event_registration_obj_result + log.info(f'Event Registration updated. Event Registration ID: {event_registration_id}') + else: + log.warning(f'Event Registration not updated. Event Person ID: {event_person_id}') + log.debug(update_event_registration_obj_result) + event_registration_id = None + if fail_any: return False + else: + log.info(f'No Event Registration ID found.') + from app.methods.event_registration_methods import create_event_registration_obj + if create_event_registration_obj_result := create_event_registration_obj( + event_person_id = event_person_id, + event_registration_obj_new = event_registration_obj_unknown, + create_sub_obj = create_sub_obj, + fail_any = fail_any, + ): + if isinstance(create_event_registration_obj_result, int): + event_registration_id = create_event_registration_obj_result + log.info(f'Event Registration created. Event Registration ID: {event_registration_id}') + else: + log.warning(f'Event Registration not created. Event Person ID: {event_person_id}') + log.debug(create_event_registration_obj_result) + event_registration_id = None + if fail_any: return False + else: + log.warning(f'Event Registration not created. Event Person ID: {event_person_id}') + log.debug(create_event_registration_obj_result) + event_registration_id = None + if fail_any: return False + return_dict['event_registration_id'] = event_registration_id + else: + log.info('Event Registration not found or not in a dict.') + pass + # Linked to (from event_person) if event_person_obj_new.event_badge and event_person_obj_new.event_badge_id: pass if event_person_obj_new.event_badge_vendor and event_person_obj_new.event_badge_vendor_id: pass @@ -219,15 +341,168 @@ def create_event_person_obj(event_person_obj_new:Event_Person_Base) -> int|bool: if event_person_obj_new.event_session and event_person_obj_new.poc_event_session_id: pass # POC for event session; could be more than one if event_person_obj_new.event_registration and event_person_obj_new.poc_event_registration_id: pass # Primary registrant for registration; only one - - log.debug(f'Returning the new event_person_id: {event_person_id}') + log.info(f'The event person has been created. Event Person ID: {event_person_id}') return event_person_id # ### END ### API Event Person Methods ### create_event_person_obj() ### +# ### BEGIN ### API Event Person Methods ### update_event_person_obj_v3() ### +# Updated 2021-08-21 +def update_event_person_obj_v3( + event_person_id: int|str, + event_person_obj_exist: Event_Person_Base, + create_sub_obj: bool = False, + fail_any: bool = False, # Fail if any thing goes wrong for sub objects + ) -> bool: + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass + else: return False + + # Can't update the event_person_id alias if the .id was never set. + # event_person_obj_exist.event_person_id = event_person_id + if not event_person_obj_exist.id: + event_person_obj_exist.id = event_person_id + + event_person_obj_data = event_person_obj_exist.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_badge', 'event_registration', 'created_on', 'updated_on'}) + log.debug(event_person_obj_data) + + if event_person_obj_up_result := sql_update(data=event_person_obj_data, table_name='event_person', rm_id_random=True): pass + else: + log.warning(f'Event Person not updated.') + log.debug(event_person_obj_up_result) + return False + + return_dict = {} + return_dict['event_person_id'] = event_person_id + return_dict['event_badge_id'] = None + return_dict['event_registration_id'] = None + + if event_person_obj_exist.event_badge and isinstance(event_person_obj_exist.event_badge, dict): + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + event_badge_obj_unknown = event_person_obj_exist.event_badge + log.debug(event_badge_obj_unknown) + if event_badge_id := event_badge_obj_unknown.get('event_badge_id_random', None): + from app.methods.event_badge_methods import update_event_badge_obj_v3 + if update_event_badge_obj_result := update_event_badge_obj_v3( + event_badge_id = event_badge_id, + event_badge_obj_exist = event_badge_obj_unknown, + create_sub_obj = create_sub_obj, + fail_any = fail_any, + ): + event_badge_id = update_event_badge_obj_result + log.info(f'Event Badge updated. Event Badge ID: {event_badge_id}') + else: + log.warning(f'Event Badge not updated. Event Person ID: {event_person_id}') + log.debug(update_event_badge_obj_result) + event_badge_id = None + if fail_any: return False + + if isinstance(update_event_badge_obj_result, int): + event_badge_id = update_event_badge_obj_result + log.info(f'Event Badge updated. Event Badge ID: {event_badge_id}') + else: + log.warning(f'Event Badge not updated. Event Person ID: {event_person_id}') + log.debug(update_event_badge_obj_result) + event_badge_id = None + if fail_any: return False + else: + log.info(f'No Event Badge ID found.') + from app.methods.event_badge_methods import create_event_badge_obj + if create_event_badge_obj_result := create_event_badge_obj( + event_person_id = event_person_id, + event_badge_obj_new = event_badge_obj_unknown, + create_sub_obj = create_sub_obj, + fail_any = fail_any, + ): + if isinstance(create_event_badge_obj_result, int): + event_badge_id = create_event_badge_obj_result + log.info(f'Event Badge created. Event Badge ID: {event_badge_id}') + else: + log.warning(f'Event Badge not created. Event Person ID: {event_person_id}') + log.debug(create_event_badge_obj_result) + event_badge_id = None + if fail_any: return False + else: + log.warning(f'Event Badge not created. Event Person ID: {event_person_id}') + log.debug(create_event_badge_obj_result) + event_badge_id = None + if fail_any: return False + return_dict['event_badge_id'] = event_badge_id + else: + log.info('Event Badge not found or not in a dict.') + pass + + if event_person_obj_exist.event_registration and isinstance(event_person_obj_exist.event_registration, dict): + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + event_registration_obj_unknown = event_person_obj_exist.event_registration + log.debug(event_registration_obj_unknown) + if event_registration_id := event_registration_obj_unknown.get('event_registration_id_random', None): + from app.methods.event_registration_methods import update_event_registration_obj_v3 + if update_event_registration_obj_result := update_event_registration_obj_v3( + event_registration_id = event_registration_id, + event_registration_obj_exist = event_registration_obj_unknown, + create_sub_obj = create_sub_obj, + fail_any = fail_any, + ): + event_registration_id = update_event_registration_obj_result + log.info(f'Event Registration updated. Event Registration ID: {event_registration_id}') + else: + log.warning(f'Event Registration not updated. Event Person ID: {event_person_id}') + log.debug(update_event_registration_obj_result) + event_registration_id = None + if fail_any: return False + + if isinstance(update_event_registration_obj_result, int): + event_registration_id = update_event_registration_obj_result + log.info(f'Event Registration updated. Event Registration ID: {event_registration_id}') + else: + log.warning(f'Event Registration not updated. Event Person ID: {event_person_id}') + log.debug(update_event_registration_obj_result) + event_registration_id = None + if fail_any: return False + else: + log.info(f'No Event Registration ID found.') + from app.methods.event_registration_methods import create_event_registration_obj + if create_event_registration_obj_result := create_event_registration_obj( + event_person_id = event_person_id, + event_registration_obj_new = event_registration_obj_unknown, + create_sub_obj = create_sub_obj, + fail_any = fail_any, + ): + if isinstance(create_event_registration_obj_result, int): + event_registration_id = create_event_registration_obj_result + log.info(f'Event Registration created. Event Registration ID: {event_registration_id}') + else: + log.warning(f'Event Registration not created. Event Person ID: {event_person_id}') + log.debug(create_event_registration_obj_result) + event_registration_id = None + if fail_any: return False + else: + log.warning(f'Event Registration not created. Event Person ID: {event_person_id}') + log.debug(create_event_registration_obj_result) + event_registration_id = None + if fail_any: return False + return_dict['event_registration_id'] = event_registration_id + else: + log.info('Event Registration not found or not in a dict.') + pass + + log.info(f'The event person has been updated. Event Person ID: {event_person_id}') + return True +# ### END ### API Event Person Methods ### update_event_person_obj_v3() ### + + + + + + # ### BEGIN ### API Event Person Methods ### update_event_person_obj() ### # NOTE: This will update an event_person. This also tries to create or update a person or user if that data is passed. # NOTE: Is it a good idea to create and or update a person and or user here??? +# NOTE NOTE NOTE NOTE: This will be taken over by _exist version +# NOTE NOTE NOTE NOTE: I don't like the idea of creating or updating person and or user here. It just does not seem right... Security risk? Complexity? # Reviewed and updated 2021-08-10 def update_event_person_obj( event_person_id: int|str, # Ideally the int ID should be passed. This allows for updating of the id_random value. @@ -319,9 +594,9 @@ def update_event_person_obj( -# ### BEGIN ### API Event Person Methods ### create_event_person_obj() ### +# ### BEGIN ### API Event Person Methods ### smart_event_person_obj() ### # NOTE: This will create an event_person. This event_person should include at least a person_id. -# NOTE: Is it a good idea to create and or update a person and or user here??? The create_event_person_obj() below does do that. +# NOTE: Is it a good idea to create and or update a person and or user here??? The smart_event_person_obj() below does do that. # Reviewed and updated 2021-08-10 def smart_event_person_obj(event_person_obj_new:Event_Person_Base) -> int|bool: log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL @@ -415,4 +690,4 @@ def smart_event_person_obj(event_person_obj_new:Event_Person_Base) -> int|bool: log.debug(f'Returning the new event_person_id: {event_person_id}') return event_person_id -# ### END ### API Event Person Methods ### create_event_person_obj() ### \ No newline at end of file +# ### END ### API Event Person Methods ### smart_event_person_obj() ### \ No newline at end of file diff --git a/app/methods/event_presentation_methods.py b/app/methods/event_presentation_methods.py index 9513203..9992a08 100644 --- a/app/methods/event_presentation_methods.py +++ b/app/methods/event_presentation_methods.py @@ -11,7 +11,7 @@ from app.lib_general import log, logging # from app.methods.event_file_methods import load_event_file_obj # from app.methods.event_location_methods import load_event_location_obj # from app.methods.event_presentation_methods import load_event_presentation_obj -from app.methods.event_presenter_methods import create_event_presenter_obj, load_event_presenter_obj, update_event_presenter_obj_exist +from app.methods.event_presenter_methods import create_event_presenter_obj, load_event_presenter_obj, update_event_presenter_obj_v3 # from app.methods.event_session_methods import create_event_session_obj, load_event_session_obj, update_event_session_obj # from app.methods.person_methods import load_person_obj # from app.methods.user_methods import load_user_obj @@ -256,7 +256,7 @@ def create_event_presentation_obj( if fail_any: return False return_dict['event_presenter_list'].append(event_presenter_id) else: - log.info('Event presenter list not found') + log.info('Event Presenter List not found') pass log.info(f'The event presentation has been created. Event Presentation ID: {event_presentation_id}') @@ -264,9 +264,9 @@ def create_event_presentation_obj( # ### END ### API Event Presentation Methods ### create_event_presentation_obj() ### -# ### BEGIN ### API Event Presentation Methods ### update_event_presentation_obj_exist() ### +# ### BEGIN ### API Event Presentation Methods ### update_event_presentation_obj_v3() ### # Updated 2021-08-21 -def update_event_presentation_obj_exist( +def update_event_presentation_obj_v3( event_presentation_id: int|str, event_presentation_obj_exist: Event_Presentation_Base, create_sub_obj: bool = False, @@ -311,7 +311,7 @@ def update_event_presentation_obj_exist( log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(event_presenter_obj_unknown) if event_presenter_id := event_presenter_obj_unknown.get('event_presenter_id_random', None): - if update_event_presenter_obj_result := update_event_presenter_obj_exist( + if update_event_presenter_obj_result := update_event_presenter_obj_v3( event_presenter_id = event_presenter_id, event_presenter_obj_exist = event_presenter_obj_unknown, create_sub_obj = create_sub_obj, @@ -356,14 +356,12 @@ def update_event_presentation_obj_exist( if fail_any: return False return_dict['event_presenter_list'].append(event_presenter_id) else: - log.info('Event presenter list not found or not in a list.') + log.info('Event Presenter List not found or not in a list.') pass - # log.info(f'Returning the updated event_presentation_id: {event_presentation_id}') - # return event_presentation_id log.info(f'The event presentation has been updated. Event Presentation ID: {event_presentation_id}') return True -# ### END ### API Event Presentation Methods ### update_event_presentation_obj_exist() ### +# ### END ### API Event Presentation Methods ### update_event_presentation_obj_v3() ### diff --git a/app/methods/event_presenter_methods.py b/app/methods/event_presenter_methods.py index 1fb7710..a9538e7 100644 --- a/app/methods/event_presenter_methods.py +++ b/app/methods/event_presenter_methods.py @@ -211,9 +211,9 @@ def create_event_presenter_obj( # ### END ### API Event Presenter Methods ### create_event_presenter_obj() ### -# ### BEGIN ### API Event Presenter Methods ### update_event_presenter_obj_exist() ### +# ### BEGIN ### API Event Presenter Methods ### update_event_presenter_obj_v3() ### # Updated 2021-08-21 -def update_event_presenter_obj_exist( +def update_event_presenter_obj_v3( event_presenter_id: int|str, event_presenter_obj_exist: Event_Presenter_Base, create_sub_obj: bool = False, @@ -254,7 +254,7 @@ def update_event_presenter_obj_exist( log.info(f'The event presenter has been updated. Event Presenter ID: {event_presenter_id}') return True -# ### END ### API Event Presenter Methods ### update_event_presenter_obj_exist() ### +# ### END ### API Event Presenter Methods ### update_event_presenter_obj_v3() ### diff --git a/app/methods/event_registration_methods.py b/app/methods/event_registration_methods.py index bd0a06f..c9edb64 100644 --- a/app/methods/event_registration_methods.py +++ b/app/methods/event_registration_methods.py @@ -101,3 +101,228 @@ def load_event_registration_obj( else: return event_registration_obj # ### END ### API Event Registration Methods ### load_event_registration_obj() ### + + +# ### BEGIN ### API Event Registration Methods ### get_event_id_w_event_person_id() ### +# Updated 2021-08-23 +def get_event_id_w_event_person_id( + event_person_id: int|str, + ) -> bool|None: + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass + else: return False + + data = {} + data['event_person_id'] = event_person_id + + sql = f""" + SELECT `event_person`.id AS 'event_person_id', `event_person`.id_random AS 'event_person_id_random', `event_person`.event_id AS event_id + FROM `event_person` AS `event_person` + WHERE `event_person`.id = :event_person_id + LIMIT 1; + """ + + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + if event_person_data_result := sql_select(data=data, sql=sql): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_person_data_result) + if event_id := event_person_data_result.get('event_id', None): return event_id + else: return False + else: return None +# ### END ### API Event Registration Methods ### get_event_id_w_event_person_id() ### + + +# ### BEGIN ### API Event Registration Methods ### create_event_registration_obj() ### +# Event Registration can only update the primary event_person because they should already exist before registration is started. Chicken and egg problem... +# Event Registration can create or update the event_person_list. +# NOTE: Should there be a check before trying to update the primary event_person if they are also in the event_person_list??? Chicken and egg problem again? +# Updated 2021-08-24 +def create_event_registration_obj( + event_id: int|str, + event_person_id: int|str, + event_registration_obj_new: Event_Registration_Base, + create_sub_obj: bool = False, + fail_any: bool = False, # Fail if any thing goes wrong for sub objects + ) -> bool: + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass + else: return False # The event_person should be created first (before registration and similar) + + if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass + else: + if event_id := get_event_id_w_event_person_id(event_person_id): pass + else: + log.warning(f'The event_id was not found using the event_person_id. Event Person ID: {event_person_id}') + return event_id # False or None + + log.debug(type(event_registration_obj_new)) + if isinstance(event_registration_obj_new, dict): + try: + event_registration_obj_new = Event_Registration_Base(**event_registration_obj_new) + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_registration_obj_new) + except ValidationError as e: + log.error(e.json()) + return False + + event_registration_obj_new.event_id = event_id + event_registration_obj_new.event_person_id = event_person_id + + event_registration_obj_data = event_registration_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_person', 'event_person_list', 'created_on', 'updated_on'}) + log.debug(event_registration_obj_data) + + if event_registration_obj_in_result := sql_insert(data=event_registration_obj_data, table_name='event_registration', rm_id_random=True, id_random_length=8): pass + else: + log.warning(f'Event Registration not created.') + log.debug(event_registration_obj_in_result) + return False + + event_registration_id = event_registration_obj_in_result + + return_dict = {} + return_dict['event_registration_id'] = None + return_dict['event_person_id'] = None + return_dict['event_id'] = None + return_dict['event_person_list'] = [] + + # NOTE: Primary Event Person update check is not finished + if event_registration_obj_new.event_person: + # What happens here? + # Update only... do not create a new event_person here. + pass + + if event_registration_obj_new.event_person_list and isinstance(event_registration_obj_new.event_person_list, list): + for event_person_obj_new in event_registration_obj_new.event_person_list: + # NOTE: This does not account for an edge case where the person already exists. Possibly as part of another registration, which should *not* happen. + if create_event_person_obj_result := create_event_person_obj( + event_registration_id = event_registration_id, + event_person_obj_new = event_person_obj_new, + create_sub_obj = create_sub_obj, + fail_any = fail_any, + ): + if isinstance(create_event_person_obj_result, int): + event_person_id = create_event_person_obj_result + log.info(f'Event Person created. Event Person ID: {event_person_id}') + else: + log.warning(f'Event Person not created. Event Registration ID: {event_registration_id}') + log.debug(create_event_person_obj_result) + event_person_id = None + if fail_any: return False + else: + log.warning(f'Event Person not created. Event Registration ID: {event_registration_id}') + log.debug(create_event_person_obj_result) + event_person_id = None + if fail_any: return False + return_dict['event_person_list'].append(event_person_id) + else: + log.info('Event Person List not found') + pass + + log.info(f'The event registration has been created. Event Registration ID: {event_registration_id}') + return event_registration_id +# ### END ### API Event Registration Methods ### create_event_registration_obj() ### + + +# ### BEGIN ### API Event Registration Methods ### update_event_registration_obj_v3() ### +# Event Registration can only update the primary event_person because they should already exist since registration is started and registration "requires" the primary event_person first. Chicken and egg problem... +# Event Registration can create or update the event_person_list. +# NOTE: Should there be a check before trying to update the primary event_person if they are also in the event_person_list??? Chicken and egg problem again? +# Updated 2021-08-24 +def update_event_registration_obj_v3( + event_registration_id: int|str, + event_registration_obj_exist: Event_Registration_Base, + create_sub_obj: bool = False, + fail_any: bool = False, # Fail if any thing goes wrong for sub objects + ) -> bool: + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + if event_registration_id := redis_lookup_id_random(record_id_random=event_registration_id, table_name='event_registration'): pass + else: return False + + # Can't update the event_registration_id alias if the .id was never set. + # event_registration_obj_exist.event_registration_id = event_registration_id + if not event_registration_obj_exist.id: + event_registration_obj_exist.id = event_registration_id + + event_registration_obj_data = event_registration_obj_exist.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_person', 'event_person_list', 'created_on', 'updated_on'}) + log.debug(event_registration_obj_data) + + if event_registration_obj_up_result := sql_update(data=event_registration_obj_data, table_name='event_registration', rm_id_random=True): pass + else: + log.warning(f'Event Registration not updated.') + log.debug(event_registration_obj_up_result) + return False + + return_dict = {} + return_dict['event_registration_id'] = None + return_dict['event_person_id'] = None + return_dict['event_id'] = None + return_dict['event_person_list'] = [] + + # NOTE: Primary Event Person update check is not finished + if event_registration_obj_exist.event_person: + # What happens here? + # Update only... do not create a new event_person here. + pass + + if event_registration_obj_exist.event_person_list and isinstance(event_registration_obj_exist.event_person_list, list): + for event_person_obj_unknown in event_registration_obj_exist.event_person_list: + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(event_person_obj_unknown) + if event_person_id := event_person_obj_unknown.get('event_person_id_random', None): + if update_event_person_obj_result := update_event_person_obj_v3( + event_person_id = event_person_id, + event_person_obj_exist = event_person_obj_unknown, + create_sub_obj = create_sub_obj, + fail_any = fail_any, + ): + event_person_id = update_event_person_obj_result + log.info(f'Event Person updated. Event Person ID: {event_person_id}') + else: + log.warning(f'Event Person not updated. Event Registration ID: {event_registration_id}') + log.debug(update_event_person_obj_result) + event_person_id = None + if fail_any: return False + + if isinstance(update_event_person_obj_result, int): + event_person_id = update_event_person_obj_result + log.info(f'Event Person updated. Event Person ID: {event_person_id}') + else: + log.warning(f'Event Person not updated. Event Registration ID: {event_registration_id}') + log.debug(update_event_person_obj_result) + event_person_id = None + if fail_any: return False + else: + log.info(f'No Event Person ID found.') + if create_event_person_obj_result := create_event_person_obj( + event_registration_id = event_registration_id, + event_person_obj_new = event_person_obj_unknown, + create_sub_obj = create_sub_obj, + fail_any = fail_any, + ): + if isinstance(create_event_person_obj_result, int): + event_person_id = create_event_person_obj_result + log.info(f'Event Person created. Event Person ID: {event_person_id}') + else: + log.warning(f'Event Person not created. Event Registration ID: {event_registration_id}') + log.debug(create_event_person_obj_result) + event_person_id = None + if fail_any: return False + else: + log.warning(f'Event Person not created. Event Registration ID: {event_registration_id}') + log.debug(create_event_person_obj_result) + event_person_id = None + if fail_any: return False + return_dict['event_person_list'].append(event_person_id) + else: + log.info('Event Person List not found or not in a list.') + pass + + log.info(f'The event registration has been updated. Event Registration ID: {event_registration_id}') + return True +# ### END ### API Event Registration Methods ### update_event_registration_obj_v3() ### diff --git a/app/methods/event_session_methods.py b/app/methods/event_session_methods.py index efc357f..323f4a6 100644 --- a/app/methods/event_session_methods.py +++ b/app/methods/event_session_methods.py @@ -11,7 +11,7 @@ from app.lib_general import log, logging from app.methods.event_file_methods import load_event_file_obj_list from app.methods.event_location_methods import load_event_location_obj from app.methods.event_person_methods import load_event_person_obj, update_event_person_obj -from app.methods.event_presentation_methods import create_event_presentation_obj, load_event_presentation_obj, update_event_presentation_obj_exist +from app.methods.event_presentation_methods import create_event_presentation_obj, load_event_presentation_obj, update_event_presentation_obj_v3 # from app.methods.event_presenter_methods import load_event_presenter_obj from app.methods.person_methods import load_person_obj # from app.methods.user_methods import load_user_obj @@ -216,11 +216,6 @@ def create_event_session_obj( if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass else: return False - # if event_id := event_session_obj_new.event_id: pass - # else: - # log.error('Event ID is required') - # return False - event_session_obj_data = event_session_obj_new.dict(by_alias=False, exclude_defaults=False, exclude_unset=True, exclude={'event_presentation', 'event_presentation_list', 'event_presenter', 'event_presenter_list', 'created_on', 'updated_on'}) log.debug(event_session_obj_data) @@ -260,17 +255,17 @@ def create_event_session_obj( if fail_any: return False return_dict['event_presentation_list'].append(event_presentation_id) else: - log.info('Event presentation list not found') + log.info('Event Presentation List not found') pass - log.info(f'The event session has been created. Event Session ID: {event_presentation_id}') + log.info(f'The event session has been created. Event Session ID: {event_session_id}') return event_session_id # ### END ### API Event Session Methods ### create_event_session_obj() ### -# ### BEGIN ### API Event Session Methods ### update_event_session_obj_exist() ### +# ### BEGIN ### API Event Session Methods ### update_event_session_obj_v3() ### # Updated 2021-08-21 -def update_event_session_obj_exist( +def update_event_session_obj_v3( event_session_id: int|str, event_session_obj_exist: Event_Session_Base, create_sub_obj: bool = False, @@ -305,7 +300,7 @@ def update_event_session_obj_exist( log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(event_presentation_obj_unknown) if event_presentation_id := event_presentation_obj_unknown.get('event_presentation_id_random', None): - if update_event_presentation_obj_result := update_event_presentation_obj_exist( + if update_event_presentation_obj_result := update_event_presentation_obj_v3( event_presentation_id = event_presentation_id, event_presentation_obj_exist = event_presentation_obj_unknown, create_sub_obj = create_sub_obj, @@ -350,14 +345,12 @@ def update_event_session_obj_exist( if fail_any: return False return_dict['event_presentation_list'].append(event_presentation_id) else: - log.info('Event presentation list not found or not in a list.') + log.info('Event Presentation List not found or not in a list.') pass - # log.info(f'Returning the updated event_session_id: {event_session_id}') - # return event_session_id log.info(f'The event session has been updated. Event Session ID: {event_session_id}') return True -# ### END ### API Event Session Methods ### update_event_session_obj_exist() ### +# ### END ### API Event Session Methods ### update_event_session_obj_v3() ### @@ -401,7 +394,7 @@ def update_event_session_obj( # NOTE: This will blindly create a new poc_event_person even if there was one associated but the event_session.poc_event_person_id was not found. poc_event_person_obj_in = event_session_obj_up.poc_event_person log.debug(poc_event_person_obj_in) - if poc_event_person_obj_in_result := create_event_person_obj(poc_event_person_idevent_person_obj_new=poc_event_person_obj_in): + if poc_event_person_obj_in_result := create_event_person_obj(event_person_obj_new=poc_event_person_obj_in): # log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(poc_event_person_obj_in_result) event_session_obj_up.poc_event_person_id = poc_event_person_obj_in_result diff --git a/app/routers/event_session.py b/app/routers/event_session.py index 428fb15..0f3df91 100644 --- a/app/routers/event_session.py +++ b/app/routers/event_session.py @@ -9,7 +9,7 @@ from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, from app.routers.api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template -from app.methods.event_session_methods import create_event_session_obj, load_event_session_obj, update_event_session_obj_exist +from app.methods.event_session_methods import create_event_session_obj, load_event_session_obj, update_event_session_obj_v3 from app.models.event_session_models import Event_Session_Base from app.models.response_models import * @@ -86,9 +86,9 @@ async def post_event_session_obj_new( # ### BEGIN ### API Event Session ### post_event_session_obj_new() ### -# ### BEGIN ### API Event Session ### patch_event_session_obj_exist() ### -@router.patch('/{event_session_id}/exist', response_model=Resp_Body_Base) -async def patch_event_session_obj_exist( +# ### BEGIN ### API Event Session ### patch_event_session_obj_v3() ### +@router.patch('/{event_session_id}/v3', response_model=Resp_Body_Base) +async def patch_event_session_obj_v3( event_session_obj: Event_Session_Base, event_session_id: str = Query(..., min_length=11, max_length=22), create_sub_obj: bool = False, @@ -106,7 +106,7 @@ async def patch_event_session_obj_exist( if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass else: return mk_resp(data=None, status_code=404) - if update_event_session_obj_result := update_event_session_obj_exist( + if update_event_session_obj_result := update_event_session_obj_v3( event_session_id = event_session_id, event_session_obj_exist = event_session_obj, create_sub_obj = create_sub_obj, @@ -128,7 +128,7 @@ async def patch_event_session_obj_exist( return mk_resp(data=data, response=response, status_message='The event session was created.') else: return mk_resp(data=False, status_code=400, response=response, status_message='The result from trying to create an event session was unexpected.') -# ### END ### API Event Session ### patch_event_session_obj_exist() ### +# ### END ### API Event Session ### patch_event_session_obj_v3() ### @router.patch('/{obj_id}', response_model=Resp_Body_Base)