From 57b3b358ad87be82dd84ba116e6a1a71d5530d7f Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Mon, 14 Feb 2022 17:27:26 -0500 Subject: [PATCH] Work on event person tracking for exhibitors --- app/main.py | 2 +- app/models/common_field_schema.py | 1 + app/routers/api_crud.py | 2 + app/routers/event_exhibit_tracking.py | 186 ++++++++++++++++++++++++++ app/routers/event_person_tracking.py | 3 +- 5 files changed, 191 insertions(+), 3 deletions(-) create mode 100644 app/routers/event_exhibit_tracking.py diff --git a/app/main.py b/app/main.py index c7ae889..414bc96 100644 --- a/app/main.py +++ b/app/main.py @@ -18,7 +18,7 @@ from . import config from app.log import log, logging # Import the routers here first: -from app.routers import api_crud, api, importing, account, activity_log, address, archive, archive_content, contact, cont_edu_cert, cont_edu_cert_person, event, event_badge, event_badge_template, event_exhibit, event_file, event_importing, event_location, event_person, event_person_detail, event_person_tracking, event_presentation, event_presenter, event_registration, event_session, flask_cfg, hosted_file, journal, journal_entry, log_client_viewing, lookup, membership_cfg, membership_group, membership_person_group, membership_person, membership_person_profile, membership_type, membership_person_type, order, order_v3, order_line, order_cart, organization, page, person, person_user, post, post_comment, product, site, site_domain, user, websockets, e_cvent, c_idaa #, e_impexium +from app.routers import api_crud, api, importing, account, activity_log, address, archive, archive_content, contact, cont_edu_cert, cont_edu_cert_person, event, event_badge, event_badge_template, event_exhibit, event_exhibit_tracking, event_file, event_importing, event_location, event_person, event_person_detail, event_person_tracking, event_presentation, event_presenter, event_registration, event_session, flask_cfg, hosted_file, journal, journal_entry, log_client_viewing, lookup, membership_cfg, membership_group, membership_person_group, membership_person, membership_person_profile, membership_type, membership_person_type, order, order_v3, order_line, order_cart, organization, page, person, person_user, post, post_comment, product, site, site_domain, user, websockets, e_cvent, c_idaa #, e_impexium from app.db_sql import db diff --git a/app/models/common_field_schema.py b/app/models/common_field_schema.py index 501119f..81ea072 100644 --- a/app/models/common_field_schema.py +++ b/app/models/common_field_schema.py @@ -32,6 +32,7 @@ base_fields['contact_id_random'] = xxx_id_random_field_schema base_fields['cont_edu_cert_id_random'] = xxx_id_random_field_schema base_fields['cont_edu_cert_person_id_random'] = xxx_id_random_field_schema base_fields['event_exhibit_id_random'] = xxx_id_random_field_schema +base_fields['event_exhibit_tracking_id_random'] = xxx_id_random_field_schema base_fields['event_file_id_random'] = xxx_id_random_field_schema base_fields['event_id_random'] = xxx_id_random_field_schema base_fields['event_abstract_id_random'] = xxx_id_random_field_schema diff --git a/app/routers/api_crud.py b/app/routers/api_crud.py index 2c16f1c..dbd8db0 100644 --- a/app/routers/api_crud.py +++ b/app/routers/api_crud.py @@ -23,6 +23,7 @@ from app.models.event_models import * from app.models.event_abstract_models import * from app.models.event_badge_models import * from app.models.event_exhibit_models import * +from app.models.event_exhibit_tracking_models import * from app.models.event_file_models import * from app.models.event_location_models import * from app.models.event_person_models import * @@ -80,6 +81,7 @@ obj_type_li['event_badge'] = {'table_name': 'event_badge', 'base_name': Event_Ba #obj_type_li['event_badge_template'] = {'table_name': 'event_badge_template', 'base_name': Event_Badge_Template_Base} #obj_type_li['event_device'] = {'table_name': 'event_device', 'base_name': Event_Device_Base} obj_type_li['event_exhibit'] = {'table_name': 'v_event_exhibit', 'base_name': Event_Exhibit_Base} # NOTE check view name: *_detail? +obj_type_li['event_exhibit_tracking'] = {'table_name': 'v_event_exhibit_tracking', 'base_name': Event_Exhibit_Tracking_Base} obj_type_li['event_file'] = {'table_name': 'v_event_file', 'base_name': Event_File_Base} # Should this eventually be changed to event_hosted_file obj_type_li['event_location'] = {'table_name': 'v_event_location', 'base_name': Event_Location_Base} obj_type_li['event_person'] = {'table_name': 'v_event_person', 'base_name': Event_Person_Base} diff --git a/app/routers/event_exhibit_tracking.py b/app/routers/event_exhibit_tracking.py new file mode 100644 index 0000000..6260f66 --- /dev/null +++ b/app/routers/event_exhibit_tracking.py @@ -0,0 +1,186 @@ +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 get_event_exhibit_tracking_rec_list, load_event_exhibit_tracking_obj + +from app.models.event_exhibit_tracking_models import Event_Exhibit_Tracking_Base +from app.models.response_models import * + + +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, + 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_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 \ No newline at end of file diff --git a/app/routers/event_person_tracking.py b/app/routers/event_person_tracking.py index afe1457..29bd30b 100644 --- a/app/routers/event_person_tracking.py +++ b/app/routers/event_person_tracking.py @@ -5,9 +5,8 @@ from pydantic import BaseModel, EmailStr, Field from typing import Dict, List, Optional, Set, Union from app.lib_general import log, logging -#from ..log import * from app.config import settings -from app.db_sql import * +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