From bcec34670d2327c4cc22f7366acde18bd3d883d1 Mon Sep 17 00:00:00 2001 From: Scott Idem Date: Wed, 16 Mar 2022 10:43:57 -0400 Subject: [PATCH] Clean up of Cvent and IDAA person and membership related. The person.status only matters if it is Pending. --- app/db_sql.py | 3 +- app/methods/c_idaa_methods.py | 113 +++++++++++++++++++++++++++++++++ app/methods/e_cvent_methods.py | 10 ++- app/routers/c_idaa.py | 23 +++++-- app/routers/e_cvent.py | 10 ++- 5 files changed, 152 insertions(+), 7 deletions(-) create mode 100644 app/methods/c_idaa_methods.py diff --git a/app/db_sql.py b/app/db_sql.py index cd633ed..c815ca6 100644 --- a/app/db_sql.py +++ b/app/db_sql.py @@ -300,7 +300,8 @@ def sql_update( log.debug(dir(result_update)) log.debug(result_update.rowcount) # returns 1 on insert and 2 on update with change log.debug(result_update.lastrowid) # returns last row ID on insert and update with a change and returns 0 if nothing changed - return False + # NOTE: Returning None seems to make more sense. There were no errors. Just nothing needed to be updated. + return None # False was False until 2022-03-16 return False # ### END ### Core Help CRUD ### sql_update() ### diff --git a/app/methods/c_idaa_methods.py b/app/methods/c_idaa_methods.py new file mode 100644 index 0000000..eb46b89 --- /dev/null +++ b/app/methods/c_idaa_methods.py @@ -0,0 +1,113 @@ +import datetime, json, pprint, pytz, random, requests, secrets, string, time + +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, secure_hash_string, verify_secure_hash_string + + +# ### BEGIN ### API Client: IDAA Methods ### refresh_person_group() ### +# Updated 2022-03-16 +@logger_reset +def refresh_person_group( + person_id: int = None, + ): + log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + data = {} + sql_person_id = '' + if person_id: + data['person_id'] = person_id + sql_person_id = f'AND `person`.id = :person_id' + log.info(f'Updating membership group for Person ID: {person_id}') + else: + log.info('Updating membership group for all person records.') + + + sql = f""" + UPDATE person + INNER JOIN membership_person ON person.id = membership_person.person_id + SET person.enable = 1, person.group = 'pending_member' + WHERE person.account_id = 13 + AND membership_person.end_on >= NOW() + AND person.status = 'pending' + {sql_person_id}; + """ + if person_update_result := sql_update(sql=sql, data=data, log_lvl=logging.WARNING): + log.warning(f'Finished the SQL UPDATE of person table record(s) for pending members') + elif person_update_result is None: + log.warning(f'Finished the SQL UPDATE of person table record(s) for pending members, but no records needed to be updated') + else: + log.warning(f'The SQL UPDATE of person table record(s) failed for pending members') + log.debug(person_update_result) + + sql = f""" + UPDATE person + INNER JOIN membership_person ON person.id = membership_person.person_id + SET person.enable = 1, person.group = 'current_member' + WHERE person.account_id = 13 + AND membership_person.end_on >= NOW() + AND (person.status IS NULL OR person.status = '' OR person.status = 'approved' OR person.status = 'unknown') + {sql_person_id}; + """ + if person_update_result := sql_update(sql=sql, data=data, log_lvl=logging.WARNING): + log.warning(f'Finished the SQL UPDATE of person table record(s) for current members') + elif person_update_result is None: + log.warning(f'Finished the SQL UPDATE of person table record(s) for current members, but no records needed to be updated') + else: + log.warning(f'The SQL UPDATE of person table record(s) failed for current members') + log.debug(person_update_result) + + sql = f""" + UPDATE person + INNER JOIN membership_person ON person.id = membership_person.person_id + SET person.group = 'inactive_member' + WHERE person.account_id = 13 + AND membership_person.end_on < NOW() + AND membership_person.end_on >= DATE(NOW() - INTERVAL 4 WEEK) + {sql_person_id}; + """ + if person_update_result := sql_update(sql=sql, data=data, log_lvl=logging.WARNING): + log.warning(f'Finished the SQL UPDATE of person table record(s) for inactive members') + elif person_update_result is None: + log.warning(f'Finished the SQL UPDATE of person table record(s) for inactive members, but no records needed to be updated') + else: + log.warning(f'The SQL UPDATE of person table record(s) failed for inactive members') + log.debug(person_update_result) + + sql = f""" + UPDATE person + INNER JOIN membership_person ON person.id = membership_person.person_id + SET person.group = 'suspended_member' + WHERE person.account_id = 13 + AND membership_person.end_on < DATE(NOW() - INTERVAL 4 WEEK) + {sql_person_id}; + """ + if person_update_result := sql_update(sql=sql, data=data, log_lvl=logging.WARNING): + log.warning(f'Finished the SQL UPDATE of person table record(s) for suspended members') + elif person_update_result is None: + log.warning(f'Finished the SQL UPDATE of person table record(s) for suspended members, but no records needed to be updated') + else: + log.warning(f'The SQL UPDATE of person table record(s) failed for suspended members') + log.debug(person_update_result) + + sql = f""" + UPDATE person + LEFT JOIN membership_person ON person.id = membership_person.person_id + SET person.group = 'not_member' + WHERE person.account_id = 13 + AND membership_person.id IS NULL + {sql_person_id}; + """ + if person_update_result := sql_update(sql=sql, data=data, log_lvl=logging.WARNING): + log.warning(f'Finished the SQL UPDATE of person table record(s) for not members') + elif person_update_result is None: + log.warning(f'Finished the SQL UPDATE of person table record(s) for not members, but no records needed to be updated') + else: + log.warning(f'The SQL UPDATE of person table record(s) failed for not members') + log.debug(person_update_result) + + return True +# ### END ### API Client: IDAA Methods ### refresh_person_group() ### diff --git a/app/methods/e_cvent_methods.py b/app/methods/e_cvent_methods.py index e8ca151..91c4f96 100644 --- a/app/methods/e_cvent_methods.py +++ b/app/methods/e_cvent_methods.py @@ -7,6 +7,7 @@ from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, v from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update from app.lib_general import log, logging, logger_reset, secure_hash_string, verify_secure_hash_string +from app.methods.c_idaa_methods import refresh_person_group from app.methods.person_methods import create_person_kiss, get_person_rec_list, get_person_rec_w_external_id, load_person_obj, update_person_kiss from app.methods.membership_person_methods import create_membership_person_obj, update_membership_person_obj @@ -465,8 +466,12 @@ def modify_contact_id(contact_id: str, field_list: list=[], custom_field_id: str def create_update_aether_person( cvent_contact_id: str, cvent_contact_obj: dict, + account_id: str, - person_id: str=None, + person_id: str = None, + + idaa_refresh_person_group: bool = False, + log_lvl: int = logging.INFO, # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL ): log.setLevel(log_lvl) @@ -783,6 +788,9 @@ def create_update_aether_person( person_data['membership_person'] = membership_person_data log.debug(json.dumps(person_data, indent=2, default=str)) + if idaa_refresh_person_group: + refresh_person_group(person_id=person_id) + # person_obj = load_person_obj(person_id=person_id, inc_address=True, inc_contact=True, inc_membership_person=True, inc_membership_person_type=True, inc_user=True) # log.debug(person_obj) diff --git a/app/routers/c_idaa.py b/app/routers/c_idaa.py index dd6bf45..4af8ee5 100644 --- a/app/routers/c_idaa.py +++ b/app/routers/c_idaa.py @@ -9,21 +9,36 @@ from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, 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.c_idaa_methods import refresh_person_group + from app.models.response_models import Resp_Body_Base, mk_resp router = APIRouter() -# ### BEGIN ### API Client: IDAA ### refresh_membership_status() ### -# Updated 2022-02-01 +# ### BEGIN ### API Client: IDAA ### r_refresh_membership_status() ### +# Updated 2022-03-16 @router.get('/refresh_membership_status', response_model=Resp_Body_Base) -async def refresh_membership_status( +async def r_refresh_membership_status( + person_id: str = Query(None, min_length=11, max_length=22), + commons: Common_Route_Params = Depends(common_route_params), ): log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL log.debug(locals()) + if person_id := redis_lookup_id_random(record_id_random=person_id, table_name='person'): pass + elif person_id is None: pass + else: return mk_resp(data=None, status_code=404, response=commons.response) # Not Found + + if refresh_person_group_result := refresh_person_group(person_id=person_id): + return mk_resp(data=True, status_message='Updated person records with current membership status group.', response=commons.response) + else: + return mk_resp(data=True, status_code=400, status_message='Person records were not updated with the current membership status group.', response=commons.response) # Bad Request + + # NOTE: Everything below is old + # sql = f""" # UPDATE user # INNER JOIN person ON user.id = person.user_id @@ -170,4 +185,4 @@ async def refresh_membership_status( log.warning(f'The SQL UPDATE of person table records failed for not members') return mk_resp(data=True, status_message='Updated person and user records with current membership status', response=commons.response) -# ### END ### API Client: IDAA ### refresh_membership_status() ### +# ### END ### API Client: IDAA ### r_refresh_membership_status() ### diff --git a/app/routers/e_cvent.py b/app/routers/e_cvent.py index 30a0891..a18c3f8 100644 --- a/app/routers/e_cvent.py +++ b/app/routers/e_cvent.py @@ -200,6 +200,12 @@ async def get_person_w_email( email: str = Query(..., min_length=5, max_length=75), person_id: str = Query(None, min_length=11, max_length=22), + inc_address: bool = False, + inc_contact: bool = False, + inc_user: bool = False, + inc_user_role_list: bool = False, + return_obj: bool = True, + commons: Common_Route_Params = Depends(common_route_params), ): log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL @@ -230,6 +236,7 @@ async def get_person_w_email( cvent_contact_obj = cvent_person_contact_obj, account_id = account_id, person_id = person_id, + idaa_refresh_person_group = True, ): # person_obj = create_update_aether_person_result person_id = create_update_aether_person_result @@ -271,7 +278,7 @@ async def get_person_w_external_id( inc_contact: bool = False, inc_user: bool = False, inc_user_role_list: bool = False, - return_obj: Optional[bool] = True, + return_obj: bool = True, commons: Common_Route_Params = Depends(common_route_params), ): @@ -302,6 +309,7 @@ async def get_person_w_external_id( cvent_contact_obj = cvent_person_contact_obj, account_id = account_id, person_id = person_id, + idaa_refresh_person_group = True, ): # person_obj = create_update_aether_person_result person_id = create_update_aether_person_result