Files
OSIT-AE-API-FastAPI/app/routers/event_location.py
2024-04-26 15:15:37 -04:00

262 lines
12 KiB
Python

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, 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, 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_location_methods import create_update_event_location_obj_v4, get_event_location_rec_list, load_event_location_obj
from app.models.event_location_models import Event_Location_Base
from app.models.response_models import Resp_Body_Base, mk_resp
router = APIRouter()
# ### BEGIN ### API Event Location ### post_event_location_obj_new_v4() ###
# Updated 2022-09-23
@router.post('/event/location/new_v4', response_model=Resp_Body_Base)
async def post_event_location_obj_new_v4(
event_location_obj: Event_Location_Base,
create_sub_obj: bool = False,
fail_any: bool = True, # Fail if any thing goes wrong for sub objects
inc_event_file_list: bool = False,
inc_event_session_list: bool = False,
return_obj: bool = True,
commons: Common_Route_Params = Depends(common_route_params),
# x_account_id: str = Header(...),
# limit: int = 500,
# enabled: str = 'enabled',
# by_alias: bool = True,
# exclude_unset: bool = True,
# response: Response = Response,
):
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
# There should probably be a check for the event ID before calling the create function?
if create_event_location_obj_result := create_update_event_location_obj_v4(
event_location_dict_obj = event_location_obj,
event_id = event_location_obj.event_id,
create_sub_obj = create_sub_obj,
fail_any = fail_any,
return_outline = False,
): pass
else: return mk_resp(data=False, status_code=400, response=commons.response, status_message='The event location was not created. Check the field names and data types.')
if isinstance(create_event_location_obj_result, int):
event_location_id = create_event_location_obj_result
if return_obj:
if load_event_location_obj_result := load_event_location_obj(
event_location_id = event_location_id,
inc_event_file_list = inc_event_file_list,
inc_event_session_list = inc_event_session_list,
):
data = load_event_location_obj_result
else:
data = False
else:
event_location_id = event_location_id
event_location_id_random = get_id_random(record_id=event_location_id, table_name='event_location')
data = {}
data['event_location_id'] = event_location_id
data['event_location_id_random'] = event_location_id_random
return mk_resp(data=data, response=commons.response, status_message='The event location was created.')
else:
return mk_resp(data=False, status_code=400, response=commons.response, status_message='The result from trying to create an event location was unexpected.')
# ### END ### API Event Location ### post_event_location_obj_new_v4() ###
# ### BEGIN ### API Event Location ### patch_event_location_obj_exist_v4() ###
# Updated 2021-10-22
@router.patch('/event/location/{event_location_id}/exist_v4', response_model=Resp_Body_Base)
async def patch_event_location_obj_exist_v4(
event_location_obj: Event_Location_Base,
event_location_id: str = Path(min_length=11, max_length=22),
create_sub_obj: bool = False,
fail_any: bool = True, # Fail if any thing goes wrong for sub objects
inc_event_file_list: bool = False,
inc_event_presentation_list: bool = False,
inc_event_presenter_list: bool = False,
inc_event_session_list: bool = False,
x_account_id: Optional[str] = Header(..., ),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
exclude_none: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if event_location_id := redis_lookup_id_random(record_id_random=event_location_id, table_name='event_location'): pass
else: return mk_resp(data=None, status_code=404, response=response)
if update_event_location_obj_result := create_update_event_location_obj_v4(
event_location_dict_obj = event_location_obj,
event_location_id = event_location_id,
event_id = event_location_obj.event_id,
create_sub_obj = create_sub_obj,
fail_any = fail_any,
return_outline = False,
): pass
else: return mk_resp(data=False, status_code=400, response=response, status_message='The event location was not created or updated. Check the field names and data types.')
if update_event_location_obj_result:
if return_obj:
if load_event_location_obj_result := load_event_location_obj(
event_location_id = event_location_id,
inc_event_file_list = inc_event_file_list,
inc_event_presentation_list = inc_event_presentation_list,
inc_event_presenter_list = inc_event_presenter_list,
inc_event_session_list = inc_event_session_list,
):
data = load_event_location_obj_result
else:
data = False
else:
event_location_id_random = get_id_random(record_id=event_location_id, table_name='event_location')
data = {}
data['event_location_id'] = event_location_id
data['event_location_id_random'] = event_location_id_random
return mk_resp(data=data, response=response, status_message='The event location was created.')
else:
return mk_resp(data=False, status_code=400, response=response, status_message='The result from trying to create an event location was unexpected.')
# ### END ### API Event Location ### patch_event_location_obj_exist_v4() ###
# ### BEGIN ### API Event Location ### get_event_location_obj() ###
# Updated 2022-09-23
@router.get('/event/location/{event_location_id}', response_model=Resp_Body_Base)
async def get_event_location_obj(
event_location_id: str = Path(min_length=11, max_length=22),
inc_event_device_list: bool = False,
inc_event_file_list: bool = False,
inc_event_file_internal_use_list: bool = False,
inc_event_presentation_list: bool = False,
inc_event_presenter_list: bool = False,
inc_event_session_list: bool = False,
inc_file_count: bool = False, # NOTE: file counts are from separate views
enabled: str = 'enabled', # enabled, disabled, all
hidden: str = 'not_hidden', # hidden, not_hidden, all
limit: int = 500,
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
if event_location_id := redis_lookup_id_random(record_id_random=event_location_id, table_name='event_location'): pass
else: return mk_resp(data=None, status_code=404, response=response)
if event_location_obj := load_event_location_obj(
event_location_id = event_location_id,
inc_event_device_list = inc_event_device_list,
inc_event_file_list = inc_event_file_list,
inc_event_file_internal_use_list = inc_event_file_internal_use_list,
inc_event_presentation_list = inc_event_presentation_list,
inc_event_presenter_list = inc_event_presenter_list,
inc_event_session_list = inc_event_session_list,
inc_file_count = inc_file_count,
enabled = enabled,
hidden = hidden,
limit = limit,
):
event_location_dict = event_location_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
pass
else:
return mk_resp(data=False, status_code=400, response=response) # Bad Request
return mk_resp(data=event_location_dict, response=response)
#return mk_resp(data=event_location_obj)
# ### END ### API Event Location ### get_event_location_obj() ###
# ### BEGIN ### API Event Location ### get_event_obj_event_location_list() ###
# Updated 2021-12-13
@router.get('/event/{event_id}/event/location/list', response_model=Resp_Body_Base)
async def get_event_obj_event_location_list(
event_id: str = Path(min_length=11, max_length=22),
enabled: str = 'enabled',
hidden: str = 'not_hidden',
limit: int = 500,
inc_event_file_list: bool = False,
inc_event_session_list: bool = False,
inc_file_count: bool = False,
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
response: Response = Response,
):
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
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)
# Updated 2021-07-28
if event_location_rec_list_result := get_event_location_rec_list(
event_id = event_id,
enabled = enabled,
hidden = hidden,
limit = limit,
):
event_location_result_list = []
for event_location_rec in event_location_rec_list_result:
if load_event_location_result := load_event_location_obj(
event_location_id = event_location_rec.get('event_location_id', None),
limit = limit,
by_alias = by_alias,
exclude_unset = exclude_unset,
# model_as_dict = model_as_dict,
enabled = enabled,
inc_event_file_list = inc_event_file_list,
inc_event_session_list = inc_event_session_list,
inc_file_count = inc_file_count,
):
event_location_result_list.append(load_event_location_result)
else:
event_location_result_list.append(None)
response_data = event_location_result_list
elif isinstance(event_location_rec_list_result, list) or event_location_rec_list_result is None: # Empty list or 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
return mk_resp(data=response_data, response=response)
# ### END ### API Event Location ### get_event_obj_event_location_list() ###
# ### BEGIN ### API Event Location ### delete_event_location_obj() ###
# Updated 2022-09-23
@router.delete('/event/location/{obj_id}', response_model=Resp_Body_Base)
async def delete_event_location_obj(
obj_id: str = Path(min_length=11, max_length=22),
commons: Common_Route_Params = Depends(common_route_params),
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'event_location'
result = delete_obj_template(
obj_type=obj_type,
obj_id=obj_id,
)
return result
# ### END ### API Event Location ### delete_event_location_obj() ###