Working on user and person search by email

This commit is contained in:
Scott Idem
2021-04-07 18:22:47 -04:00
parent 59417c6f91
commit 92b36e502e
3 changed files with 76 additions and 2 deletions

View File

@@ -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',

View File

@@ -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

View File

@@ -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)