Files
OSIT-AE-API-FastAPI/app/routers/event_badge.py

367 lines
14 KiB
Python

import datetime
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Response, status
from pydantic import BaseModel, EmailStr, Field
from typing import Dict, List, Optional, Set, Union
from app.lib_general import log, logging
from app.config import settings
from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, redis_lookup_id_random
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_badge_methods import get_event_badge_rec_list, load_event_badge_obj
from app.methods.event_badge_methods import load_event_badge_obj
from app.models.event_badge_models import Event_Badge_Base
from app.models.response_models import Resp_Body_Base, mk_resp
router = APIRouter()
@router.post('/event/badge', response_model=Resp_Body_Base)
async def post_event_badge_obj(
obj: Event_Badge_Base,
x_account_id: str = Header(...),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'event_badge'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
result = post_obj_template(
obj_type = obj_type,
data = obj_data_dict,
return_obj = True,
by_alias = True,
exclude_unset = True,
)
return result
@router.patch('/event/badge/{obj_id}', response_model=Resp_Body_Base)
async def patch_event_badge_obj(
obj: Event_Badge_Base,
obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: Optional[str] = Header(..., ),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'event_badge'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
obj_data_dict['id'] = redis_lookup_id_random(record_id_random=obj_id, table_name=obj_type)
obj_data_dict['id_random'] = obj_id
result = patch_obj_template(
obj_type = obj_type,
data = obj_data_dict,
obj_id = obj_id,
return_obj = True,
by_alias = True,
exclude_unset = True,
)
return result
@router.get('/event/badge/list', response_model=Resp_Body_Base)
async def get_event_badge_obj_li(
for_obj_type: str = Query(None, min_length=2, max_length=50),
for_obj_id: str = Query(None, min_length=1, max_length=22),
group: str = Query(None, min_length=2, max_length=50),
x_account_id: str = Header(...),
by_alias: bool = True,
exclude_unset: bool = True,
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'event_badge'
if for_obj_type == 'event_exhibit' and for_obj_id:
#base_name = obj_type_li[obj_type]['base_name']
base_name = Event_Badge_Base
for_obj_id_random = for_obj_id
for_obj_id = redis_lookup_id_random(record_id_random=for_obj_id_random, table_name=for_obj_type)
data = {}
data['for_obj_type'] = for_obj_type
data['for_obj_id'] = for_obj_id
data['for_obj_id_random'] = for_obj_id_random
data['group'] = group
if group:
sql = """
SELECT *
FROM `event_badge` AS event_badge
WHERE event_badge.for_type = :for_obj_type AND event_badge.for_id = :for_obj_id
AND event_badge.group = :group
"""
else:
sql = """
SELECT *
FROM `event_badge` AS event_badge
WHERE event_badge.for_type = :for_obj_type AND event_badge.for_id = :for_obj_id
"""
if sql_result := sql_select(data=data, sql=sql, as_list=True):
resp_data_li = []
for record in sql_result:
resp_data = base_name(**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)
result = get_obj_li_template(
obj_type=obj_type,
for_obj_type=for_obj_type,
for_obj_id=for_obj_id,
by_alias=True,
exclude_unset=True,
)
return result
# ### BEGIN ### API Event Badge ### search_event_badge_obj_li() ###
# Updated 2021-07-28
@router.get('/event/{event_id}/badge/search', response_model=Resp_Body_Base)
async def search_event_badge_obj_li(
# account_id: str = Query(None, min_length=11, max_length=22),
event_id: str = Query(None, min_length=11, max_length=22),
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())
data = {}
data['account_id_random'] = x_account_id
data['event_id_random'] = event_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_badge`.enable = :enable'
elif enabled == 'disabled':
data['enable'] = False
sql_enabled = f'AND `event_badge`.enable = :enable'
elif enabled == 'all':
sql_enabled = ''
if limit:
data['limit'] = limit
sql_limit = f'LIMIT :limit'
else:
sql_limit = ''
sql = f"""
SELECT *
FROM `v_event_badge` AS event_badge
WHERE event_badge.account_id = :account_id
AND (event_badge.external_id LIKE :external_id OR event_badge.external_id IS NULL)
AND (event_badge.given_name LIKE :given_name
AND event_badge.family_name LIKE :family_name)
AND event_badge.email LIKE :email
{sql_enabled}
ORDER BY event_badge.given_name ASC, event_badge.family_name ASC, event_badge.created_on DESC, event_badge.updated_on DESC
{sql_limit};
"""
sql = f"""
SELECT *
FROM `v_event_badge` AS event_badge
WHERE event_badge.event_id = :event_id
AND (event_badge.given_name LIKE :given_name
AND event_badge.family_name LIKE :family_name)
AND event_badge.email LIKE :email
{sql_enabled}
ORDER BY event_badge.given_name ASC, event_badge.family_name ASC, event_badge.created_on DESC, event_badge.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_Badge_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 Badge ### search_event_badge_obj_li() ###
# ### BEGIN ### API Event Badge ### get_event_badge_obj() ###
# Updated 2021-08-05
@router.get('/event/badge/{event_badge_id}', response_model=Resp_Body_Base)
async def get_event_badge_obj(
event_badge_id: str = Query(..., min_length=11, max_length=22),
limit: int = 5, # For now this covers any included objects or object lists
enabled: str = 'enabled', # For now this covers any included objects or object lists
inc_event_badge_template: bool = True,
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if event_badge_id := redis_lookup_id_random(record_id_random=event_badge_id, table_name='event_badge'): pass
else: return mk_resp(data=None, status_code=404, response=response)
event_badge_obj = load_event_badge_obj(
event_badge_id = event_badge_id,
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
# model_as_dict = model_as_dict,
enabled = enabled,
inc_event_badge_template = inc_event_badge_template,
)
event_badge_dict = event_badge_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
return mk_resp(data=event_badge_dict, response=response)
# ### END ### API Event Badge ### get_event_badge_obj() ###
# ### BEGIN ### API Event Badge ### get_account_obj_event_badge_list() ###
# Updated 2021-07-28
@router.get('/account/{account_id}/event/badge/list', response_model=Resp_Body_Base)
async def get_account_obj_event_badge_list(
account_id: str = Query(..., min_length=1, max_length=22),
limit: int = 500, # For now this covers any included objects or object lists
enabled: str = 'enabled', # For now this covers any included objects or object lists
inc_event_badge: bool = False,
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
else: return mk_resp(data=None, status_code=404, response=response)
response_data = None
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
# Updated 2021-07-28
if event_badge_rec_list_result := get_event_badge_rec_list(
account_id = account_id,
limit = limit,
enabled = enabled,
):
event_badge_result_list = []
for event_badge_rec in event_badge_rec_list_result:
if load_event_badge_result := load_event_badge_obj(
event_badge_id = event_badge_rec.get('event_badge_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
# model_as_dict = model_as_dict,
enabled = enabled,
inc_event_badge = inc_event_badge,
):
event_badge_result_list.append(load_event_badge_result)
else:
event_badge_result_list.append(None)
response_data = event_badge_result_list
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
return mk_resp(data=response_data, response=response)
# ### END ### API Event Badge ### get_account_obj_event_badge_list() ###
# ### BEGIN ### API Event Badge ### get_event_obj_event_badge_list() ###
# Updated 2021-07-28
@router.get('/event/{event_id}/event/badge/list', response_model=Resp_Body_Base)
async def get_event_obj_event_badge_list(
event_id: str = Query(..., min_length=11, max_length=22),
limit: int = 500, # For now this covers any included objects or object lists
enabled: str = 'enabled', # For now this covers any included objects or object lists
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if event_badge_id := redis_lookup_id_random(record_id_random=event_badge_id, table_name='event_badge'): pass
else: return mk_resp(data=None, status_code=404, response=response)
response_data = None
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
# Updated 2021-07-28
if event_badge_rec_list_result := get_event_badge_rec_list(
event_badge_id = event_badge_id,
limit = limit,
enabled = enabled,
):
event_badge_result_list = []
for event_badge_rec in event_badge_rec_list_result:
if load_event_badge_result := load_event_badge_obj(
event_badge_id = event_badge_rec.get('event_badge_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
# model_as_dict = model_as_dict,
enabled = enabled,
):
event_badge_result_list.append(load_event_badge_result)
else:
event_badge_result_list.append(None)
response_data = event_badge_result_list
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
return mk_resp(data=response_data, response=response)
# ### END ### API Event Badge ### get_event_obj_event_badge_list() ###
@router.delete('/event/badge/{obj_id}', response_model=Resp_Body_Base)
async def delete_event_badge_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: str = Header(...),
response: Response = Response,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'event_badge'
result = delete_obj_template(
obj_type=obj_type,
obj_id=obj_id,
)
return result