189 lines
8.8 KiB
Python
189 lines
8.8 KiB
Python
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() ###
|