import datetime #from datetime import datetime, time, timedelta 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 ..log import * from app.config import settings from app.db_sql import * from .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 from app.methods.person_methods import create_person_obj, load_person_obj from app.methods.user_methods import create_user_obj, 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() @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.WARNING) # 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) #return mk_resp(data=person_obj) # 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) #return mk_resp(data=user_obj) # 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) else: log.debug('A new event_person was not created') return mk_resp(data=False) log.debug(event_person_obj) return mk_resp(data=event_person_obj) # ### 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_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_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_poc_event_person=inc_poc_event_person, 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() ###