diff --git a/app/db_sql.py b/app/db_sql.py index 5a7c93d..86ed5ba 100644 --- a/app/db_sql.py +++ b/app/db_sql.py @@ -448,8 +448,8 @@ def sql_select( as_dict: bool|None = True, as_list: bool|None = False, max_count: int = 100000, - ): - log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + ) -> None|bool|list: + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) if table_name and not (record_id or record_id_random or field_name or field_value or sql or data): diff --git a/app/methods/order_methods.py b/app/methods/order_methods.py index efb1483..5739bd4 100644 --- a/app/methods/order_methods.py +++ b/app/methods/order_methods.py @@ -277,7 +277,7 @@ def load_order_obj( # ### BEGIN ### API Order Methods ### get_order_rec_list() ### -# Updated 2021-11-22 +# Updated 2021-12-01 def get_order_rec_list( for_obj_type: str, for_obj_id: str, @@ -366,9 +366,9 @@ def get_order_rec_list( if order_rec_li_result := sql_select(data=data, sql=sql, as_list=True): order_rec_li = order_rec_li_result - else: - order_rec_li = None - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + else: # None or False + order_rec_li = order_rec_li_result + log.debug(order_rec_li_result) return order_rec_li diff --git a/app/methods/person_methods.py b/app/methods/person_methods.py index 630450f..ece186d 100644 --- a/app/methods/person_methods.py +++ b/app/methods/person_methods.py @@ -286,6 +286,7 @@ def load_person_obj( def get_person_rec_list( for_obj_type: str, for_obj_id: str, + email: str, limit: int = 1000, enabled: str = 'enabled', # enabled, disabled, all ) -> list|bool: @@ -294,18 +295,22 @@ def get_person_rec_list( if for_obj_id := redis_lookup_id_random(record_id_random=for_obj_id, table_name=for_obj_type): pass else: return False + data = {} data[f'{for_obj_type}_id'] = for_obj_id - # data['for_obj_type'] = for_obj_type - sql_obj_type_id = f'`tbl`.{for_obj_type}_id = :{for_obj_type}_id' + data['email'] = email + sql_obj_type_id = f'`person`.{for_obj_type}_id = :{for_obj_type}_id' + + if email: + sql_where_email = 'AND (user.email = :email OR contact.email = :email)' # if enabled in ['enabled', 'disabled', 'all']: # if enabled == 'enabled': # data['enable'] = True - # sql_enabled = f'AND `tbl`.enable = :enable' + # sql_enabled = f'AND `person`.enable = :enable' # elif enabled == 'disabled': # data['enable'] = False - # sql_enabled = f'AND `tbl`.enable = :enable' + # sql_enabled = f'AND `person`.enable = :enable' # elif enabled == 'all': # sql_enabled = '' sql_enabled = '' @@ -316,21 +321,35 @@ def get_person_rec_list( else: sql_limit = '' - sql = f""" - SELECT `tbl`.id AS 'person_id', `tbl`.id_random AS 'person_id_random' - FROM `person` AS `tbl` - WHERE - {sql_obj_type_id} - {sql_enabled} - ORDER BY `tbl`.created_on DESC, `tbl`.updated_on DESC - {sql_limit}; - """ + if not email: + sql = f""" + SELECT `person`.id AS 'person_id', `person`.id_random AS 'person_id_random' + FROM `person` AS `person` + WHERE + {sql_obj_type_id} + {sql_enabled} + ORDER BY `person`.created_on DESC, `person`.updated_on DESC + {sql_limit}; + """ + else: + sql = f""" + SELECT `person`.id AS 'person_id', `person`.id_random AS 'person_id_random' + FROM `person` AS `person` + LEFT JOIN `user` ON person.user_id = user.id + LEFT JOIN `contact` AS `contact` ON person.id = contact.for_id AND contact.for_type = 'person' + WHERE + {sql_obj_type_id} + {sql_where_email} + {sql_enabled} + ORDER BY `person`.priority DESC, `person`.sort ASC,`person`.given_name ASC, `person`.family_name ASC, `person`.created_on DESC, `person`.updated_on DESC + {sql_limit}; + """ if person_rec_li_result := sql_select(data=data, sql=sql, as_list=True): person_rec_li = person_rec_li_result - else: - person_rec_li = [] - log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + else: # None or False + person_rec_li = person_rec_li_result + log.debug(person_rec_li_result) return person_rec_li diff --git a/app/routers/importing.py b/app/routers/importing.py index 6b1a68a..5137564 100644 --- a/app/routers/importing.py +++ b/app/routers/importing.py @@ -839,7 +839,7 @@ async def ins_up_membership_person_data( if membership_type_name := record.get('membership_type', None): pass else: - log.warning(f'No membership information information found. Person ID: {person_id}, External ID: {external_id}, Email: {email}') + log.warning(f'No membership information. Person ID: {person_id}, External ID: {external_id}, Email: {email}') continue data = {} diff --git a/app/routers/person.py b/app/routers/person.py index 1dada9b..d6c231f 100644 --- a/app/routers/person.py +++ b/app/routers/person.py @@ -372,6 +372,69 @@ async def person_obj_external_id( # ### END ### API Person ### person_obj_external_id() ### +# ### BEGIN ### API Person ### lookup_email() ### +# Updated 2021-12-01 +@router.get('/person/lookup_email', response_model=Resp_Body_Base) +async def lookup_email( + email: str = Query(..., min_length=5, max_length=75), + inc_address: bool = False, + inc_contact: bool = False, + inc_user: bool = False, + inc_user_role_list: bool = False, + enabled: str = 'enabled', + limit: int = 50, + by_alias: Optional[bool] = True, + exclude_unset: Optional[bool] = True, + x_account_id: str = Header(...), + response: Response = Response, + ): + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + if account_id := redis_lookup_id_random(record_id_random=x_account_id, table_name='account'): pass + else: return mk_resp(data=None, status_code=404, response=response) + + import time + + time.sleep(1) + + if person_rec_list_result := get_person_rec_list( + #account_id = account_id, + for_obj_type = 'account', + for_obj_id = account_id, + email = email, + enabled = enabled, + limit = limit, + ): + person_result_list = [] + for person_rec in person_rec_list_result: + if load_person_result := load_person_obj( + person_id = person_rec.get('person_id', None), + inc_address = inc_address, + inc_contact = inc_contact, + inc_user = inc_user, + inc_user_role_list = inc_user_role_list, + enabled = enabled, + limit = limit, + by_alias = by_alias, + exclude_unset = exclude_unset, + # model_as_dict = model_as_dict, + ): + person_result_list.append(load_person_result) + else: + person_result_list.append(None) + response_data = person_result_list + elif person_rec_list_result is None: + log.info('No results') + return mk_resp(data=None, status_code=404, response=response) # Not Found + else: + log.warning('Likely bad request') + return mk_resp(data=False, status_code=400, response=response) # Bad Request + + return mk_resp(data=response_data) +# ### END ### API Person ### lookup_email() ### + + # ### BEGIN ### API Person ### get_person_obj() ### # Working well as of 2021-06-25. Using as a template for other routes. @router.get('/person/{person_id}', response_model=Resp_Body_Base)