import datetime, json, pytz, random, secrets, string, time from fastapi import APIRouter, Body, Depends, Header, HTTPException, Path, Query, Response, status from pydantic import BaseModel, EmailStr, Field from typing import Dict, List, Optional, Set, Union from app.lib_general import log, logging, secure_hash_string, verify_secure_hash_string, common_route_params, Common_Route_Params from app.config import settings from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, redis_lookup_id_random 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 ### r_refresh_membership_status() ### # Updated 2022-03-16 @router.get('/refresh_membership_status', response_model=Resp_Body_Base) 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 # INNER JOIN membership_person ON person.id = membership_person.person_id # SET user.email_verified = 1, user.enable = 1, user.enable_from = membership_person.start_on, user.enable_to = membership_person.end_on, user.verified = 1, user.group = 'pending_member' # WHERE user.account_id = 13 AND membership_person.end_on >= NOW() # AND (person.external_sys_id IS NULL OR person.external_sys_id = ''); # """ sql = f""" UPDATE user INNER JOIN person ON user.id = person.user_id INNER JOIN membership_person ON person.id = membership_person.person_id SET user.email_verified = 1, user.enable = 1, user.enable_from = membership_person.start_on, user.enable_to = membership_person.end_on, user.verified = 1, user.group = 'pending_member' WHERE user.account_id = 13 AND membership_person.end_on >= NOW() AND person.status = 'pending'; """ if user_update_result := sql_update(sql=sql): # Pull out IDs of existing person record log.debug(user_update_result) else: log.warning(f'The SQL UPDATE of user table records failed for pending members') sql = f""" UPDATE user INNER JOIN person ON user.id = person.user_id INNER JOIN membership_person ON person.id = membership_person.person_id SET user.email_verified = 1, user.enable = 1, user.enable_from = membership_person.start_on, user.enable_to = membership_person.end_on, user.verified = 1, user.group = 'current_member' WHERE user.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'); """ if user_update_result := sql_update(sql=sql): # Pull out IDs of existing person record log.debug(user_update_result) else: log.warning(f'The SQL UPDATE of user table records failed for current members') sql = f""" UPDATE user INNER JOIN person ON user.id = person.user_id INNER JOIN membership_person ON person.id = membership_person.person_id SET user.group = 'inactive_member' WHERE user.account_id = 13 AND membership_person.end_on < NOW() AND membership_person.end_on >= DATE(NOW() - INTERVAL 4 WEEK); """ if user_update_result := sql_update(sql=sql): # Pull out IDs of existing person record log.debug(user_update_result) else: log.warning(f'The SQL UPDATE of user table records failed for inactive members') sql = f""" UPDATE user INNER JOIN person ON user.id = person.user_id INNER JOIN membership_person ON person.id = membership_person.person_id SET user.group = 'suspended_member' WHERE user.account_id = 13 AND membership_person.end_on < DATE(NOW() - INTERVAL 4 WEEK); """ if user_update_result := sql_update(sql=sql): # Pull out IDs of existing person record log.debug(user_update_result) else: log.warning(f'The SQL UPDATE of user table records failed for suspended members') sql = f""" UPDATE user INNER JOIN person ON user.id = person.user_id LEFT JOIN membership_person ON person.id = membership_person.person_id SET user.group = 'not_member' WHERE user.account_id = 13 AND membership_person.id IS NULL; """ if user_update_result := sql_update(sql=sql): # Pull out IDs of existing person record log.debug(user_update_result) else: log.warning(f'The SQL UPDATE of user table records failed for not members') # 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.external_sys_id IS NULL OR person.external_sys_id = ''); # """ 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'; """ if person_update_result := sql_update(sql=sql): # Pull out IDs of existing person record log.debug(person_update_result) else: log.warning(f'The SQL UPDATE of person table records failed for current members') 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'); """ if person_update_result := sql_update(sql=sql): # Pull out IDs of existing person record log.debug(person_update_result) else: log.warning(f'The SQL UPDATE of person table records failed for current members') 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); """ if person_update_result := sql_update(sql=sql): # Pull out IDs of existing person record log.debug(person_update_result) else: log.warning(f'The SQL UPDATE of person table records failed for inactive members') 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); """ if person_update_result := sql_update(sql=sql): # Pull out IDs of existing person record log.debug(person_update_result) else: log.warning(f'The SQL UPDATE of person table records failed for suspended members') 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; """ if person_update_result := sql_update(sql=sql): # Pull out IDs of existing person record log.debug(person_update_result) else: 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 ### r_refresh_membership_status() ###