Files
OSIT-AE-API-FastAPI/app/routers/membership.py
2021-03-17 19:30:13 +00:00

205 lines
7.2 KiB
Python

import datetime
#from datetime import datetime, time, timedelta
from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, status
from pydantic import BaseModel, EmailStr, Field
from typing import Dict, List, Optional, Set, Union
from ..lib_general import *
from ..log import *
from app.config import settings
from app.db_sql import *
from .api_crud import delete_obj_template, get_obj_template, get_obj_li_template, patch_obj_template, post_obj_template
from ..models.membership_model import Membership_Base
from ..models.membership_methods import load_membership_obj
from ..models.response_model import *
router = APIRouter()
@router.post('', response_model=Resp_Body_Base)
async def post_membership_obj(
obj: Membership_Base,
x_account_id: str = Header(...),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
result = post_obj_template(
obj_type=obj_type,
data=obj_data_dict,
return_obj=True,
by_alias=True,
exclude_unset=True,
)
return result
@router.patch('/{obj_id}', response_model=Resp_Body_Base)
async def patch_membership_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
obj: Membership_Base = None,
x_account_id: Optional[str] = Header(..., ),
return_obj: Optional[bool] = True,
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership'
obj_data_dict = obj.dict(by_alias=False, exclude_unset=True)
obj_data_dict['id'] = redis_lookup_id_random(record_id_random=obj_id, table_name=obj_type)
obj_data_dict['id_random'] = obj_id
result = patch_obj_template(
obj_type=obj_type,
data=obj_data_dict,
obj_id=obj_id,
return_obj=True,
by_alias=True,
exclude_unset=True,
)
return result
@router.get('/list', response_model=Resp_Body_Base)
async def get_membership_obj_li(
for_obj_type: Optional[str] = Query(None, min_length=2, max_length=50),
for_obj_id: Optional[str] = Query(None, min_length=1, max_length=22),
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership'
result = get_obj_li_template(
obj_type=obj_type,
for_obj_type=for_obj_type,
for_obj_id=for_obj_id,
by_alias=True,
exclude_unset=True,
)
return result
# Look up is only for account, person, or user records
@router.get('/lookup', response_model=Resp_Body_Base)
async def lookup_membership_obj(
for_obj_id: Union[int,str],
for_obj_type: str = Query(..., min_length=2, max_length=50),
x_account_id: str = Header(...),
inc_membership_profile: bool = True,
inc_membership_cfg: bool = True,
inc_extended_profile: bool = True,
by_alias: bool = True,
exclude_unset: bool = True,
):
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership'
base_name = Membership_Base
if for_obj_id := redis_lookup_id_random(record_id_random=for_obj_id, table_name=for_obj_type): pass
else: return mk_resp(data=False, status_code=404) # Not Found
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
data = {}
as_list = False
if for_obj_type == 'account' and for_obj_id:
data['account_id'] = for_obj_id
sql_where_for_obj_type = """`membership`.account_id = :account_id"""
sql_limit = ''
as_list = True
elif for_obj_type == 'person' and for_obj_id:
data['person_id'] = for_obj_id
sql_where_for_obj_type = """`membership`.person_id = :person_id"""
sql_limit = 'LIMIT 1'
elif for_obj_type == 'user' and for_obj_id:
data['user_id'] = for_obj_id
sql_where_for_obj_type = """`membership`.user_id = :user_id"""
sql_limit = 'LIMIT 1'
else:
log.debug(f'Object type={for_obj_type}; Object ID={for_obj_id}')
return mk_resp(data=False, status_code=400) # Bad Request
sql = f"""
SELECT id AS 'membership_id', id_random AS 'membership_id_random'
FROM `membership` AS `membership`
WHERE {sql_where_for_obj_type}
{sql_limit}
"""
# This will return a list if selecting by account ID
membership_obj_result = sql_select(data=data, sql=sql, as_list=as_list)
if isinstance(membership_obj_result, dict):
membership_id = membership_obj_result.get('membership_id', None)
membership_obj = load_membership_obj(
membership_id=membership_id,
inc_membership_profile=inc_membership_profile,
inc_membership_cfg=inc_membership_cfg,
inc_extended_profile=inc_extended_profile
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
data = membership_obj
elif isinstance(membership_obj_result, list):
membership_obj_li = []
for membership_obj in membership_obj_result:
membership_id = membership_obj.get('membership_id', None)
membership_obj_li.append(
load_membership_obj(
membership_id=membership_id,
inc_membership_profile=inc_membership_profile,
inc_membership_cfg=inc_membership_cfg,
inc_extended_profile=inc_extended_profile
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
)
data = membership_obj_li
else:
log.debug(membership_obj_result)
return mk_resp(data=None, status_code=404) # Not Found
return mk_resp(data=data)
@router.get('/{obj_id}', response_model=Resp_Body_Base)
async def get_membership_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: str = Header(...),
by_alias: Optional[bool] = True,
exclude_unset: Optional[bool] = True,
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership'
result = get_obj_template(
obj_type=obj_type,
obj_id=obj_id,
by_alias=True,
exclude_unset=True,
)
return result
@router.delete('/{obj_id}', response_model=Resp_Body_Base)
async def delete_membership_obj(
obj_id: str = Query(..., min_length=1, max_length=22),
x_account_id: str = Header(...),
):
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
log.debug(locals())
obj_type = 'membership'
result = delete_obj_template(
obj_type=obj_type,
obj_id=obj_id,
)
return result