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 ..lib_general import * 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 ..models.event_person_model import Event_Person_New_Base, Event_Person_Base from ..models.event_person_methods import create_event_person_obj from ..models.person_model import Person_Base from ..models.person_methods import create_person_obj, load_person_obj from ..models.user_model import User_New_Base, User_Base from ..models.user_methods import create_user_obj, load_user_obj from ..models.response_model import * router = APIRouter() @router.post('/new', response_model=Resp_Body_Base) async def post_event_person_new( event_person_new: Event_Person_New_Base, x_account_id: str = Header(...), return_obj: Optional[bool] = True, by_alias: Optional[bool] = True, exclude_unset: Optional[bool] = True, ): log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) account_id_random = event_person_new.account_id_random event_id_random = event_person_new.event_id_random given_name = event_person_new.person_given_name family_name = event_person_new.person_family_name if full_name := event_person_new.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.email if new_password := event_person_new.new_password: pass else: new_password = secrets.token_urlsafe(default_num_bytes) organization_name = event_person_new.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 #person_new['contact_id_random'] = ? # 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 person_new['contact']['address'] = {} # 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 = create_event_person_obj(event_person_obj_new=event_person_obj_new) return_data = {} return_data['person'] = person_obj return_data['user'] = user_obj return_data['event_person'] = event_person_obj return mk_resp(data=return_data)