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

209 lines
9.3 KiB
Python

import datetime
#from datetime import datetime, time, timedelta
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, common_route_params, Common_Route_Params
from app.config import settings
from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, get_id_random,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_exhibit_tracking_methods import create_event_exhibit_tracking_obj, get_event_exhibit_tracking_rec_list, load_event_exhibit_tracking_obj, update_event_exhibit_tracking_obj
from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base
from app.models.response_models import Resp_Body_Base, mk_resp
router = APIRouter()
@router.post('/event/exhibit/tracking', response_model=Resp_Body_Base)
async def post_event_exhibit_tracking_obj(
event_exhibit_tracking_obj: Event_Exhibit_Tracking_Base,
event_exhibit_id: str = Query(..., min_length=11, max_length=22),
event_badge_id: str = Query(None, min_length=11, max_length=22),
event_person_id: str = Query(None, min_length=11, max_length=22),
return_obj: bool = True,
commons: Common_Route_Params = Depends(common_route_params),
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
# ### SECTION ### Secondary data validation
if event_exhibit_id := redis_lookup_id_random(record_id_random=event_exhibit_id, table_name='event_exhibit'): pass
# elif event_exhibit_id is None: pass
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Exhibit ID was invalid or not found.')
if event_badge_id := redis_lookup_id_random(record_id_random=event_badge_id, table_name='event_badge'): pass
# elif event_badge_id is None: pass
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Badge ID was invalid or not found.')
if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass
# elif event_person_id is None: pass
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Person ID was invalid or not found.')
# ### SECTION ### Process data
if membership_person_id := create_membership_person_obj(
account_id = commons.x_account_id,
person_id = person_id,
membership_person_dict_obj = membership_person_obj,
): pass
else: return mk_resp(data=False, status_code=400, response=commons.response, status_message='The membership person was not created. Check the field names and data types.') # Bad Request
obj_type = 'event_exhibit_tracking'
event_exhibit_tracking_obj_data_dict = event_exhibit_tracking_obj.dict(by_alias=False, exclude_unset=True)
result = post_obj_template(
obj_type = obj_type,
data = event_exhibit_tracking_obj_data_dict,
return_obj = True,
by_alias = True,
exclude_unset = True,
)
return result
@router.patch('/event/exhibit/tracking/{event_exhibit_tracking_id}', response_model=Resp_Body_Base)
async def patch_event_exhibit_tracking_obj(
event_exhibit_tracking_obj: Event_Exhibit_Tracking_Base,
event_exhibit_tracking_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_exhibit_tracking'
event_exhibit_tracking_obj_data_dict = event_exhibit_tracking_obj.dict(by_alias=False, exclude_unset=True)
event_exhibit_tracking_obj_data_dict['id'] = redis_lookup_id_random(record_id_random=event_exhibit_tracking_id, table_name=obj_type)
event_exhibit_tracking_obj_data_dict['id_random'] = event_exhibit_tracking_id
result = patch_obj_template(
obj_type = obj_type,
data = event_exhibit_tracking_obj_data_dict,
obj_id = event_exhibit_tracking_id,
return_obj = True,
by_alias = True,
exclude_unset = True,
)
return result
@router.get('/event/exhibit/tracking/list', response_model=Resp_Body_Base)
async def get_event_exhibit_tracking_obj_li(
for_obj_type: Optional[str] = Query(None, min_length=2, max_length=50),
for_obj_id: Optional[str] = Query(None, min_length=1, max_length=22),
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())
obj_type = 'event_exhibit_tracking'
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
@router.get('/event/exhibit/tracking/{obj_id}', response_model=Resp_Body_Base)
async def get_event_exhibit_tracking_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
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())
obj_type = 'event_exhibit_tracking'
result = get_obj_template(
obj_type=obj_type,
obj_id=obj_id,
by_alias=True,
exclude_unset=True,
)
return result
# ### BEGIN ### API Event Exhibit Tracking ### get_event_exhibit_obj_tracking_list() ###
# Updated 2022-02-14
@router.get('/event/exhibit/{event_exhibit_id}/tracking/list', response_model=Resp_Body_Base)
async def get_event_exhibit_obj_tracking_list(
event_exhibit_id: str = Query(..., min_length=11, max_length=22),
event_person_id: str = Query(None, min_length=11, max_length=22),
inc_event_exhibit: bool = False,
inc_event_person: bool = False,
commons: Common_Route_Params = Depends(common_route_params),
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if event_exhibit_id := redis_lookup_id_random(record_id_random=event_exhibit_id, table_name='event_exhibit'): pass
else: return mk_resp(data=None, status_code=404, response=commons.response)
if 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=commons.response)
# Updated 2022-02-14
if event_exhibit_tracking_rec_list_result := get_event_exhibit_tracking_rec_list(
event_exhibit_id = event_exhibit_id,
event_person_id = event_person_id,
enabled = commons.enabled,
limit = commons.limit,
):
event_exhibit_tracking_result_list = []
for event_exhibit_tracking_rec in event_exhibit_tracking_rec_list_result:
if load_event_exhibit_tracking_result := load_event_exhibit_tracking_obj(
event_exhibit_tracking_id = event_exhibit_tracking_rec.get('event_exhibit_tracking_id', None),
enabled = commons.enabled,
limit = commons.limit,
inc_event_exhibit = inc_event_exhibit,
inc_event_person = inc_event_person,
by_alias = commons.by_alias,
exclude_unset = commons.exclude_unset,
# model_as_dict = commons.model_as_dict,
):
event_exhibit_tracking_result_list.append(load_event_exhibit_tracking_result)
else:
event_exhibit_tracking_result_list.append(None)
response_data = event_exhibit_tracking_result_list
elif isinstance(event_exhibit_tracking_rec_list_result, list):
return mk_resp(data=False, status_code=404, response=commons.response) # Not Found
else:
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
return mk_resp(data=commons.response_data, response=commons.response)
# ### END ### API Event Exhibit Tracking ### get_event_exhibit_obj_tracking_list() ###
@router.delete('/event/exhibit/tracking/{obj_id}', response_model=Resp_Body_Base)
async def delete_event_exhibit_tracking_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_exhibit_tracking'
result = delete_obj_template(
obj_type=obj_type,
obj_id=obj_id,
)
return result