159 lines
7.1 KiB
Python
159 lines
7.1 KiB
Python
import datetime, json, pytz, random, secrets, string, time
|
|
from fastapi import APIRouter, Body, Depends, Header, HTTPException, 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.models.response_models import Resp_Body_Base, mk_resp
|
|
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
# ### BEGIN ### API Client: IDAA ### refresh_membership_status() ###
|
|
# Updated 2022-02-01
|
|
@router.get('/refresh_membership_status', response_model=Resp_Body_Base)
|
|
async def refresh_membership_status(
|
|
commons: Common_Route_Params = Depends(common_route_params),
|
|
):
|
|
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
|
log.debug(locals())
|
|
|
|
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 = '');
|
|
"""
|
|
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.external_sys_id IS NOT NULL AND person.external_sys_id != '');
|
|
"""
|
|
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 = '');
|
|
"""
|
|
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.external_sys_id IS NOT NULL AND person.external_sys_id != '');
|
|
"""
|
|
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 ### refresh_membership_status() ###
|