From 92b36e502e0753d4c28ae98b1763e0080d1f656f Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Wed, 7 Apr 2021 18:22:47 -0400 Subject: [PATCH] Working on user and person search by email --- app/main.py | 7 +++- app/routers/person.py | 2 +- app/routers/user_person.py | 69 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 app/routers/user_person.py diff --git a/app/main.py b/app/main.py index 497096c..5a6788a 100644 --- a/app/main.py +++ b/app/main.py @@ -18,7 +18,7 @@ from .lib_general import * from .log import * # Import the routers here first: -from .routers import api_crud, api, account, address, archive, archive_content, contact, event, event_exhibit, event_registration, event_session, flask_cfg, membership, order, order_cart, organization, page, person, post, post_comment, product, site, site_domain, user, websockets # , items, journals +from .routers import api_crud, api, account, address, archive, archive_content, contact, event, event_exhibit, event_registration, event_session, flask_cfg, membership, order, order_cart, organization, page, person, post, post_comment, product, site, site_domain, user, user_person, websockets # , items, journals from .db_sql import db @@ -238,6 +238,11 @@ app.include_router( #dependencies=[Depends(get_account_header)], #responses={404: {'description': 'Not found'}}, ) +app.include_router( + user_person.router, + prefix='/user_person', + tags=['User Person'], +) app.include_router( websockets.router, #prefix='/websocket', diff --git a/app/routers/person.py b/app/routers/person.py index b0b1acc..95a72bb 100644 --- a/app/routers/person.py +++ b/app/routers/person.py @@ -1,4 +1,4 @@ -import datetime +import datetime, pytz, time #from datetime import datetime, time, timedelta from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, status from pydantic import BaseModel, EmailStr, Field diff --git a/app/routers/user_person.py b/app/routers/user_person.py new file mode 100644 index 0000000..355a2ba --- /dev/null +++ b/app/routers/user_person.py @@ -0,0 +1,69 @@ +import datetime, pytz, time +#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.common_field_schema import default_num_bytes +from ..models.user_model import User_Base, User_New_Base, User_Out_Base +from ..models.user_methods import load_user_obj +from ..models.person_model import Person_Base +from ..models.person_methods import load_person_obj +from ..models.response_model import * + + +router = APIRouter() + + +# Look up a user and person with an email address for a client account +@router.get('/lookup_email', response_model=Resp_Body_Base) +async def lookup_email( + account_id: Union[int,str], + email: str = Query(..., min_length=2, max_length=50), + x_account_id: str = Header(...), + inc_roles: bool = False, + inc_contact: bool = False, + inc_organization: bool = False, + 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()) + + if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): + pass + else: + return mk_resp(data=False, status_code=404) # Not Found + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + + data = {} + data['account_id'] = account_id + data['email'] = email + log.debug(data) + + sql = f""" + SELECT DISTINCT account_id_random, user_id_random, person_id_random, contact_id_random, contact_address_id_random, user_username, user_name, user_email, person_given_name, person_family_name, person_full_name, contact_email + FROM + (SELECT account_id_random, user_id_random, person_id_random, contact_id_random, contact_address_id_random, user_username, user_name, user_email, person_given_name, person_family_name, person_full_name, contact_email + FROM v_link_user_person + WHERE v_link_user_person.account_id = :account_id AND v_link_user_person.user_email = :email + UNION + SELECT account_id_random, user_id_random, person_id_random, contact_id_random, contact_address_id_random, user_username, user_name, user_email, person_given_name, person_family_name, person_full_name, contact_email + FROM v_link_person_user + WHERE v_link_person_user.account_id = :account_id AND v_link_person_user.contact_email = :email) AS user_person_union + """ + log.debug(sql) + + user_person_obj_li_result = sql_select(data=data, sql=sql, as_list=True) + data = user_person_obj_li_result + + return mk_resp(data=data)