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, remove_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() # ### BEGIN ### API Event Exhibit Tracking ### post_event_exhibit_tracking_obj() ### # Updated 2022-02-15 @router.post('/event/exhibit/tracking', response_model=Resp_Body_Base) async def post_event_exhibit_tracking_obj( event_exhibit_id: str = Query(..., min_length=11, max_length=22), event_exhibit_tracking_obj: Event_Exhibit_Tracking_Base = {}, event_badge_id: str = Query(None, min_length=11, max_length=22), event_person_id: str = Query(None, min_length=11, max_length=22), inc_event_badge: bool = False, inc_event_exhibit: bool = False, inc_event_person: bool = False, 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.') if event_badge_id or event_person_id: pass else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Badge ID or Event Person ID is required.') # ### SECTION ### Process data if event_exhibit_tracking_id := create_event_exhibit_tracking_obj( event_exhibit_id = event_exhibit_id, event_exhibit_tracking_dict_obj = event_exhibit_tracking_obj, event_badge_id = event_badge_id, event_person_id = event_person_id, ): pass elif event_exhibit_tracking_id is None: return mk_resp(data=None, status_code=200, response=commons.response, status_message='Not created. Likely duplicate entry. Returning None.') # Success else: log.warning('Likely bad request') return mk_resp(data=False, status_code=400, response=commons.response, status_message='Not created. Something failed while processing the data. Check the field names and data types.') # Bad Request # ### SECTION ### Return successful results if return_obj: event_exhibit_tracking_obj = load_event_exhibit_tracking_obj( event_exhibit_tracking_id = event_exhibit_tracking_id, inc_event_badge = inc_event_badge, inc_event_exhibit = inc_event_exhibit, inc_event_person = inc_event_person, ).dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset) data = event_exhibit_tracking_obj else: event_exhibit_tracking_id_random = get_id_random(record_id=event_exhibit_tracking_id, table_name='event_exhibit_tracking') data = {} data['event_exhibit_tracking_id'] = event_exhibit_tracking_id data['event_exhibit_tracking_id_random'] = person_id_random return mk_resp(data=data, response=commons.response) # ### END ### API Event Exhibit Tracking ### post_event_exhibit_tracking_obj() ### # ### BEGIN ### API Event Exhibit Tracking ### patch_event_exhibit_tracking_obj() ### # Updated 2022-02-15 @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=11, max_length=22), inc_event_badge: bool = False, inc_event_exhibit: bool = False, inc_event_person: bool = False, return_obj: bool = True, commons: Common_Route_Params = Depends(common_route_params), ): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) # ### SECTION ### Secondary data validation event_exhibit_tracking_id_random = event_exhibit_tracking_id # This is used later for the response data if event_exhibit_tracking_id := redis_lookup_id_random(record_id_random=event_exhibit_tracking_id, table_name='event_exhibit_tracking'): pass else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Exhibit Tracking ID was invalid or not found.') # ### SECTION ### Process data if event_exhibit_tracking_update_result := update_event_exhibit_tracking_obj( event_exhibit_tracking_id = event_exhibit_tracking_id, event_exhibit_tracking_dict_obj = event_exhibit_tracking_obj, ): pass else: log.warning('Likely bad request') return mk_resp(data=False, status_code=400, response=commons.response, status_message='Not updated. Something failed while processing the data. Check the field names and data types.') # Bad Request # ### SECTION ### Return successful results if return_obj: event_exhibit_tracking_obj = load_event_exhibit_tracking_obj( event_exhibit_tracking_id = event_exhibit_tracking_id, inc_event_badge = inc_event_badge, inc_event_exhibit = inc_event_exhibit, inc_event_person = inc_event_person, ).dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset) data = event_exhibit_tracking_obj else: data = {} data['event_exhibit_tracking_id'] = event_exhibit_tracking_id data['event_exhibit_tracking_id_random'] = event_exhibit_tracking_id_random return mk_resp(data=data, response=commons.response) # ### END ### API Event Exhibit Tracking ### patch_event_exhibit_tracking_obj() ### @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 # ### BEGIN ### API Event Exhibit Tracking ### get_event_exhibit_tracking_obj() ### # Updated 2022-02-15 @router.get('/event/exhibit/tracking/{event_exhibit_tracking_id}', response_model=Resp_Body_Base) async def get_event_exhibit_tracking_obj( event_exhibit_tracking_id: str = Query(..., min_length=11, max_length=22), inc_event_badge: bool = False, inc_event_exhibit: bool = False, inc_event_person: bool = False, return_obj: bool = True, commons: Common_Route_Params = Depends(common_route_params), ): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) # ### SECTION ### Secondary data validation event_exhibit_tracking_id_random = event_exhibit_tracking_id # This is used later for the response data if event_exhibit_tracking_id := redis_lookup_id_random(record_id_random=event_exhibit_tracking_id, table_name='event_exhibit_tracking'): pass else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Exhibit Tracking ID was invalid or not found.') if event_exhibit_tracking_obj_result := load_event_exhibit_tracking_obj( event_exhibit_tracking_id = event_exhibit_tracking_id, inc_event_badge = inc_event_badge, inc_event_exhibit = inc_event_exhibit, inc_event_person = inc_event_person, ): log.info('Loading successful. Returning result') return mk_resp(data=event_exhibit_tracking_obj_result, response=commons.response) # Success elif isinstance(event_exhibit_tracking_obj_result, list) or event_exhibit_tracking_obj_result is None: # Empty list or None log.info('No results') return mk_resp(data=None, status_code=404, response=commons.response) # Not Found else: log.warning('Likely bad request') return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request # ### END ### API Event Exhibit Tracking ### get_event_exhibit_tracking_obj() ### # ### BEGIN ### API Event Exhibit Tracking ### get_event_exhibit_obj_tracking_list() ### # Updated 2022-02-15 @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_badge: bool = False, 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) 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'), inc_event_badge = inc_event_badge, 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) return mk_resp(data=event_exhibit_tracking_result_list, response=commons.response) # Success 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 # ### END ### API Event Exhibit Tracking ### get_event_exhibit_obj_tracking_list() ### # ### BEGIN ### API Event Exhibit Tracking ### delete_event_exhibit_tracking_obj() ### # Updated 2022-02-15 @router.delete('/event/exhibit/tracking/{event_exhibit_tracking_id}', response_model=Resp_Body_Base) def delete_event_exhibit_tracking_obj( event_exhibit_tracking_id: str = Query(..., min_length=11, max_length=22), response: Response = Response, ): log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) # ### SECTION ### Secondary data validation if event_exhibit_tracking_id := redis_lookup_id_random(record_id_random=event_exhibit_tracking_id, table_name='event_exhibit_tracking'): pass else: return mk_resp(data=None, status_code=404, response=response, status_message='The Event Exhibit Tracking ID was invalid or not found.') if event_exhibit_tracking_obj_result := remove_event_exhibit_tracking_obj( event_exhibit_tracking_id = event_exhibit_tracking_id, ): log.info('Delete successful. Returning True') return mk_resp(data=True, response=response) # Success elif event_exhibit_tracking_obj_result is None: # 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 # ### END ### API Event Exhibit Tracking ### delete_event_exhibit_tracking_obj() ###