import datetime from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, 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 * 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_methods import create_event_person_obj, load_event_person_obj, update_event_person_obj from app.methods.person_methods import create_person_obj, load_person_obj from app.methods.user_methods import create_user_obj, load_user_obj, update_user_obj # from app.methods.user_load_methods import load_user_obj from app.models.event_person_models import Event_Person_New_Base, Event_Person_Base from app.models.person_models import Person_Base from app.models.response_models import * from app.models.user_models import User_New_Base, User_Base router = APIRouter() # ### BEGIN ### API Event Person Route ### post_event_person_new() ### # Initialize/create a new event person # Create a person record (with a contact record and an address for the contact record) # Create a user record # Create an event_person record with the new person and user IDs @router.post('/new', response_model=Resp_Body_Base) async def post_event_person_new( event_person_new_init: Event_Person_New_Base, x_account_id: str = Header(...), return_obj: bool = True, inc_event: bool = False, # Not ready yet. Placeholder. inc_event_badge: bool = False, # Not ready yet. Placeholder. inc_event_person_detail: bool = False, # Not ready yet. Placeholder. inc_event_registration: bool = False, # Not ready yet. Placeholder. inc_person: bool = False, inc_user: bool = False, by_alias: bool = True, exclude_unset: bool = True, ): log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) account_id_random = event_person_new_init.account_id_random event_id_random = event_person_new_init.event_id_random given_name = event_person_new_init.person_given_name family_name = event_person_new_init.person_family_name if full_name := event_person_new_init.person_full_name: pass elif given_name and family_name: full_name = f'{given_name} {family_name}' elif given_name: full_name = f'{given_name}' email = event_person_new_init.email if new_password := event_person_new_init.new_password: pass else: new_password = secrets.token_urlsafe(default_num_bytes) organization_name = event_person_new_init.organization_name # New person person_new = {} person_new['account_id_random'] = account_id_random person_new['given_name'] = given_name person_new['family_name'] = family_name person_new['full_name'] = full_name person_new['organization_name'] = organization_name # New person contact person_new['contact'] = {} person_new['contact']['account_id_random'] = account_id_random person_new['contact']['email'] = email person_new['contact']['name'] = full_name # New person contact address person_new['contact']['address'] = {} person_new['contact']['address']['account_id_random'] = account_id_random person_new['contact']['address']['name'] = full_name person_obj_new = Person_Base(**person_new) log.debug(person_obj_new) create_person_obj_result = create_person_obj(person_obj_new=person_obj_new) if isinstance(create_person_obj_result, int): person_id = create_person_obj_result person_obj = load_person_obj( person_id=person_id, inc_contact=True, inc_address=True, inc_organization=True ) log.debug(person_obj) else: log.debug('A new person was not created') return mk_resp(data=False) # New user user_new = {} user_new['account_id_random'] = account_id_random user_new['name'] = full_name user_new['username'] = email user_new['email'] = email user_new['new_password'] = new_password user_new['contact_id_random'] = person_obj.contact.id_random user_new['person_id_random'] = person_obj.id_random user_obj_new = User_New_Base(**user_new) log.debug(user_obj_new) create_user_obj_result = create_user_obj(user_obj_new=user_obj_new) if isinstance(create_user_obj_result, bool): log.debug('Returning False since multiple users were found with the same username.') return mk_resp(data=False) elif isinstance(create_user_obj_result, int): user_id = create_user_obj_result user_obj = load_user_obj(user_id=user_id) # Not including roles, contact, or organization log.debug(user_obj) else: log.debug('A new user was not created') return mk_resp(data=False) # New event person event_person_new = {} event_person_new['account_id_random'] = account_id_random event_person_new['event_id_random'] = event_id_random event_person_new['person_id_random'] = person_obj.id_random event_person_new['user_id_random'] = user_obj.id_random event_person_obj_new = Event_Person_Base(**event_person_new) log.debug(event_person_obj_new) event_person_obj_result = create_event_person_obj(event_person_obj_new=event_person_obj_new) if isinstance(event_person_obj_result, bool): log.debug('Returning False something is not right.') return mk_resp(data=False) elif isinstance(event_person_obj_result, int): event_person_id = event_person_obj_result event_person_obj = load_event_person_obj( event_person_id=event_person_id, # inc_event=inc_event, # Not ready yet. Placeholder. inc_event_badge=inc_event_badge, # Not ready yet. Placeholder. # inc_event_person_detail=inc_event_person_detail, # Not ready yet. Placeholder. inc_event_registration=inc_event_registration, # Not ready yet. Placeholder. inc_person=False, # Already loaded above inc_user=False, # Already loaded above ) log.debug(event_person_id) log.debug(event_person_obj) event_person_obj.person = person_obj event_person_obj.user = user_obj log.debug(event_person_obj) event_person_dict = event_person_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) pass else: log.debug('A new event_person was not created') return mk_resp(data=False) return mk_resp(data=event_person_dict) #return mk_resp(data=event_person_obj) # ### BEGIN ### API Event Person Route ### post_event_person_new() ### # ### BEGIN ### API Event Person ### patch_event_person_json() ### @router.patch('/{event_person_id}/json', response_model=Resp_Body_Base) async def patch_event_person_json( event_person_obj: Event_Person_Base, event_person_id: str = Query(..., min_length=1, max_length=22), create_missing_obj: bool = False, x_account_id: Optional[str] = Header(..., ), return_obj: Optional[bool] = True, by_alias: Optional[bool] = True, include: Optional[list] = [], exclude: Optional[list] = [], exclude_unset: Optional[bool] = True, exclude_none: Optional[bool] = True, ): 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) if event_person_obj_up_result := update_event_person_obj( event_person_id=event_person_id, event_person_obj_up=event_person_obj, create_missing_obj=create_missing_obj, ): log.debug(event_person_obj_up_result) if return_obj: event_person_obj = load_event_person_obj(event_person_id=event_person_id) event_person_dict = event_person_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) return mk_resp(data=event_person_dict) else: return mk_resp(data=event_person_obj_up_result) else: return mk_resp(data=False, status_code=400) # Bad Request # ### END ### API Event Person ### patch_event_person_json() ### # ### BEGIN ### API Event Person ### get_event_person_obj() ### # Working well as of 2021-06-04. Using as a template for other routes. @router.get('/{event_person_id}', response_model=Resp_Body_Base) async def get_event_person_obj( event_person_id: str = Query(..., min_length=1, max_length=22), enabled: str = 'enabled', # For now this covers any included objects or object lists limit: int = 500, # For now this covers any included objects or object lists inc_address: bool = False, # Under contact inc_contact: bool = False, # Under person inc_event_abstract_list: bool = False, inc_event_badge: bool = False, #inc_event_device_list: bool = False, #inc_event_exhibit_list: bool = False, inc_event_file_list: bool = False, #inc_event_location_list: bool = False, #inc_event_person_list: bool = False, inc_event_presentation_list: bool = False, #inc_event_presenter_list: bool = False, inc_event_registration: bool = False, #inc_event_track: bool = False, inc_person: bool = False, inc_user: bool = False, x_account_id: str = Header(...), by_alias: Optional[bool] = True, exclude_unset: Optional[bool] = True, ): log.setLevel(logging.DEBUG) # 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) if event_person_obj := load_event_person_obj( event_person_id=event_person_id, enabled=enabled, limit=limit, inc_address=inc_address, inc_contact=inc_contact, inc_event_abstract_list=inc_event_abstract_list, inc_event_badge=inc_event_badge, #inc_event_device_list=inc_event_device_list, #inc_event_exhibit_list=inc_event_exhibit_list, inc_event_file_list=inc_event_file_list, #inc_event_location=inc_event_location, #inc_event_person_list=inc_event_person_list, inc_event_presentation_list=inc_event_presentation_list, #inc_event_presenter_list=inc_event_presenter_list, inc_event_registration=inc_event_registration, #inc_event_track=inc_event_track, inc_person=inc_person, inc_user=inc_user, ): # event_dict = event_person_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) pass else: return mk_resp(data=False, status_code=400) # Bad Request return mk_resp(data=event_person_obj) # ### END ### API Event ### get_event_person_obj() ###