import datetime #from datetime import datetime, time, timedelta from fastapi import APIRouter, Body, Depends, Header, HTTPException, Path, 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, 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_person_tracking_methods import get_event_person_tracking_rec_list, load_event_person_tracking_obj from app.models.event_person_tracking_models import Event_Person_Tracking_Base from app.models.response_models import * router = APIRouter() @router.post('/event/person/tracking', response_model=Resp_Body_Base) async def post_event_person_tracking_obj( event_person_tracking_obj: Event_Person_Tracking_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.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) obj_type = 'event_person_tracking' event_person_tracking_obj_data_dict = event_person_tracking_obj.dict(by_alias=False, exclude_unset=True) result = post_obj_template( obj_type = obj_type, data = event_person_tracking_obj_data_dict, return_obj = True, by_alias = True, exclude_unset = True, ) return result @router.patch('/event/person/tracking/{event_person_tracking_id}', response_model=Resp_Body_Base) async def patch_event_person_tracking_obj( event_person_tracking_obj: Event_Person_Tracking_Base, event_person_tracking_id: str = Path(min_length=11, 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_person_tracking' event_person_tracking_obj_data_dict = event_person_tracking_obj.dict(by_alias=False, exclude_unset=True) event_person_tracking_obj_data_dict['id'] = redis_lookup_id_random(record_id_random=event_person_tracking_id, table_name=obj_type) event_person_tracking_obj_data_dict['id_random'] = event_person_tracking_id result = patch_obj_template( obj_type = obj_type, data = event_person_tracking_obj_data_dict, obj_id = event_person_tracking_id, return_obj = True, by_alias = True, exclude_unset = True, ) return result @router.get('/event/person/tracking/list', response_model=Resp_Body_Base) async def get_event_person_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_person_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/person/tracking/{obj_id}', response_model=Resp_Body_Base) async def get_event_person_tracking_obj( obj_id: str = Path(min_length=11, 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_person_tracking' result = get_obj_template( obj_type=obj_type, obj_id=obj_id, by_alias=True, exclude_unset=True, ) return result # ### BEGIN ### API Event Person Tracking ### get_event_person_obj_tracking_list() ### # Updated 2021-09-23 @router.get('/event/person/{event_person_id}/tracking/list', response_model=Resp_Body_Base) async def get_event_person_obj_tracking_list( event_person_id: str = Path(min_length=11, max_length=22), event_session_id: str = Query(None, min_length=11, max_length=22), in_out_type: str = Query(None, min_length=1, max_length=15), 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_person: bool = False, inc_event_session: 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 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) if event_session_id: if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass else: return mk_resp(data=None, status_code=404, response=response) # Updated 2021-09-21 if event_person_tracking_rec_list_result := get_event_person_tracking_rec_list( account_id = x_account_id, event_person_id = event_person_id, event_session_id = event_session_id, in_out_type = in_out_type, enabled = enabled, limit = limit, ): event_person_tracking_result_list = [] for event_person_tracking_rec in event_person_tracking_rec_list_result: if load_event_person_tracking_result := load_event_person_tracking_obj( event_person_tracking_id = event_person_tracking_rec.get('event_person_tracking_id', None), enabled = enabled, limit = limit, inc_event_person = inc_event_person, inc_event_session = inc_event_session, by_alias = by_alias, exclude_unset = exclude_unset, # model_as_dict = model_as_dict, ): event_person_tracking_result_list.append(load_event_person_tracking_result) else: event_person_tracking_result_list.append(None) response_data = event_person_tracking_result_list elif isinstance(event_person_tracking_rec_list_result, list): return mk_resp(data=False, status_code=404, response=response) # Not Found else: return mk_resp(data=False, status_code=400, response=response) # Bad Request return mk_resp(data=response_data, response=response) # ### END ### API Event Person Tracking ### get_event_person_obj_tracking_list() ### # ### BEGIN ### API Event Person Tracking ### get_event_session_obj_event_person_tracking_list() ### # Updated 2021-09-21 @router.get('/event/session/{event_session_id}/event/person/tracking/list', response_model=Resp_Body_Base) async def get_event_session_obj_event_person_tracking_list( event_session_id: str = Path(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 inc_event_person: bool = False, inc_event_session: 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 event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass else: return mk_resp(data=None, status_code=404, response=response) # Updated 2021-09-21 if event_person_tracking_rec_list_result := get_event_person_tracking_rec_list( account_id = x_account_id, event_session_id = event_session_id, enabled = enabled, limit = limit, ): event_person_tracking_result_list = [] for event_person_tracking_rec in event_person_tracking_rec_list_result: if load_event_person_tracking_result := load_event_person_tracking_obj( event_person_tracking_id = event_person_tracking_rec.get('event_person_tracking_id', None), enabled = enabled, limit = limit, inc_event_person = inc_event_person, inc_event_session = inc_event_session, by_alias = by_alias, exclude_unset = exclude_unset, # model_as_dict = model_as_dict, ): event_person_tracking_result_list.append(load_event_person_tracking_result) else: event_person_tracking_result_list.append(None) response_data = event_person_tracking_result_list elif isinstance(event_person_tracking_rec_list_result, list): return mk_resp(data=False, status_code=404, response=response) # Not Found else: return mk_resp(data=False, status_code=400, response=response) # Bad Request return mk_resp(data=response_data, response=response) # ### END ### API Event Person Tracking ### get_event_session_obj_event_person_tracking_list() ### @router.delete('/event/person/tracking/{obj_id}', response_model=Resp_Body_Base) async def delete_event_person_tracking_obj( obj_id: str = Path(min_length=11, 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_person_tracking' result = delete_obj_template( obj_type=obj_type, obj_id=obj_id, ) return result