Work on things related to event_person, tracking, badges, sessions, etc

This commit is contained in:
Scott Idem
2021-09-21 17:30:20 -04:00
parent 200ee82b9d
commit 0f87f69077
13 changed files with 661 additions and 27 deletions

View File

@@ -407,8 +407,7 @@ async def get_event_person_obj(
log.debug(locals())
if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass
else:
return mk_resp(data=None, status_code=404)
else: return mk_resp(data=None, status_code=404, response=response)
if event_person_obj := load_event_person_obj(
event_person_id = event_person_id,
@@ -436,10 +435,172 @@ async def get_event_person_obj(
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
return mk_resp(data=event_person_obj)
return mk_resp(data=event_person_obj, response=response)
# ### END ### API Event Person ### get_event_person_obj() ###
# ### BEGIN ### API Event Person ### search_event_person_obj_li() ###
# Updated 2021-09-21
@router.get('/event/{event_id}/person/search', response_model=Resp_Body_Base)
async def search_event_person_obj_li(
# account_id: str = Query(None, min_length=11, max_length=22),
event_id: str = Query(None, min_length=11, max_length=22),
event_person_id: str = Query('', max_length=50),
external_id: str = Query('', max_length=50),
given_name: str = Query('', max_length=25),
family_name: str = Query('', max_length=25),
email: str = Query('', max_length=50),
limit: int = 50,
enabled: str = 'enabled',
x_account_id: str = Header(...),
by_alias: bool = True,
exclude_unset: bool = True,
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)
if event_id:
log.info(f'Looking up Event ID based on Event ID Random: {event_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=response)
if event_person_id:
log.info(f'Looking up Event Person ID based on Event ID Random: {event_person_id}')
if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass
else: return mk_resp(data=None, status_code=404, response=response)
data = {}
data['account_id'] = account_id
data['event_id'] = event_id
data['event_person_id'] = event_person_id
data['external_id'] = '%'+external_id+'%'
data['given_name'] = '%'+given_name+'%'
data['family_name'] = '%'+family_name+'%'
data['email'] = '%'+email+'%' # Adding the % symbol here because it turns certain combinations into special characters
# data['from_datetime'] = from_datetime
# data['to_datetime'] = to_datetime
log.debug(data)
if enabled in ['enabled', 'disabled', 'all']:
if enabled == 'enabled':
data['enable'] = True
sql_enabled = f'AND `event_person`.enable = :enable'
elif enabled == 'disabled':
data['enable'] = False
sql_enabled = f'AND `event_person`.enable = :enable'
elif enabled == 'all':
sql_enabled = ''
if limit:
data['limit'] = limit
sql_limit = f'LIMIT :limit'
else:
sql_limit = ''
if event_person_id:
log.info('Looking up Event Person based on event_person_id')
sql = f"""
SELECT *
FROM `v_event_person` AS event_person
WHERE event_person.account_id = :account_id
AND event_person.event_id = :event_id
AND event_person.event_person_id LIKE :event_person_id
{sql_enabled}
ORDER BY event_person.event_person_family_name ASC, event_person.event_person_given_name ASC, event_person.created_on DESC, event_person.updated_on DESC
{sql_limit};
"""
elif external_id:
log.info('Looking up Event Person based on external_id')
sql = f"""
SELECT *
FROM `v_event_person` AS event_person
WHERE event_person.account_id = :account_id
AND event_person.event_id = :event_id
AND event_person.external_id LIKE :external_id
{sql_enabled}
ORDER BY event_person.event_person_family_name ASC, event_person.event_person_given_name ASC, event_person.created_on DESC, event_person.updated_on DESC
{sql_limit};
"""
elif given_name and family_name and email:
log.info('Looking up Event Person based on given_name, family_name, and email')
sql = f"""
SELECT *
FROM `v_event_person` AS event_person
WHERE event_person.account_id = :account_id
AND event_person.event_id = :event_id
AND (event_person.event_person_given_name LIKE :given_name OR event_person.person_given_name LIKE :given_name)
AND (event_person.event_person_family_name LIKE :family_name OR event_person.person_family_name LIKE :family_name)
AND (event_person.event_person_email LIKE :email OR event_person.user_email LIKE :email)
{sql_enabled}
ORDER BY event_person.event_person_family_name ASC, event_person.event_person_given_name ASC, event_person.created_on DESC, event_person.updated_on DESC
{sql_limit};
"""
elif given_name and family_name:
log.info('Looking up Event Person based on given_name and family_name')
sql = f"""
SELECT *
FROM `v_event_person` AS event_person
WHERE event_person.account_id = :account_id
AND event_person.event_id = :event_id
AND (event_person.event_person_given_name LIKE :given_name OR event_person.person_given_name LIKE :given_name)
AND (event_person.event_person_family_name LIKE :family_name OR event_person.person_family_name LIKE :family_name)
AND (event_person.event_person_email IS NULL OR event_person.event_person_email LIKE :email OR event_person.user_email LIKE :email)
{sql_enabled}
ORDER BY event_person.event_person_family_name ASC, event_person.event_person_given_name ASC, event_person.created_on DESC, event_person.updated_on DESC
{sql_limit};
"""
elif given_name or family_name:
log.info('Looking up Event Person based on given_name or family_name')
sql = f"""
SELECT *
FROM `v_event_person` AS event_person
WHERE event_person.account_id = :account_id
AND event_person.event_id = :event_id
AND (event_person.event_person_given_name IS NULL OR event_person.event_person_given_name LIKE :given_name OR event_person.person_given_name LIKE :given_name)
AND (event_person.event_person_family_name IS NULL OR event_person.event_person_family_name LIKE :family_name OR event_person.person_family_name LIKE :family_name)
AND (event_person.event_person_email IS NULL OR event_person.event_person_email LIKE :email OR event_person.user_email LIKE :email)
{sql_enabled}
ORDER BY event_person.event_person_family_name ASC, event_person.event_person_given_name ASC, event_person.created_on DESC, event_person.updated_on DESC
{sql_limit};
"""
elif email:
log.info('Looking up Event Person based on email')
sql = f"""
SELECT *
FROM `v_event_person` AS event_person
WHERE event_person.account_id = :account_id
AND event_person.event_id = :event_id
AND (event_person.event_person_given_name IS NULL OR event_person.event_person_given_name LIKE :given_name OR event_person.person_given_name LIKE :given_name)
AND (event_person.event_person_family_name IS NULL OR event_person.event_person_family_name LIKE :family_name OR event_person.person_family_name LIKE :family_name)
AND (event_person.event_person_email LIKE :email OR event_person.user_email LIKE :email)
{sql_enabled}
ORDER BY event_person.event_person_family_name ASC, event_person.event_person_given_name ASC, event_person.created_on DESC, event_person.updated_on DESC
{sql_limit};
"""
log.debug(sql)
if sql_result := sql_select(data=data, sql=sql, as_list=True, rm_id_random=True):
resp_data_li = []
for record in sql_result:
resp_data = Event_Person_Base(**record).dict(by_alias=by_alias, exclude_unset=exclude_unset)
resp_data_li.append(resp_data)
return mk_resp(data=resp_data_li, response=response)
else:
log.debug(sql_result)
return mk_resp(data=False, status_code=404, response=response)
# ### END ### API Event Person ### search_event_person_obj_li() ###
# ### BEGIN ### API Event Person Methods ### get_event_registration_event_person_obj_li() ###
# Similar to event_registration.py: /event/registration/<id> inc_event_person_list
# Updated 2021-08-17