From 2fb5acd485b7405bf91fce8e93a0ce26ce67c872 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Sat, 16 Apr 2022 14:01:06 -0400 Subject: [PATCH] Work on ISHLT related --- app/methods/event_badge_methods.py | 93 +++++++++++++++++++++++++++++- app/methods/user_methods.py | 2 +- app/routers/event_badge.py | 25 +++++++- 3 files changed, 116 insertions(+), 4 deletions(-) diff --git a/app/methods/event_badge_methods.py b/app/methods/event_badge_methods.py index a9a0520..fbf07db 100644 --- a/app/methods/event_badge_methods.py +++ b/app/methods/event_badge_methods.py @@ -5,8 +5,11 @@ from typing import Dict, List, Optional, Set, Union from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update -from app.lib_general import log, logging, logger_reset +from app.lib_general import log, logging, logger_reset, send_email +# from app.methods.account_cfg_methods import load_account_cfg_obj +# from app.methods.event_methods import load_event_obj +# from app.methods.event_badge_methods import load_event_badge_obj from app.methods.event_badge_template_methods import load_event_badge_template_obj from app.models.event_badge_models import Event_Badge_Base, Event_Badge_Basic_Base @@ -221,3 +224,91 @@ def create_update_event_badge_obj_v4( log.debug(f'Returning the Event Badge ID: {event_badge_id}') return event_badge_id # ### END ### API Event Badge Methods ### create_update_event_badge_obj_v4() ### + + +# ### BEGIN ### Event Badge Methods ### email_event_badge_review_url() ### +# This emails the actual one time use sign in URL for a user. +# Updated 2021-12-02 +def email_event_badge_review_url( + event_badge_id: int|str, + root_url: str, + ): + 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 False + + if event_badge_id := redis_lookup_id_random(record_id_random=event_badge_id, table_name='event_badge'): pass + else: return False + + from app.methods.event_badge_methods import load_event_badge_obj + if event_badge_obj := load_event_badge_obj( + event_badge_id = event_badge_id, + ): + log.info('Event Badge object loaded') + else: return False + log.debug(event_badge_obj) + + event_id = event_badge_obj.event_id + event_badge_id_random = event_badge_obj.id_random # Not event_badge_id_random + + from app.methods.event_methods import load_event_obj + if event_obj := load_event_obj( + event_id = event_id, + ): + log.info('Event object loaded') + else: return False + log.debug(event_obj) + + account_id = event_obj.account_id + event_name = event_obj.name + + from app.methods.account_cfg_methods import load_account_cfg_obj + if account_cfg := load_account_cfg_obj( + account_id = account_id, + ): + log.info('Account config loaded') + else: return False + log.debug(account_cfg) + + from_email = account_cfg.default_no_reply_email + from_name = account_cfg.default_no_reply_name + + to_name = f'{event_badge_obj.given_name} {event_badge_obj.family_name}' + to_email = event_badge_obj.email + + bcc_email = account_cfg.confirm_email + bcc_name = account_cfg.confirm_name + + # help_tech_email = account_cfg.help_tech_email + # help_tech_name = account_cfg.help_tech_name + + account_short_name = account_cfg.account_short_name + + event_badge_review_url = f'{root_url}event/badge/{event_badge_id_random}/review_badge' + + subject = f'{event_name}: Event Badge Review Link ({event_badge_id_random})' + + body_html = f""" +

{to_name},

+ +

If you did not request this badge review link, please delete this email.

+ +

The link below will allow you to review your badge information and update some of the details if needed.

+ +

Click to Review Badge

+ +

Or copy and paste the link:
+ {event_badge_review_url}

+ +

Thank you!

+ """ + + if send_email(from_email=from_email, from_name=from_name, to_email=to_email, to_name=to_name, bcc_email=bcc_email, bcc_name=bcc_name, subject=subject, body_text=None, body_html=body_html): + log.info(f'An email with a badge review link was sent to {to_email}.') + return True + else: + log.info(f'An email with a badge review link was not sent to {to_email}.') + return False +# ### END ### Event Badge Methods ### email_event_badge_review_url() ### diff --git a/app/methods/user_methods.py b/app/methods/user_methods.py index 34e2aba..f702b00 100644 --- a/app/methods/user_methods.py +++ b/app/methods/user_methods.py @@ -710,4 +710,4 @@ def email_user_auth_key_url( else: log.info(f'An email with a one time use sign in link was not sent to {to_email}.') return False -# ### END ### User ### email_user_auth_key_url() ### +# ### END ### User Methods ### email_user_auth_key_url() ### diff --git a/app/routers/event_badge.py b/app/routers/event_badge.py index 1631233..bd5d305 100644 --- a/app/routers/event_badge.py +++ b/app/routers/event_badge.py @@ -10,7 +10,7 @@ from app.db_sql import sql_enable_part, sql_insert, sql_update, sql_insert_or_up 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_badge_methods import get_event_badge_rec_list, load_event_badge_obj -from app.methods.event_badge_methods import load_event_badge_obj +from app.methods.event_badge_methods import email_event_badge_review_url, load_event_badge_obj from app.models.event_badge_models import Event_Badge_Base from app.models.response_models import Resp_Body_Base, mk_resp @@ -56,7 +56,7 @@ async def patch_event_badge_obj( log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) - time.sleep(2) + # time.sleep(2) obj_type = 'event_badge' obj_data_dict = obj.dict(by_alias=False, exclude_unset=True) @@ -330,6 +330,27 @@ async def search_event_badge_obj_li( # ### END ### API Event Badge ### search_event_badge_obj_li() ### +# ### BEGIN ### API Event Badge ### event_badge_obj_email_review() ### +# Updated 2022-04-16 +@router.get('/event/badge/{event_badge_id}/email_review', response_model=Resp_Body_Base) +async def event_badge_obj_email_review( + event_badge_id: str = Query(..., min_length=11, max_length=22), + root_url: Optional[str] = Query(None, min_length=10, max_length=100), # Absolute min = 7 + # to_email: str = Query(..., min_length=5, max_length=100), + # to_name: str = Query(..., min_length=2, max_length=75), + + commons: Common_Route_Params = Depends(common_route_params), + ): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + if email_event_badge_review_url(event_badge_id=event_badge_id, root_url=root_url): + return mk_resp(data=True, response=commons.response) + else: + return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request +# ### END ### API Event Badge ### event_badge_obj_email_review() ### + + # ### BEGIN ### API Event Badge ### get_event_badge_obj() ### # Updated 2022-02-15 @router.get('/event/badge/{event_badge_id}', response_model=Resp_Body_Base)