Router Registry Cleanup: Archive unreferenced legacy routes
- Moved 29 unreferenced legacy router files to app/routers/archive/ - Restored and registered 'websockets' router in registry.py (exempted from deprecation) - Cleaned up registry imports and verified application compilation.
This commit is contained in:
182
app/routers/archive/activity_log.py
Normal file
182
app/routers/archive/activity_log.py
Normal file
@@ -0,0 +1,182 @@
|
||||
import datetime
|
||||
#from datetime import datetime, time, timedelta
|
||||
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
|
||||
#from ..log import *
|
||||
from app.config import settings
|
||||
from app.db_sql import *
|
||||
|
||||
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.activity_log_methods import get_activity_log_rec_list, load_activity_log_obj
|
||||
|
||||
from app.models.activity_log_models import Activity_Log_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/activity_log', response_model=Resp_Body_Base)
|
||||
async def post_activity_log_obj(
|
||||
activity_log_obj: Activity_Log_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'activity_log'
|
||||
activity_log_obj_data_dict = activity_log_obj.dict(by_alias=False, exclude_unset=True)
|
||||
result = post_obj_template(
|
||||
obj_type = obj_type,
|
||||
data = activity_log_obj_data_dict,
|
||||
return_obj = True,
|
||||
by_alias = True,
|
||||
exclude_unset = True,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
@router.patch('/activity_log/{activity_log_id}', response_model=Resp_Body_Base)
|
||||
async def patch_activity_log_obj(
|
||||
activity_log_obj: Activity_Log_Base,
|
||||
activity_log_id: str = Path(..., min_length=1, max_length=22),
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'activity_log'
|
||||
activity_log_obj_data_dict = activity_log_obj.dict(by_alias=False, exclude_unset=True)
|
||||
activity_log_obj_data_dict['id'] = redis_lookup_id_random(record_id_random=activity_log_id, table_name=obj_type)
|
||||
activity_log_obj_data_dict['id_random'] = activity_log_id
|
||||
result = patch_obj_template(
|
||||
obj_type = obj_type,
|
||||
data = activity_log_obj_data_dict,
|
||||
obj_id = activity_log_id,
|
||||
return_obj = True,
|
||||
by_alias = True,
|
||||
exclude_unset = True,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
@router.get('/activity_log/list', response_model=Resp_Body_Base)
|
||||
async def get_activity_log_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,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'activity_log'
|
||||
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
|
||||
|
||||
|
||||
@router.get('/activity_log/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def get_activity_log_obj(
|
||||
obj_id: str = Path(min_length=1, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'activity_log'
|
||||
result = get_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
by_alias=True,
|
||||
exclude_unset=True,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
# ### BEGIN ### API Activity Log ### get_account_obj_activity_log_list() ###
|
||||
# Updated 2021-09-21
|
||||
@router.get('/account/{account_id}/activity_log/list', response_model=Resp_Body_Base)
|
||||
async def get_account_obj_activity_log_list(
|
||||
account_id: str = Path(min_length=11, max_length=22),
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
# Updated 2021-09-21
|
||||
if activity_log_rec_list_result := get_activity_log_rec_list(
|
||||
account_id = account_id,
|
||||
enabled = enabled,
|
||||
limit = limit,
|
||||
):
|
||||
activity_log_result_list = []
|
||||
for activity_log_rec in activity_log_rec_list_result:
|
||||
if load_activity_log_result := load_activity_log_obj(
|
||||
activity_log_id = activity_log_rec.get('activity_log_id', None),
|
||||
enabled = enabled,
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
activity_log_result_list.append(load_activity_log_result)
|
||||
else:
|
||||
activity_log_result_list.append(None)
|
||||
response_data = activity_log_result_list
|
||||
elif isinstance(activity_log_rec_list_result, list) or activity_log_rec_list_result is None: # Empty list or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=False, status_code=404, response=response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=response)
|
||||
# ### END ### API Activity Log ### get_account_obj_activity_log_list() ###
|
||||
|
||||
|
||||
@router.delete('/activity_log/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_activity_log_obj(
|
||||
obj_id: str = Path(min_length=1, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'activity_log'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
180
app/routers/archive/address.py
Normal file
180
app/routers/archive/address.py
Normal file
@@ -0,0 +1,180 @@
|
||||
import datetime
|
||||
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
|
||||
from app.config import settings
|
||||
from app.db_sql import *
|
||||
|
||||
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.address_methods import load_address_obj, update_address_obj
|
||||
|
||||
from app.models.address_models import Address_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('', response_model=Resp_Body_Base)
|
||||
async def post_address_obj(
|
||||
address_obj: Address_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
#include: Optional[list] = [],
|
||||
#exclude: Optional[list] = [],
|
||||
exclude_unset: Optional[bool] = True,
|
||||
exclude_none: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'address'
|
||||
obj_data_dict = address_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('/{address_obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_address_obj(
|
||||
address_obj: Address_Base,
|
||||
address_obj_id: str = Path(min_length=1, max_length=22),
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
address_obj_type = 'address'
|
||||
address_obj_data_dict = address_obj.dict(by_alias=False, exclude_unset=True)
|
||||
address_obj_data_dict['id'] = redis_lookup_id_random(record_id_random=address_obj_id, table_name=address_obj_type)
|
||||
address_obj_data_dict['id_random'] = address_obj_id
|
||||
result = patch_obj_template(
|
||||
obj_type=address_obj_type,
|
||||
data=address_obj_data_dict,
|
||||
obj_id=address_obj_id,
|
||||
return_obj=True,
|
||||
by_alias=True,
|
||||
exclude_unset=True,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
# ### BEGIN ### API Address ### patch_address_json() ###
|
||||
@router.patch('/{address_id}/json', response_model=Resp_Body_Base)
|
||||
async def patch_address_json(
|
||||
address_obj: Address_Base,
|
||||
address_id: str = Path(min_length=1, max_length=22),
|
||||
create_sub_obj: bool = False,
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
include: Optional[list] = [],
|
||||
exclude: Optional[list] = [],
|
||||
exclude_unset: Optional[bool] = True,
|
||||
exclude_none: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if address_id := redis_lookup_id_random(record_id_random=address_id, table_name='address'): pass
|
||||
else:
|
||||
return mk_resp(data=None, status_code=404)
|
||||
|
||||
if address_obj_up_result := update_address_obj(
|
||||
address_id=address_id,
|
||||
address_obj_up=address_obj,
|
||||
create_sub_obj=create_sub_obj,
|
||||
):
|
||||
|
||||
log.debug(address_obj_up_result)
|
||||
if return_obj:
|
||||
address_obj = load_address_obj(address_id=address_id)
|
||||
address_dict = address_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
return mk_resp(data=address_dict)
|
||||
else:
|
||||
return mk_resp(data=address_obj_up_result)
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
# ### END ### API Address ### patch_address_json() ###
|
||||
|
||||
|
||||
@router.get('/list', response_model=Resp_Body_Base)
|
||||
async def get_address_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,
|
||||
include: Optional[list] = [],
|
||||
exclude: Optional[list] = [],
|
||||
exclude_unset: Optional[bool] = True,
|
||||
exclude_none: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'address'
|
||||
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
|
||||
|
||||
|
||||
@router.get('/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def get_address_obj(
|
||||
obj_id: str = Path(min_length=1, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
include: Optional[list] = [],
|
||||
exclude: Optional[list] = [],
|
||||
exclude_unset: Optional[bool] = True,
|
||||
exclude_none: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'address'
|
||||
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_address_obj(
|
||||
obj_id: str = Path(min_length=1, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'address'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
246
app/routers/archive/agent_bridge.py
Normal file
246
app/routers/archive/agent_bridge.py
Normal file
@@ -0,0 +1,246 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
import os
|
||||
import platform
|
||||
import json
|
||||
import shutil
|
||||
from typing import Dict, Any, List, Optional
|
||||
from datetime import datetime
|
||||
|
||||
from app.lib_general_v3 import AccountContext, get_account_context
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
def is_admin(account: AccountContext):
|
||||
if account.auth_method == 'bypass':
|
||||
return True
|
||||
if getattr(account, "administrator", False) or getattr(account, "manager", False):
|
||||
return True
|
||||
return False
|
||||
|
||||
@router.get("/status", response_model=Resp_Body_Base, tags=["Agent Bridge"])
|
||||
async def get_container_status(
|
||||
account: AccountContext = Depends(get_account_context)
|
||||
):
|
||||
"""
|
||||
Returns diagnostic information about the container environment.
|
||||
Only accessible to administrators/managers via existing hierarchy or bypass.
|
||||
"""
|
||||
# Simple check for administrative access or bypass
|
||||
if not is_admin(account):
|
||||
raise HTTPException(status_code=403, detail="Administrative access required.")
|
||||
|
||||
boot_time = None
|
||||
try:
|
||||
import psutil
|
||||
boot_time = datetime.fromtimestamp(psutil.boot_time()).isoformat()
|
||||
except Exception as e:
|
||||
boot_time = f"Error: {str(e)}"
|
||||
|
||||
status_data = {
|
||||
"os": platform.system(),
|
||||
"release": platform.release(),
|
||||
"python_version": platform.python_version(),
|
||||
"hostname": platform.node(),
|
||||
"cpu_count": os.cpu_count(),
|
||||
"environment_vars": {k: v for k, v in os.environ.items() if not any(s in k.upper() for s in ["PASSWORD", "KEY", "SECRET", "AUTH", "TOKEN"])},
|
||||
"cwd": os.getcwd(),
|
||||
"container": os.path.exists('/.dockerenv'),
|
||||
"boot_time": boot_time
|
||||
}
|
||||
|
||||
return mk_resp(data=status_data)
|
||||
|
||||
@router.get("/system/usage", response_model=Resp_Body_Base, tags=["Agent Bridge"])
|
||||
async def get_system_usage(
|
||||
account: AccountContext = Depends(get_account_context)
|
||||
):
|
||||
"""
|
||||
Returns real-time CPU, Memory, and Disk usage.
|
||||
Only accessible to administrators/managers via existing hierarchy or bypass.
|
||||
"""
|
||||
if not is_admin(account):
|
||||
raise HTTPException(status_code=403, detail="Administrative access required.")
|
||||
|
||||
cpu_data = {"error": "psutil not available"}
|
||||
mem_data = {"error": "psutil not available"}
|
||||
|
||||
try:
|
||||
import psutil
|
||||
# CPU usage per core
|
||||
cpu_percent = psutil.cpu_percent(interval=0.1, percpu=True)
|
||||
cpu_data = {
|
||||
"percent_avg": sum(cpu_percent) / len(cpu_percent) if cpu_percent else 0,
|
||||
"percent_per_core": cpu_percent,
|
||||
"count": psutil.cpu_count(),
|
||||
"load_avg": os.getloadavg() if hasattr(os, 'getloadavg') else None
|
||||
}
|
||||
|
||||
# Memory usage
|
||||
mem = psutil.virtual_memory()
|
||||
mem_data = {
|
||||
"total": mem.total,
|
||||
"available": mem.available,
|
||||
"percent": mem.percent,
|
||||
"used": mem.used
|
||||
}
|
||||
except Exception as e:
|
||||
cpu_data = {"error": str(e)}
|
||||
mem_data = {"error": str(e)}
|
||||
|
||||
# Disk usage (root) - uses shutil which is standard lib
|
||||
disk_data = {}
|
||||
try:
|
||||
disk = shutil.disk_usage("/")
|
||||
disk_data = {
|
||||
"total": disk.total,
|
||||
"used": disk.used,
|
||||
"free": disk.free,
|
||||
"percent": (disk.used / disk.total) * 100 if disk.total else 0
|
||||
}
|
||||
except Exception as e:
|
||||
disk_data = {"error": str(e)}
|
||||
|
||||
usage_data = {
|
||||
"cpu": cpu_data,
|
||||
"memory": mem_data,
|
||||
"disk": disk_data
|
||||
}
|
||||
|
||||
return mk_resp(data=usage_data)
|
||||
|
||||
@router.get("/logs", response_model=Resp_Body_Base, tags=["Agent Bridge"])
|
||||
async def get_latest_logs(
|
||||
lines: int = 50,
|
||||
log_file: str = "aether_api.log",
|
||||
account: AccountContext = Depends(get_account_context)
|
||||
):
|
||||
"""
|
||||
Returns the last N lines of a specified log file.
|
||||
Only accessible to administrators/managers via existing hierarchy or bypass.
|
||||
"""
|
||||
if not is_admin(account):
|
||||
raise HTTPException(status_code=403, detail="Administrative access required.")
|
||||
|
||||
# Sanitize log_file to prevent directory traversal
|
||||
log_file = os.path.basename(log_file)
|
||||
from app.config import settings
|
||||
log_dir = os.path.dirname(settings.LOG_PATH.get('app', '/logs/aether_api.log'))
|
||||
log_path = os.path.join(log_dir, log_file)
|
||||
|
||||
if not os.path.exists(log_path):
|
||||
return mk_resp(data=False, status_message=f"Log file not found at {log_path}", status_code=404)
|
||||
|
||||
try:
|
||||
# Using tail if available for efficiency
|
||||
import subprocess
|
||||
result = subprocess.run(['tail', f'-n {lines}', log_path], capture_output=True, text=True)
|
||||
if result.returncode == 0:
|
||||
return mk_resp(data=result.stdout)
|
||||
else:
|
||||
raise Exception(result.stderr)
|
||||
except Exception as e:
|
||||
# Fallback to python read if tail fails
|
||||
try:
|
||||
with open(log_path, 'r') as f:
|
||||
log_lines = f.readlines()
|
||||
latest = log_lines[-lines:] if len(log_lines) > lines else log_lines
|
||||
return mk_resp(data="".join(latest))
|
||||
except Exception as inner_e:
|
||||
return mk_resp(data=False, status_message=f"Error reading logs: {str(e)} | {str(inner_e)}", status_code=500)
|
||||
|
||||
@router.get("/logs/list", response_model=Resp_Body_Base, tags=["Agent Bridge"])
|
||||
async def list_log_files(
|
||||
account: AccountContext = Depends(get_account_context)
|
||||
):
|
||||
"""
|
||||
Lists available log files in the log directory.
|
||||
Only accessible to administrators/managers via existing hierarchy or bypass.
|
||||
"""
|
||||
if not is_admin(account):
|
||||
raise HTTPException(status_code=403, detail="Administrative access required.")
|
||||
|
||||
from app.config import settings
|
||||
log_dir = os.path.dirname(settings.LOG_PATH.get('app', '/logs/aether_api.log'))
|
||||
|
||||
if not os.path.exists(log_dir):
|
||||
return mk_resp(data=[], status_message=f"Log directory not found at {log_dir}")
|
||||
|
||||
files = []
|
||||
for f in os.listdir(log_dir):
|
||||
path = os.path.join(log_dir, f)
|
||||
if os.path.isfile(path):
|
||||
stats = os.stat(path)
|
||||
files.append({
|
||||
"name": f,
|
||||
"size": stats.st_size,
|
||||
"modified": datetime.fromtimestamp(stats.st_mtime).isoformat()
|
||||
})
|
||||
|
||||
return mk_resp(data=files)
|
||||
|
||||
@router.get("/processes", response_model=Resp_Body_Base, tags=["Agent Bridge"])
|
||||
async def list_processes(
|
||||
limit: int = 10,
|
||||
sort_by: str = Query("cpu", enum=["cpu", "memory"]),
|
||||
account: AccountContext = Depends(get_account_context)
|
||||
):
|
||||
"""
|
||||
Lists top processes by CPU or Memory usage.
|
||||
Only accessible to administrators/managers via existing hierarchy or bypass.
|
||||
"""
|
||||
if not is_admin(account):
|
||||
raise HTTPException(status_code=403, detail="Administrative access required.")
|
||||
|
||||
procs = []
|
||||
try:
|
||||
import psutil
|
||||
for proc in psutil.process_iter(['pid', 'name', 'username', 'cpu_percent', 'memory_info']):
|
||||
try:
|
||||
pinfo = proc.info
|
||||
pinfo['memory_rss'] = pinfo['memory_info'].rss if pinfo.get('memory_info') else 0
|
||||
procs.append(pinfo)
|
||||
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
||||
pass
|
||||
except Exception as e:
|
||||
return mk_resp(data=[], status_message=f"Error listing processes: {str(e)}", status_code=500)
|
||||
|
||||
if sort_by == "cpu":
|
||||
procs.sort(key=lambda x: x['cpu_percent'], reverse=True)
|
||||
else:
|
||||
procs.sort(key=lambda x: x['memory_rss'], reverse=True)
|
||||
|
||||
return mk_resp(data=procs[:limit])
|
||||
|
||||
@router.get("/container/metadata", response_model=Resp_Body_Base, tags=["Agent Bridge"])
|
||||
async def get_container_metadata(
|
||||
account: AccountContext = Depends(get_account_context)
|
||||
):
|
||||
"""
|
||||
Attempts to gather Docker-specific metadata from the environment.
|
||||
Only accessible to administrators/managers via existing hierarchy or bypass.
|
||||
"""
|
||||
if not is_admin(account):
|
||||
raise HTTPException(status_code=403, detail="Administrative access required.")
|
||||
|
||||
metadata = {
|
||||
"is_docker": os.path.exists('/.dockerenv'),
|
||||
"cgroup": None,
|
||||
"mounts": None
|
||||
}
|
||||
|
||||
if os.path.exists('/proc/self/cgroup'):
|
||||
try:
|
||||
with open('/proc/self/cgroup', 'r') as f:
|
||||
metadata['cgroup'] = f.read()
|
||||
except:
|
||||
pass
|
||||
|
||||
if os.path.exists('/proc/self/mounts'):
|
||||
try:
|
||||
with open('/proc/self/mounts', 'r') as f:
|
||||
metadata['mounts'] = f.read()
|
||||
except:
|
||||
pass
|
||||
|
||||
return mk_resp(data=metadata)
|
||||
175
app/routers/archive/archive.py
Normal file
175
app/routers/archive/archive.py
Normal file
@@ -0,0 +1,175 @@
|
||||
import datetime
|
||||
#from datetime import datetime, time, timedelta
|
||||
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 *
|
||||
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 app.methods.archive_methods import load_archive_obj
|
||||
|
||||
from app.models.archive_models import Archive_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/archive', response_model=Resp_Body_Base)
|
||||
async def post_archive_obj(
|
||||
obj: Archive_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'archive'
|
||||
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('/archive/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_archive_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Archive_Base = None,
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'archive'
|
||||
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('/archive/list', response_model=Resp_Body_Base)
|
||||
async def get_archive_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,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'archive'
|
||||
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
|
||||
|
||||
|
||||
# ### BEGIN ### API Archive ### get_archive_obj() ###
|
||||
# Working well as of 2021-11-01. Using as a template for other routes.
|
||||
@router.get('/archive/{archive_id}', response_model=Resp_Body_Base)
|
||||
async def get_archive_obj(
|
||||
archive_id: str = Path(min_length=11, max_length=22),
|
||||
enabled: str = 'enabled', # enabled, disabled, all
|
||||
hidden: str = 'not_hidden', # hidden, not_hidden, all
|
||||
# inc_address: bool = False, # Under archive and under contact
|
||||
# inc_contact: bool = False,
|
||||
inc_archive_content_list: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if archive_id := redis_lookup_id_random(record_id_random=archive_id, table_name='archive'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
if archive_obj := load_archive_obj(
|
||||
archive_id = archive_id,
|
||||
enabled = enabled,
|
||||
hidden = hidden,
|
||||
# inc_address = inc_address,
|
||||
# inc_contact = inc_contact,
|
||||
inc_archive_content_list = inc_archive_content_list,
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
pass
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=archive_obj, response=response)
|
||||
# ### END ### API Archive ### get_archive_obj() ###
|
||||
|
||||
|
||||
# @router.get('/archive/{obj_id}', response_model=Resp_Body_Base)
|
||||
# async def get_archive_obj(
|
||||
# obj_id: str = Path(min_length=11, max_length=22),
|
||||
# x_account_id: str = Header(...),
|
||||
# by_alias: Optional[bool] = True,
|
||||
# exclude_unset: Optional[bool] = True,
|
||||
# response: Response = Response,
|
||||
# ):
|
||||
# log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
# log.debug(locals())
|
||||
|
||||
# obj_type = 'archive'
|
||||
# result = get_obj_template(
|
||||
# obj_type=obj_type,
|
||||
# obj_id=obj_id,
|
||||
# by_alias=True,
|
||||
# exclude_unset=True,
|
||||
# )
|
||||
# return result
|
||||
|
||||
|
||||
@router.delete('/archive/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_archive_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'archive'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
186
app/routers/archive/archive_content.py
Normal file
186
app/routers/archive/archive_content.py
Normal file
@@ -0,0 +1,186 @@
|
||||
import datetime
|
||||
#from datetime import datetime, time, timedelta
|
||||
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 *
|
||||
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 app.models.archive_content_models import Archive_Content_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('', response_model=Resp_Body_Base)
|
||||
async def post_archive_content_obj(
|
||||
obj: Archive_Content_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'archive_content'
|
||||
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_archive_content_obj(
|
||||
obj_id: str = Path(min_length=1, max_length=22),
|
||||
obj: Archive_Content_Base = None,
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'archive_content'
|
||||
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_archive_content_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,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'archive_content'
|
||||
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=False,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
@router.get('/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def get_archive_content_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'archive_content'
|
||||
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_archive_content_obj(
|
||||
# obj_id: str = Path(min_length=11, max_length=22),
|
||||
# x_account_id: str = Header(...),
|
||||
# response: Response = Response,
|
||||
# ):
|
||||
# log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
# log.debug(locals())
|
||||
|
||||
# obj_type = 'archive_content'
|
||||
# result = delete_obj_template(
|
||||
# obj_type=obj_type,
|
||||
# obj_id=obj_id,
|
||||
# )
|
||||
# return result
|
||||
|
||||
|
||||
# ### BEGIN ### API Archive Content ### delete_archive_content_obj() ###
|
||||
# Updated 2021-11-02
|
||||
@router.delete('/{archive_content_id}', response_model=Resp_Body_Base)
|
||||
async def delete_archive_content_obj(
|
||||
archive_content_id: str = Path(min_length=11, max_length=22),
|
||||
# hosted_file_id: str = Path(min_length=11, max_length=22),
|
||||
# for_type: str = Query(..., min_length=1, max_length=25),
|
||||
# for_id: str = Path(min_length=11, max_length=22),
|
||||
delete_hosted_file: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if archive_content_id := redis_lookup_id_random(record_id_random=archive_content_id, table_name='archive_content'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
if archive_content_select_result := sql_select(table_name='archive_content', record_id=archive_content_id):
|
||||
log.info(f'Selected Archive Content ID: {archive_content_id}')
|
||||
log.debug(archive_content_select_result)
|
||||
archive_content_rec = archive_content_select_result
|
||||
else: return mk_resp(data=False, status_code=500, response=response) # Internal Server Error
|
||||
|
||||
if archive_content_delete_result := sql_delete(table_name='archive_content', record_id=archive_content_id):
|
||||
log.info(f'Deleted Event File ID: {archive_content_id}')
|
||||
else: return mk_resp(data=False, status_code=500, response=response) # Internal Server Error
|
||||
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
|
||||
hosted_file_id = archive_content_rec.get('hosted_file_id')
|
||||
sql = f"""
|
||||
DELETE FROM hosted_file_link
|
||||
WHERE hosted_file_id = :hosted_file_id
|
||||
AND link_to_type = :for_type
|
||||
AND link_to_id = :for_id
|
||||
"""
|
||||
|
||||
log.debug(sql)
|
||||
|
||||
hosted_file_link_data = {}
|
||||
hosted_file_link_data['hosted_file_id'] = hosted_file_id
|
||||
hosted_file_link_data['for_type'] = 'archive_content'
|
||||
hosted_file_link_data['for_id'] = archive_content_id
|
||||
|
||||
log.debug(hosted_file_link_data)
|
||||
|
||||
if archive_content_delete_result := sql_delete(sql=sql, data=hosted_file_link_data):
|
||||
log.info(f'Deleted Hosted File Link. Hosted File ID: {hosted_file_id}, Link To Type: archive_content, Link To ID: {archive_content_id}')
|
||||
else: return mk_resp(data=False, status_code=500, response=response) # Internal Server Error
|
||||
|
||||
return mk_resp(data=True, response=response)
|
||||
# ### END ### API Archive Content ### delete_archive_content_obj() ###
|
||||
261
app/routers/archive/cont_edu_cert.py
Normal file
261
app/routers/archive/cont_edu_cert.py
Normal file
@@ -0,0 +1,261 @@
|
||||
import datetime
|
||||
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
|
||||
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.cont_edu_cert_methods import get_cont_edu_cert_rec_list, load_cont_edu_cert_obj
|
||||
|
||||
from app.models.cont_edu_cert_models import Cont_Edu_Cert_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/cont_edu/cert', response_model=Resp_Body_Base)
|
||||
async def post_cont_edu_cert_obj(
|
||||
obj: Cont_Edu_Cert_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'cont_edu_cert'
|
||||
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('/cont_edu/cert/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_cont_edu_cert_obj(
|
||||
obj: Cont_Edu_Cert_Base,
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'cont_edu_cert'
|
||||
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
|
||||
|
||||
|
||||
# ### BEGIN ### API Cont Edu Cert ### patch_cont_edu_cert_json() ###
|
||||
@router.patch('/cont_edu/cert/{cont_edu_cert_id}/json', response_model=Resp_Body_Base)
|
||||
async def patch_cont_edu_cert_json(
|
||||
cont_edu_cert_obj: Cont_Edu_Cert_Base,
|
||||
cont_edu_cert_id: str = Path(min_length=11, max_length=22),
|
||||
create_sub_obj: bool = False,
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
include: Optional[list] = [],
|
||||
exclude: Optional[list] = [],
|
||||
exclude_unset: Optional[bool] = True,
|
||||
exclude_none: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if cont_edu_cert_id := redis_lookup_id_random(record_id_random=cont_edu_cert_id, table_name='cont_edu_cert'): pass
|
||||
else:
|
||||
return mk_resp(data=None, status_code=404)
|
||||
|
||||
if cont_edu_cert_obj_up_result := update_cont_edu_cert_obj(
|
||||
cont_edu_cert_id=cont_edu_cert_id,
|
||||
cont_edu_cert_obj_up=cont_edu_cert_obj,
|
||||
create_sub_obj=create_sub_obj,
|
||||
):
|
||||
|
||||
log.debug(cont_edu_cert_obj_up_result)
|
||||
if return_obj:
|
||||
cont_edu_cert_obj = load_cont_edu_cert_obj(cont_edu_cert_id=cont_edu_cert_id)
|
||||
cont_edu_cert_dict = cont_edu_cert_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
return mk_resp(data=cont_edu_cert_dict)
|
||||
else:
|
||||
return mk_resp(data=cont_edu_cert_obj_up_result)
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
# ### END ### API Cont Edu Cert ### patch_cont_edu_cert_json() ###
|
||||
|
||||
|
||||
@router.get('/cont_edu/cert/list', response_model=Resp_Body_Base)
|
||||
async def get_cont_edu_cert_obj_li(
|
||||
for_obj_type: str = Query(None, min_length=2, max_length=50),
|
||||
for_obj_id: str = Query(None, min_length=1, max_length=22),
|
||||
group: str = Query(None, min_length=2, max_length=50),
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: bool = True,
|
||||
exclude_unset: bool = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'cont_edu_cert'
|
||||
|
||||
if for_obj_type == 'event_exhibit' and for_obj_id:
|
||||
#base_name = obj_type_li[obj_type]['base_name']
|
||||
base_name = Cont_Edu_Cert_Base
|
||||
|
||||
for_obj_id_random = for_obj_id
|
||||
for_obj_id = redis_lookup_id_random(record_id_random=for_obj_id_random, table_name=for_obj_type)
|
||||
|
||||
data = {}
|
||||
data['for_obj_type'] = for_obj_type
|
||||
data['for_obj_id'] = for_obj_id
|
||||
data['for_obj_id_random'] = for_obj_id_random
|
||||
data['group'] = group
|
||||
|
||||
if group:
|
||||
sql = """
|
||||
SELECT *
|
||||
FROM `cont_edu_cert` AS cont_edu_cert
|
||||
WHERE cont_edu_cert.for_type = :for_obj_type AND cont_edu_cert.for_id = :for_obj_id
|
||||
AND cont_edu_cert.group = :group
|
||||
"""
|
||||
else:
|
||||
sql = """
|
||||
SELECT *
|
||||
FROM `cont_edu_cert` AS cont_edu_cert
|
||||
WHERE cont_edu_cert.for_type = :for_obj_type AND cont_edu_cert.for_id = :for_obj_id
|
||||
"""
|
||||
|
||||
if sql_result := sql_select(data=data, sql=sql, as_list=True):
|
||||
resp_data_li = []
|
||||
for record in sql_result:
|
||||
resp_data = base_name(**record).dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
resp_data_li.append(resp_data)
|
||||
|
||||
return mk_resp(data=resp_data_li)
|
||||
else:
|
||||
log.debug(sql_result)
|
||||
return mk_resp(data=False, status_code=404, response=response)
|
||||
|
||||
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
|
||||
|
||||
|
||||
@router.get('/cont_edu/cert/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def get_cont_edu_cert_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'cont_edu_cert'
|
||||
result = get_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
by_alias=True,
|
||||
exclude_unset=True,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
# ### BEGIN ### API Cont Edu Cert ### get_account_obj_cont_edu_cert_list() ###
|
||||
# Updated 2021-07-28
|
||||
@router.get('/account/{account_id}/cont_edu/cert/list', response_model=Resp_Body_Base)
|
||||
async def get_account_obj_cont_edu_cert_list(
|
||||
account_id: str = Path(min_length=11, max_length=22),
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
inc_cont_edu_cert_person_list: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
|
||||
else: return mk_resp(data=None, status_code=404)
|
||||
|
||||
response_data = None
|
||||
# log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
|
||||
# Updated 2021-07-28
|
||||
if cont_edu_cert_rec_list_result := get_cont_edu_cert_rec_list(
|
||||
account_id = account_id,
|
||||
limit = limit,
|
||||
enabled = enabled,
|
||||
):
|
||||
cont_edu_cert_result_list = []
|
||||
for cont_edu_cert_rec in cont_edu_cert_rec_list_result:
|
||||
if load_cont_edu_cert_result := load_cont_edu_cert_obj(
|
||||
cont_edu_cert_id = cont_edu_cert_rec.get('cont_edu_cert_id', None),
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
enabled = enabled,
|
||||
inc_cont_edu_cert_person_list = inc_cont_edu_cert_person_list,
|
||||
):
|
||||
cont_edu_cert_result_list.append(load_cont_edu_cert_result)
|
||||
else:
|
||||
cont_edu_cert_result_list.append(None)
|
||||
response_data = cont_edu_cert_result_list
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data)
|
||||
# ### END ### API ### get_account_obj_cont_edu_cert_list() ###
|
||||
|
||||
|
||||
@router.delete('/cont_edu/cert/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_cont_edu_cert_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'cont_edu_cert'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
478
app/routers/archive/cont_edu_cert_person.py
Normal file
478
app/routers/archive/cont_edu_cert_person.py
Normal file
@@ -0,0 +1,478 @@
|
||||
import datetime
|
||||
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
|
||||
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.cont_edu_cert_person_methods import get_cont_edu_cert_person_rec_list, load_cont_edu_cert_person_obj
|
||||
|
||||
from app.models.cont_edu_cert_person_models import Cont_Edu_Cert_Person_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/cont_edu/cert/person', response_model=Resp_Body_Base)
|
||||
async def post_cont_edu_cert_person_obj(
|
||||
obj: Cont_Edu_Cert_Person_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'cont_edu_cert_person'
|
||||
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('/cont_edu/cert/person/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_cont_edu_cert_person_obj(
|
||||
obj: Cont_Edu_Cert_Person_Base,
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'cont_edu_cert_person'
|
||||
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
|
||||
|
||||
|
||||
# ### BEGIN ### API Cont Edu Cert Person ### patch_cont_edu_cert_person_json() ###
|
||||
@router.patch('/cont_edu/cert/person/{cont_edu_cert_person_id}/json', response_model=Resp_Body_Base)
|
||||
async def patch_cont_edu_cert_person_json(
|
||||
cont_edu_cert_person_obj: Cont_Edu_Cert_Person_Base,
|
||||
cont_edu_cert_person_id: str = Path(min_length=11, max_length=22),
|
||||
create_sub_obj: bool = False,
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
include: Optional[list] = [],
|
||||
exclude: Optional[list] = [],
|
||||
exclude_unset: Optional[bool] = True,
|
||||
exclude_none: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if cont_edu_cert_person_id := redis_lookup_id_random(record_id_random=cont_edu_cert_person_id, table_name='cont_edu_cert_person'): pass
|
||||
else:
|
||||
return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
if cont_edu_cert_person_obj_up_result := update_cont_edu_cert_person_obj(
|
||||
cont_edu_cert_person_id=cont_edu_cert_person_id,
|
||||
cont_edu_cert_person_obj_up=cont_edu_cert_person_obj,
|
||||
create_sub_obj=create_sub_obj,
|
||||
):
|
||||
|
||||
log.debug(cont_edu_cert_person_obj_up_result)
|
||||
if return_obj:
|
||||
cont_edu_cert_person_obj = load_cont_edu_cert_person_obj(cont_edu_cert_person_id=cont_edu_cert_person_id)
|
||||
cont_edu_cert_person_dict = cont_edu_cert_person_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
return mk_resp(data=cont_edu_cert_person_dict, response=response)
|
||||
else:
|
||||
return mk_resp(data=cont_edu_cert_person_obj_up_result, response=response)
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
# ### END ### API Cont Edu Cert Person ### patch_cont_edu_cert_person_json() ###
|
||||
|
||||
|
||||
@router.get('/cont_edu/cert/person/list', response_model=Resp_Body_Base)
|
||||
async def get_cont_edu_cert_person_obj_li(
|
||||
for_obj_type: str = Query(None, min_length=2, max_length=50),
|
||||
for_obj_id: str = Query(None, min_length=1, max_length=22),
|
||||
group: str = Query(None, min_length=2, max_length=50),
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: bool = True,
|
||||
exclude_unset: bool = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'cont_edu_cert_person'
|
||||
|
||||
if for_obj_type == 'event_exhibit' and for_obj_id:
|
||||
#base_name = obj_type_li[obj_type]['base_name']
|
||||
base_name = Cont_Edu_Cert_Person_Base
|
||||
|
||||
for_obj_id_random = for_obj_id
|
||||
for_obj_id = redis_lookup_id_random(record_id_random=for_obj_id_random, table_name=for_obj_type)
|
||||
|
||||
data = {}
|
||||
data['for_obj_type'] = for_obj_type
|
||||
data['for_obj_id'] = for_obj_id
|
||||
data['for_obj_id_random'] = for_obj_id_random
|
||||
data['group'] = group
|
||||
|
||||
if group:
|
||||
sql = """
|
||||
SELECT *
|
||||
FROM `cont_edu_cert_person` AS cont_edu_cert_person
|
||||
WHERE cont_edu_cert_person.for_type = :for_obj_type AND cont_edu_cert_person.for_id = :for_obj_id
|
||||
AND cont_edu_cert_person.group = :group
|
||||
"""
|
||||
else:
|
||||
sql = """
|
||||
SELECT *
|
||||
FROM `cont_edu_cert_person` AS cont_edu_cert_person
|
||||
WHERE cont_edu_cert_person.for_type = :for_obj_type AND cont_edu_cert_person.for_id = :for_obj_id
|
||||
"""
|
||||
|
||||
if sql_result := sql_select(data=data, sql=sql, as_list=True):
|
||||
resp_data_li = []
|
||||
for record in sql_result:
|
||||
resp_data = base_name(**record).dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
resp_data_li.append(resp_data)
|
||||
|
||||
return mk_resp(data=resp_data_li, response=response)
|
||||
else:
|
||||
log.debug(sql_result)
|
||||
return mk_resp(data=False, status_code=404, response=response)
|
||||
|
||||
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
|
||||
|
||||
|
||||
# ### BEGIN ### API Cont Edu Cert Person ### search_cont_edu_cert_person_obj_li() ###
|
||||
# Updated 2021-07-28
|
||||
@router.get('/cont_edu/cert/person/search', response_model=Resp_Body_Base)
|
||||
async def search_cont_edu_cert_person_obj_li(
|
||||
cont_edu_cert_id_list: List[str] = Query(['']),
|
||||
external_id: str = Query('%', max_length=50),
|
||||
given_name: str = Query('%', max_length=25),
|
||||
family_name: str = Query('%', max_length=25),
|
||||
email: str = Query('%', max_length=50),
|
||||
from_datetime: Optional[datetime.datetime] = None, # based on created_on
|
||||
to_datetime: Optional[datetime.datetime] = None, # based on created_on
|
||||
limit: int = 50,
|
||||
enabled: str = 'enabled',
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: bool = True,
|
||||
exclude_unset: bool = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if account_id := redis_lookup_id_random(record_id_random=x_account_id, table_name='account'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
log.debug(cont_edu_cert_id_list)
|
||||
print('---- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ----')
|
||||
print(cont_edu_cert_id_list)
|
||||
print('---- XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ----')
|
||||
|
||||
if cont_edu_cert_id_list:
|
||||
# Do something to change from id_random to id
|
||||
cont_edu_cert_id_list_new = []
|
||||
for cont_edu_cert_id in cont_edu_cert_id_list:
|
||||
cont_edu_cert_id = redis_lookup_id_random(record_id_random=cont_edu_cert_id, table_name='cont_edu_cert')
|
||||
cont_edu_cert_id_list_new.append(cont_edu_cert_id)
|
||||
cont_edu_cert_id_list = cont_edu_cert_id_list_new
|
||||
log.debug(cont_edu_cert_id_list)
|
||||
|
||||
# cont_edu_cert_id_list = [1, 2]
|
||||
# cont_edu_cert_id_list = [3, 4]
|
||||
# cont_edu_cert_id_list = ['3vqsbpWjd9s', 'bCv8WBzdRJQ']
|
||||
|
||||
data = {}
|
||||
data['account_id'] = account_id
|
||||
data['cont_edu_cert_id_list'] = cont_edu_cert_id_list
|
||||
# data['external_id'] = external_id
|
||||
# data['given_name'] = given_name
|
||||
# data['family_name'] = family_name
|
||||
data['email'] = '%'+email+'%' # Adding the % symbol here because it turns certain combinations into special characters
|
||||
# data['from_datetime'] = from_datetime
|
||||
# data['to_datetime'] = to_datetime
|
||||
log.debug(data)
|
||||
|
||||
if enabled in ['enabled', 'disabled', 'all']:
|
||||
if enabled == 'enabled':
|
||||
data['enable'] = True
|
||||
sql_enabled = f'AND `cont_edu_cert_person`.enable = :enable'
|
||||
elif enabled == 'disabled':
|
||||
data['enable'] = False
|
||||
sql_enabled = f'AND `cont_edu_cert_person`.enable = :enable'
|
||||
elif enabled == 'all':
|
||||
sql_enabled = ''
|
||||
|
||||
if limit:
|
||||
data['limit'] = limit
|
||||
sql_limit = f'LIMIT :limit'
|
||||
else:
|
||||
sql_limit = ''
|
||||
|
||||
sql = f"""
|
||||
SELECT *
|
||||
FROM `v_cont_edu_cert_person` AS cont_edu_cert_person
|
||||
WHERE cont_edu_cert_person.account_id = :account_id
|
||||
AND cont_edu_cert_person.cont_edu_cert_id IN :cont_edu_cert_id_list
|
||||
AND (cont_edu_cert_person.external_id LIKE :external_id OR cont_edu_cert_person.external_id IS NULL)
|
||||
AND (cont_edu_cert_person.given_name LIKE :given_name
|
||||
AND cont_edu_cert_person.family_name LIKE :family_name)
|
||||
AND cont_edu_cert_person.email LIKE :email
|
||||
{sql_enabled}
|
||||
ORDER BY cont_edu_cert_person.given_name ASC, cont_edu_cert_person.family_name ASC, cont_edu_cert_person.created_on DESC, cont_edu_cert_person.updated_on DESC
|
||||
{sql_limit};
|
||||
"""
|
||||
sql = f"""
|
||||
SELECT *
|
||||
FROM `v_cont_edu_cert_person` AS cont_edu_cert_person
|
||||
WHERE cont_edu_cert_person.account_id = :account_id
|
||||
AND cont_edu_cert_person.cont_edu_cert_id IN :cont_edu_cert_id_list
|
||||
AND cont_edu_cert_person.email LIKE :email
|
||||
{sql_enabled}
|
||||
ORDER BY cont_edu_cert_person.given_name ASC, cont_edu_cert_person.family_name ASC, cont_edu_cert_person.created_on DESC, cont_edu_cert_person.updated_on DESC
|
||||
{sql_limit};
|
||||
"""
|
||||
|
||||
log.debug(sql)
|
||||
if sql_result := sql_select(data=data, sql=sql, as_list=True, rm_id_random=True):
|
||||
resp_data_li = []
|
||||
for record in sql_result:
|
||||
resp_data = Cont_Edu_Cert_Person_Base(**record).dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
resp_data_li.append(resp_data)
|
||||
|
||||
return mk_resp(data=resp_data_li, response=response)
|
||||
else:
|
||||
log.debug(sql_result)
|
||||
return mk_resp(data=False, status_code=404, response=response)
|
||||
# ### END ### API Cont Edu Cert Person ### search_cont_edu_cert_person_obj_li() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Cont Edu Cert Person ### get_cont_edu_cert_person_obj() ###
|
||||
# Updated 2021-08-05
|
||||
@router.get('/cont_edu/cert/person/{cont_edu_cert_person_id}', response_model=Resp_Body_Base)
|
||||
async def get_cont_edu_cert_person_obj(
|
||||
cont_edu_cert_person_id: str = Path(min_length=11, max_length=22),
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
inc_cont_edu_cert: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if cont_edu_cert_person_id := redis_lookup_id_random(record_id_random=cont_edu_cert_person_id, table_name='cont_edu_cert_person'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
cont_edu_cert_person_obj = load_cont_edu_cert_person_obj(
|
||||
cont_edu_cert_person_id = cont_edu_cert_person_id,
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
enabled = enabled,
|
||||
inc_cont_edu_cert = inc_cont_edu_cert,
|
||||
)
|
||||
cont_edu_cert_person_dict = cont_edu_cert_person_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
return mk_resp(data=cont_edu_cert_person_dict, response=response)
|
||||
# ### END ### API Cont Edu Cert Person ### get_cont_edu_cert_person_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Cont Edu Cert Person ### get_account_obj_cont_edu_cert_person_list() ###
|
||||
# Updated 2021-07-28
|
||||
@router.get('/account/{account_id}/cont_edu/cert/person/list', response_model=Resp_Body_Base)
|
||||
async def get_account_obj_cont_edu_cert_person_list(
|
||||
account_id: str = Path(min_length=11, max_length=22),
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
inc_cont_edu_cert: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
response_data = None
|
||||
# log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
|
||||
# Updated 2021-07-28
|
||||
if cont_edu_cert_person_rec_list_result := get_cont_edu_cert_person_rec_list(
|
||||
account_id = account_id,
|
||||
limit = limit,
|
||||
enabled = enabled,
|
||||
):
|
||||
cont_edu_cert_person_result_list = []
|
||||
for cont_edu_cert_person_rec in cont_edu_cert_person_rec_list_result:
|
||||
if load_cont_edu_cert_person_result := load_cont_edu_cert_person_obj(
|
||||
cont_edu_cert_person_id = cont_edu_cert_person_rec.get('cont_edu_cert_person_id', None),
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
enabled = enabled,
|
||||
inc_cont_edu_cert = inc_cont_edu_cert,
|
||||
):
|
||||
cont_edu_cert_person_result_list.append(load_cont_edu_cert_person_result)
|
||||
else:
|
||||
cont_edu_cert_person_result_list.append(None)
|
||||
response_data = cont_edu_cert_person_result_list
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=response)
|
||||
# ### END ### API Cont Edu Cert Person ### get_account_obj_cont_edu_cert_person_list() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Cont Edu Cert Person ### get_person_obj_cont_edu_cert_person_list() ###
|
||||
# Updated 2021-07-28
|
||||
@router.get('/person/{person_id}/cont_edu/cert/person/list', response_model=Resp_Body_Base)
|
||||
async def get_person_obj_cont_edu_cert_person_list(
|
||||
person_id: str = Path(min_length=11, max_length=22),
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
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
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
# Updated 2021-10-01
|
||||
if cont_edu_cert_person_rec_list_result := get_cont_edu_cert_person_rec_list(
|
||||
person_id = person_id,
|
||||
enabled = enabled,
|
||||
limit = limit,
|
||||
):
|
||||
cont_edu_cert_person_result_list = []
|
||||
for cont_edu_cert_person_rec in cont_edu_cert_person_rec_list_result:
|
||||
if load_cont_edu_cert_person_result := load_cont_edu_cert_person_obj(
|
||||
cont_edu_cert_person_id = cont_edu_cert_person_rec.get('cont_edu_cert_person_id', None),
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
enabled = enabled,
|
||||
):
|
||||
cont_edu_cert_person_result_list.append(load_cont_edu_cert_person_result)
|
||||
else:
|
||||
cont_edu_cert_person_result_list.append(None)
|
||||
response_data = cont_edu_cert_person_result_list
|
||||
elif isinstance(cont_edu_cert_person_rec_list_result, list) or cont_edu_cert_person_rec_list_result is None: # Empty list or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=None, status_code=404, response=response) # Not Found
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=response)
|
||||
# ### END ### API Cont Edu Cert Person ### get_account_obj_cont_edu_cert_person_list() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Cont Edu Cert Person ### get_cont_edu_cert_obj_cont_edu_cert_person_list() ###
|
||||
# Updated 2021-07-28
|
||||
@router.get('/cont_edu/cert/{cont_edu_cert_id}/cont_edu/cert/person/list', response_model=Resp_Body_Base)
|
||||
async def get_cont_edu_cert_obj_cont_edu_cert_person_list(
|
||||
cont_edu_cert_id: str = Path(min_length=11, max_length=22),
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
inc_cont_edu_cert: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if cont_edu_cert_id := redis_lookup_id_random(record_id_random=cont_edu_cert_id, table_name='cont_edu_cert'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
response_data = None
|
||||
# log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
|
||||
# Updated 2021-07-28
|
||||
if cont_edu_cert_person_rec_list_result := get_cont_edu_cert_person_rec_list(
|
||||
cont_edu_cert_id = cont_edu_cert_id,
|
||||
limit = limit,
|
||||
enabled = enabled,
|
||||
):
|
||||
cont_edu_cert_person_result_list = []
|
||||
for cont_edu_cert_person_rec in cont_edu_cert_person_rec_list_result:
|
||||
if load_cont_edu_cert_person_result := load_cont_edu_cert_person_obj(
|
||||
cont_edu_cert_person_id = cont_edu_cert_person_rec.get('cont_edu_cert_person_id', None),
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
enabled = enabled,
|
||||
inc_cont_edu_cert = inc_cont_edu_cert,
|
||||
):
|
||||
cont_edu_cert_person_result_list.append(load_cont_edu_cert_person_result)
|
||||
else:
|
||||
cont_edu_cert_person_result_list.append(None)
|
||||
response_data = cont_edu_cert_person_result_list
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=response)
|
||||
# ### END ### API Cont Edu Cert Person ### get_cont_edu_cert_obj_cont_edu_cert_person_list() ###
|
||||
|
||||
|
||||
@router.delete('/cont_edu/cert/person/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_cont_edu_cert_person_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'cont_edu_cert_person'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
292
app/routers/archive/event_abstract.py
Normal file
292
app/routers/archive/event_abstract.py
Normal file
@@ -0,0 +1,292 @@
|
||||
import datetime, json
|
||||
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, 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, get_id_random, 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.event_abstract_methods import create_update_event_abstract_obj, load_event_abstract_obj, get_event_abstract_rec_list, remove_event_abstract_obj
|
||||
|
||||
from app.models.event_abstract_models import Event_Abstract_In
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# ### BEGIN ### API Event Abstract ### post_event_abstract_obj() ###
|
||||
# Updated 2023-03-22
|
||||
@router.post('/event/abstract', response_model=Resp_Body_Base)
|
||||
async def post_event_abstract_obj(
|
||||
event_abstract_obj: Event_Abstract_In,
|
||||
event_id: str = Query(..., min_length=11, max_length=22),
|
||||
event_person_id: str = Query(..., min_length=11, max_length=22),
|
||||
|
||||
# create_sub_obj: bool = False,
|
||||
# fail_any: bool = True, # Fail if any thing goes wrong for sub objects
|
||||
|
||||
return_obj: bool = False,
|
||||
inc_event_file_list: bool = False,
|
||||
inc_event_person: bool = False,
|
||||
inc_event_presentation_list: bool = False,
|
||||
inc_event_presenter_list: bool = False,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event ID was invalid or not found.')
|
||||
|
||||
if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Person ID was invalid or not found.')
|
||||
|
||||
# There should probably be a check for the event ID before calling the create function?
|
||||
if create_event_abstract_obj_result := create_update_event_abstract_obj(
|
||||
event_abstract_obj = event_abstract_obj,
|
||||
event_id = event_id, # event_abstract_obj.event_id,
|
||||
event_person_id = event_person_id, # event_abstract_obj.event_person_id,
|
||||
# create_sub_obj = create_sub_obj,
|
||||
# fail_any = fail_any,
|
||||
return_outline = False,
|
||||
): pass
|
||||
else: return mk_resp(data=False, status_code=400, response=commons.response, status_message='The event abstract was not created. Check the field names and data types.')
|
||||
|
||||
if isinstance(create_event_abstract_obj_result, int):
|
||||
event_abstract_id = create_event_abstract_obj_result
|
||||
if return_obj:
|
||||
if load_event_abstract_obj_result := load_event_abstract_obj(
|
||||
event_abstract_id = event_abstract_id,
|
||||
inc_event_file_list = inc_event_file_list,
|
||||
inc_event_person = inc_event_person,
|
||||
inc_event_presentation_list = inc_event_presentation_list,
|
||||
inc_event_presenter_list = inc_event_presenter_list,
|
||||
):
|
||||
data = load_event_abstract_obj_result
|
||||
else:
|
||||
data = False
|
||||
else:
|
||||
event_abstract_id = event_abstract_id
|
||||
event_abstract_id_random = get_id_random(record_id=event_abstract_id, table_name='event_abstract')
|
||||
data = {}
|
||||
data['event_abstract_id'] = event_abstract_id
|
||||
data['event_abstract_id_random'] = event_abstract_id_random
|
||||
return mk_resp(data=data, response=commons.response, status_message='The event abstract was created.')
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response, status_message='The result from trying to create an event abstract was unexpected.')
|
||||
# ### END ### API Event Abstract ### post_event_abstract_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Event Abstract ### patch_event_abstract_obj() ###
|
||||
# Updated 2023-03-22
|
||||
@router.patch('/event/abstract/{event_abstract_id}', response_model=Resp_Body_Base)
|
||||
async def patch_event_abstract_obj(
|
||||
event_abstract_obj: Event_Abstract_In,
|
||||
event_abstract_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
# create_sub_obj: bool = False,
|
||||
# fail_any: bool = True, # Fail if any thing goes wrong for sub objects
|
||||
|
||||
return_obj: bool = True,
|
||||
inc_event_file_list: bool = False,
|
||||
inc_event_person: bool = False,
|
||||
inc_event_presentation_list: bool = False,
|
||||
inc_event_presenter_list: bool = False,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if event_abstract_id := redis_lookup_id_random(record_id_random=event_abstract_id, table_name='event_abstract'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Abstract ID was invalid or not found.')
|
||||
|
||||
if update_event_abstract_obj_result := create_update_event_abstract_obj(
|
||||
event_abstract_obj = event_abstract_obj,
|
||||
event_abstract_id = event_abstract_id,
|
||||
# create_sub_obj = create_sub_obj,
|
||||
# fail_any = fail_any,
|
||||
return_outline = False,
|
||||
): pass
|
||||
else: return mk_resp(data=False, status_code=400, response=commons.response, status_message='The event abstract was not created. Check the field names and data types.')
|
||||
|
||||
if update_event_abstract_obj_result:
|
||||
if return_obj:
|
||||
if load_event_abstract_obj_result := load_event_abstract_obj(
|
||||
event_abstract_id = event_abstract_id,
|
||||
inc_event_file_list = inc_event_file_list,
|
||||
inc_event_person = inc_event_person,
|
||||
inc_event_presentation_list = inc_event_presentation_list,
|
||||
inc_event_presenter_list = inc_event_presenter_list,
|
||||
):
|
||||
data = load_event_abstract_obj_result
|
||||
else:
|
||||
data = False
|
||||
else:
|
||||
event_abstract_id_random = get_id_random(record_id=event_abstract_id, table_name='event_abstract')
|
||||
data = {}
|
||||
data['event_abstract_id'] = event_abstract_id
|
||||
data['event_abstract_id_random'] = event_abstract_id_random
|
||||
return mk_resp(data=data, response=commons.response, status_message='The event abstract was created or updated.')
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response, status_message='The result from trying to create an event abstract was unexpected.')
|
||||
# ### END ### API Event Abstract ### patch_event_abstract_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Event Abstract ### get_event_abstract_obj() ###
|
||||
# Updated 2023-03-22
|
||||
@router.get('/event/abstract/{event_abstract_id}', response_model=Resp_Body_Base)
|
||||
async def get_event_abstract_obj(
|
||||
event_abstract_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
inc_event_cfg: bool = False,
|
||||
inc_event_file_list: bool = False,
|
||||
inc_event_person: bool = False,
|
||||
inc_event_person_profile: bool = True,
|
||||
inc_event_presentation_list: bool = False,
|
||||
inc_event_presenter_list: bool = False,
|
||||
|
||||
approved: str = 'all', # approved, not_approved, all
|
||||
hidden: str = 'not_hidden', # hidden, not_hidden, all
|
||||
review: str = 'all', # hidden, not_hidden, all
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
# time.sleep(.5)
|
||||
|
||||
# ### SECTION ### Secondary data validation
|
||||
event_abstract_id_random = event_abstract_id # This is used later for the response data
|
||||
if event_abstract_id := redis_lookup_id_random(record_id_random=event_abstract_id, table_name='event_abstract'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event Abstract ID was invalid or not found.')
|
||||
|
||||
if event_abstract_obj_result := load_event_abstract_obj(
|
||||
event_abstract_id = event_abstract_id,
|
||||
|
||||
enabled = commons.enabled,
|
||||
approved = approved, # approved, not_approved, all
|
||||
hidden = hidden, # hidden, not_hidden, all
|
||||
review = review, # ready, not_ready, all
|
||||
|
||||
inc_event_cfg = inc_event_cfg,
|
||||
inc_event_file_list = inc_event_file_list,
|
||||
inc_event_person = inc_event_person,
|
||||
inc_event_person_profile = inc_event_person_profile,
|
||||
inc_event_presentation_list = inc_event_presentation_list,
|
||||
inc_event_presenter_list = inc_event_presenter_list,
|
||||
):
|
||||
log.info('Loading successful. Returning result')
|
||||
event_abstract_obj_result.xyz = 'asdf!!!'
|
||||
log.debug(event_abstract_obj_result)
|
||||
return mk_resp(data=event_abstract_obj_result, response=commons.response) # Success
|
||||
elif isinstance(event_abstract_obj_result, list) or event_abstract_obj_result is None: # Empty list or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=None, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
# ### END ### API Event Abstract ### get_event_abstract_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Event Abstract ### get_event_id_event_abstract_obj_li() ###
|
||||
# Updated 2023-05-22
|
||||
@router.get('/event/{event_id}/event/abstract/list', response_model=Resp_Body_Base)
|
||||
async def get_event_id_event_abstract_obj_li(
|
||||
event_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
# inc_address: bool = False,
|
||||
# inc_contact: bool = False,
|
||||
# inc_event_file_list: bool = False,
|
||||
inc_event_person: bool = False, # Intended for event_presenter
|
||||
# inc_file_count: bool = False, # NOTE: file counts are from separate views
|
||||
# inc_poc_event_person: bool = False,
|
||||
|
||||
approved: str = 'all', # approved, not_approved, all
|
||||
hidden: str = 'not_hidden', # hidden, not_hidden, all
|
||||
review: str = 'all', # hidden, not_hidden, all
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response)
|
||||
|
||||
# Updated 2023-05-22
|
||||
if event_abstract_rec_list_result := get_event_abstract_rec_list(
|
||||
event_id = event_id,
|
||||
|
||||
# review = review, # ready, not_ready, all
|
||||
approved = approved, # approve(d), not_approved, all
|
||||
# hidden = hidden, # hidden, not_hidden, all
|
||||
|
||||
enabled = commons.enabled,
|
||||
limit = commons.limit,
|
||||
offset = commons.offset,
|
||||
):
|
||||
event_abstract_result_list = []
|
||||
for event_abstract_rec in event_abstract_rec_list_result:
|
||||
if load_event_abstract_result := load_event_abstract_obj(
|
||||
event_abstract_id = event_abstract_rec.get('event_abstract_id', None),
|
||||
|
||||
# review = review,
|
||||
# approved = approved,
|
||||
hidden = hidden,
|
||||
|
||||
enabled = commons.enabled,
|
||||
limit = commons.limit,
|
||||
inc_event_person = inc_event_person,
|
||||
):
|
||||
event_abstract_result_list.append(load_event_abstract_result)
|
||||
else:
|
||||
event_abstract_result_list.append(None)
|
||||
response_data = event_abstract_result_list
|
||||
elif isinstance(event_abstract_rec_list_result, list) or event_abstract_rec_list_result is None: # Empty list or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=False, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=commons.response)
|
||||
# ### END ### API Event Abstract ### get_event_id_event_abstract_obj_li() ###
|
||||
|
||||
|
||||
# # ### BEGIN ### API Event Abstract ### delete_event_abstract_obj() ###
|
||||
# # Updated 2023-03-22
|
||||
# @router.delete('/event/abstract/{event_abstract_id}', response_model=Resp_Body_Base)
|
||||
# def delete_event_abstract_obj(
|
||||
# event_abstract_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
# method: str = None, # None, delete, disable, hide
|
||||
|
||||
# commons: Common_Route_Params = Depends(common_route_params),
|
||||
# ):
|
||||
# log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
# log.debug(locals())
|
||||
|
||||
# # ### SECTION ### Secondary data validation
|
||||
# if event_abstract_id := redis_lookup_id_random(record_id_random=event_abstract_id, table_name='event_abstract'): pass
|
||||
# else: return mk_resp(data=None, status_code=404, response=response, status_message='The Event Abstract ID was invalid or not found.')
|
||||
|
||||
# if event_abstract_obj_result := remove_event_abstract_obj(
|
||||
# event_abstract_id = event_abstract_id,
|
||||
# method = method,
|
||||
# ):
|
||||
# log.info('Delete successful. Returning True')
|
||||
# return mk_resp(data=True, response=commons.response) # Success
|
||||
# elif event_abstract_obj_result is None: # None
|
||||
# log.info('No results')
|
||||
# return mk_resp(data=None, status_code=404, response=commons.response) # Not Found
|
||||
# else:
|
||||
# log.warning('Likely bad request')
|
||||
# return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
# # ### END ### API Event Abstract ### delete_event_abstract_obj() ###
|
||||
131
app/routers/archive/event_person_detail.py
Normal file
131
app/routers/archive/event_person_detail.py
Normal file
@@ -0,0 +1,131 @@
|
||||
import datetime
|
||||
#from datetime import datetime, time, timedelta
|
||||
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
|
||||
#from ..log import *
|
||||
from app.config import settings
|
||||
from app.db_sql import *
|
||||
|
||||
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.event_person_detail_models import Event_Person_Detail_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('', response_model=Resp_Body_Base)
|
||||
async def post_event_person_detail_obj(
|
||||
obj: Event_Person_Detail_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_person_detail'
|
||||
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_event_person_detail_obj(
|
||||
obj: Event_Person_Detail_Base,
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_person_detail'
|
||||
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_event_person_detail_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,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_person_detail'
|
||||
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
|
||||
|
||||
|
||||
@router.get('/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def get_event_person_detail_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_person_detail'
|
||||
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_event_person_detail_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_person_detail'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
244
app/routers/archive/event_person_tracking.py
Normal file
244
app/routers/archive/event_person_tracking.py
Normal file
@@ -0,0 +1,244 @@
|
||||
import datetime
|
||||
#from datetime import datetime, time, timedelta
|
||||
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
|
||||
from app.config import settings
|
||||
from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, get_id_random,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.event_person_tracking_methods import get_event_person_tracking_rec_list, load_event_person_tracking_obj
|
||||
|
||||
from app.models.event_person_tracking_models import Event_Person_Tracking_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/event/person/tracking', response_model=Resp_Body_Base)
|
||||
async def post_event_person_tracking_obj(
|
||||
event_person_tracking_obj: Event_Person_Tracking_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_person_tracking'
|
||||
event_person_tracking_obj_data_dict = event_person_tracking_obj.dict(by_alias=False, exclude_unset=True)
|
||||
result = post_obj_template(
|
||||
obj_type = obj_type,
|
||||
data = event_person_tracking_obj_data_dict,
|
||||
return_obj = True,
|
||||
by_alias = True,
|
||||
exclude_unset = True,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
@router.patch('/event/person/tracking/{event_person_tracking_id}', response_model=Resp_Body_Base)
|
||||
async def patch_event_person_tracking_obj(
|
||||
event_person_tracking_obj: Event_Person_Tracking_Base,
|
||||
event_person_tracking_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_person_tracking'
|
||||
event_person_tracking_obj_data_dict = event_person_tracking_obj.dict(by_alias=False, exclude_unset=True)
|
||||
event_person_tracking_obj_data_dict['id'] = redis_lookup_id_random(record_id_random=event_person_tracking_id, table_name=obj_type)
|
||||
event_person_tracking_obj_data_dict['id_random'] = event_person_tracking_id
|
||||
result = patch_obj_template(
|
||||
obj_type = obj_type,
|
||||
data = event_person_tracking_obj_data_dict,
|
||||
obj_id = event_person_tracking_id,
|
||||
return_obj = True,
|
||||
by_alias = True,
|
||||
exclude_unset = True,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
@router.get('/event/person/tracking/list', response_model=Resp_Body_Base)
|
||||
async def get_event_person_tracking_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,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_person_tracking'
|
||||
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
|
||||
|
||||
|
||||
@router.get('/event/person/tracking/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def get_event_person_tracking_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_person_tracking'
|
||||
result = get_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
by_alias=True,
|
||||
exclude_unset=True,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
# ### BEGIN ### API Event Person Tracking ### get_event_person_obj_tracking_list() ###
|
||||
# Updated 2021-09-23
|
||||
@router.get('/event/person/{event_person_id}/tracking/list', response_model=Resp_Body_Base)
|
||||
async def get_event_person_obj_tracking_list(
|
||||
event_person_id: str = Path(min_length=11, max_length=22),
|
||||
event_session_id: str = Query(None, min_length=11, max_length=22),
|
||||
in_out_type: str = Query(None, min_length=1, max_length=15),
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
inc_event_person: bool = False,
|
||||
inc_event_session: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if event_person_id := redis_lookup_id_random(record_id_random=event_person_id, table_name='event_person'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
if event_session_id:
|
||||
if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
# Updated 2021-09-21
|
||||
if event_person_tracking_rec_list_result := get_event_person_tracking_rec_list(
|
||||
account_id = x_account_id,
|
||||
event_person_id = event_person_id,
|
||||
event_session_id = event_session_id,
|
||||
in_out_type = in_out_type,
|
||||
enabled = enabled,
|
||||
limit = limit,
|
||||
):
|
||||
event_person_tracking_result_list = []
|
||||
for event_person_tracking_rec in event_person_tracking_rec_list_result:
|
||||
if load_event_person_tracking_result := load_event_person_tracking_obj(
|
||||
event_person_tracking_id = event_person_tracking_rec.get('event_person_tracking_id', None),
|
||||
enabled = enabled,
|
||||
limit = limit,
|
||||
inc_event_person = inc_event_person,
|
||||
inc_event_session = inc_event_session,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
event_person_tracking_result_list.append(load_event_person_tracking_result)
|
||||
else:
|
||||
event_person_tracking_result_list.append(None)
|
||||
response_data = event_person_tracking_result_list
|
||||
elif isinstance(event_person_tracking_rec_list_result, list):
|
||||
return mk_resp(data=False, status_code=404, response=response) # Not Found
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=response)
|
||||
# ### END ### API Event Person Tracking ### get_event_person_obj_tracking_list() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Event Person Tracking ### get_event_session_obj_event_person_tracking_list() ###
|
||||
# Updated 2021-09-21
|
||||
@router.get('/event/session/{event_session_id}/event/person/tracking/list', response_model=Resp_Body_Base)
|
||||
async def get_event_session_obj_event_person_tracking_list(
|
||||
event_session_id: str = Path(min_length=11, max_length=22),
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
inc_event_person: bool = False,
|
||||
inc_event_session: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if event_session_id := redis_lookup_id_random(record_id_random=event_session_id, table_name='event_session'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
# Updated 2021-09-21
|
||||
if event_person_tracking_rec_list_result := get_event_person_tracking_rec_list(
|
||||
account_id = x_account_id,
|
||||
event_session_id = event_session_id,
|
||||
enabled = enabled,
|
||||
limit = limit,
|
||||
):
|
||||
event_person_tracking_result_list = []
|
||||
for event_person_tracking_rec in event_person_tracking_rec_list_result:
|
||||
if load_event_person_tracking_result := load_event_person_tracking_obj(
|
||||
event_person_tracking_id = event_person_tracking_rec.get('event_person_tracking_id', None),
|
||||
enabled = enabled,
|
||||
limit = limit,
|
||||
inc_event_person = inc_event_person,
|
||||
inc_event_session = inc_event_session,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
event_person_tracking_result_list.append(load_event_person_tracking_result)
|
||||
else:
|
||||
event_person_tracking_result_list.append(None)
|
||||
response_data = event_person_tracking_result_list
|
||||
elif isinstance(event_person_tracking_rec_list_result, list):
|
||||
return mk_resp(data=False, status_code=404, response=response) # Not Found
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=response)
|
||||
# ### END ### API Event Person Tracking ### get_event_session_obj_event_person_tracking_list() ###
|
||||
|
||||
|
||||
@router.delete('/event/person/tracking/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_event_person_tracking_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_person_tracking'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
152
app/routers/archive/event_registration.py
Normal file
152
app/routers/archive/event_registration.py
Normal file
@@ -0,0 +1,152 @@
|
||||
import datetime
|
||||
#from datetime import datetime, time, timedelta
|
||||
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 *
|
||||
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 app.methods.event_registration_methods import load_event_registration_obj
|
||||
|
||||
from app.models.event_registration_models import Event_Registration_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('', response_model=Resp_Body_Base)
|
||||
async def post_event_registration_obj(
|
||||
obj: Event_Registration_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_registration'
|
||||
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_event_registration_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Event_Registration_Base = None,
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_registration'
|
||||
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_event_registration_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,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_registration'
|
||||
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
|
||||
|
||||
|
||||
@router.get('/{event_registration_id}', response_model=Resp_Body_Base)
|
||||
async def get_event_registration_obj(
|
||||
event_registration_id: str = Path(min_length=11, max_length=22),
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
# inc_event_cfg: bool = False,
|
||||
inc_event_person_list: bool = False,
|
||||
inc_event_registration_cfg: bool = False,
|
||||
# inc_event_registration_list: bool = False,
|
||||
inc_person: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if event_registration_id := redis_lookup_id_random(record_id_random=event_registration_id, table_name='event_registration'): pass
|
||||
else: return mk_resp(data=None, status_code=404)
|
||||
|
||||
if event_registration_obj := load_event_registration_obj(
|
||||
event_registration_id = event_registration_id,
|
||||
inc_event_person_list = inc_event_person_list,
|
||||
inc_event_registration_cfg = inc_event_registration_cfg,
|
||||
# inc_event_registration_list = inc_event_registration_list,
|
||||
inc_person = inc_person,
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
enabled = enabled,
|
||||
):
|
||||
pass
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=event_registration_obj)
|
||||
|
||||
|
||||
@router.delete('/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_event_registration_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'event_registration'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
112
app/routers/archive/event_reports.py
Normal file
112
app/routers/archive/event_reports.py
Normal file
@@ -0,0 +1,112 @@
|
||||
import datetime
|
||||
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, 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, get_id_random, 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.event_presenter_methods import get_event_presenter_url_list
|
||||
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# ### BEGIN ### API Event Reports ### event_id_rpt_presenter_links() ###
|
||||
# Updated 2022-04-12
|
||||
@router.get('/event/{event_id}/rpt_presenter_links', response_model=Resp_Body_Base)
|
||||
async def event_id_rpt_presenter_links(
|
||||
event_id: str = Path(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 event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response)
|
||||
|
||||
|
||||
if order_line_rec_list_result := get_order_line_rec_list(
|
||||
for_obj_type = obj_type,
|
||||
for_obj_id = obj_id,
|
||||
from_datetime = from_datetime,
|
||||
to_datetime = to_datetime,
|
||||
product_for_type = prod_type,
|
||||
status = status,
|
||||
full_detail = full_detail,
|
||||
# enabled = enabled,
|
||||
limit = limit,
|
||||
):
|
||||
order_line_result_list = []
|
||||
data_dict_list_for_export = []
|
||||
for order_line_rec in order_line_rec_list_result:
|
||||
if not full_detail:
|
||||
if load_order_line_result := load_order_obj_line(
|
||||
order_line_id = order_line_rec.get('order_line_id', None),
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
order_line_result_list.append(load_order_line_result)
|
||||
else:
|
||||
order_line_result_list.append(None)
|
||||
else: # Uses a different view: v_order_line_full_detail
|
||||
if load_order_line_result := load_order_obj_line_full_detail(
|
||||
order_line_rec = order_line_rec,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
model_as_dict = False,
|
||||
):
|
||||
if create_export:
|
||||
data_dict = load_order_line_result.dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
data_dict_list_for_export.append(data_dict)
|
||||
order_line_result_list.append(load_order_line_result)
|
||||
else:
|
||||
order_line_result_list.append(None)
|
||||
response_data = order_line_result_list
|
||||
elif isinstance(order_line_rec_list_result, list) or order_line_rec_list_result is None: # Empty list or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=None, status_code=404, response=response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
if create_export:
|
||||
# column_name_li = ['order_id_random', 'order_line_id_random', '', 'product_name', 'quantity', 'amount', 'dollar_amount', 'person_email']
|
||||
|
||||
# column_name_li = ['order_line_id_random', 'order_id_random', 'product_id_random', 'product_type', 'product_name', 'product_unit_price', 'product_recurring', 'curr_product_id_random', 'curr_product_type', 'curr_product_type_name', 'curr_product_name', 'name', 'quantity', 'amount', 'dollar_amount', 'recurring', 'message', 'person_id_random', 'person_given_name', 'person_family_name', 'person_full_name', 'person_full_name_override', 'person_contact_email', 'person_contact_cc_email', 'person_contact_phone_mobile', 'person_contact_phone_home', 'person_contact_phone_office', 'person_contact_phone_land', 'person_contact_phone_fax', 'person_contact_phone_other', 'person_contact_address_name', 'person_contact_address_organization_name', 'person_contact_address_line_1', 'person_contact_address_line_2', 'person_contact_address_line_3', 'person_contact_address_city', 'person_contact_address_country_subdivision_code', 'person_contact_address_state_province', 'person_contact_address_postal_code', 'person_contact_address_country_alpha_2_code', 'person_contact_address_country_name', 'person_contact_address_country', 'order_status', 'order_created_on', 'order_updated_on', 'created_on', 'updated_on']
|
||||
|
||||
column_name_li = [
|
||||
'event_presenter_id_random',
|
||||
'event_id_random',
|
||||
'events_session_id_random',
|
||||
'events_presentation_id_random',
|
||||
'event_presenter_given_name',
|
||||
'event_presenter_family_name',
|
||||
'event_presenter_email',
|
||||
'event_presenter_created_on', 'event_presenter_updated_on'
|
||||
]
|
||||
|
||||
|
||||
# column_name_li = []
|
||||
datetime_format='%Y-%m-%d_%H%M'
|
||||
|
||||
# current_datetime = datetime.datetime.now() # Servers timezone (Eastern)
|
||||
current_datetime_utc = datetime.datetime.utcnow()
|
||||
current_datetime_utc = current_datetime_utc.strftime(datetime_format)
|
||||
filename = f'order_line_list_{current_datetime_utc}'
|
||||
if result := create_export_file(data_dict_list=data_dict_list_for_export, column_name_li=column_name_li, subdir_path='order_line', filename=filename, export_type='Excel'):
|
||||
tmp_file_path = result
|
||||
else:
|
||||
log.error('Something went wrong while creating or saving the export file')
|
||||
tmp_file_path = result
|
||||
else: tmp_file_path = None
|
||||
|
||||
return mk_resp(data=response_data, tmp_file_path=tmp_file_path, response=response)
|
||||
# ### END ### API Event Reports ### get_obj_id_order_line_list() ###
|
||||
83
app/routers/archive/fundraising.py
Normal file
83
app/routers/archive/fundraising.py
Normal file
@@ -0,0 +1,83 @@
|
||||
import datetime, 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.fundraising_methods import get_fundraising_rec_list, load_fundraising_obj
|
||||
# from app.methods.fundraising_cfg_methods import load_fundraising_cfg_obj
|
||||
|
||||
from app.models.fundraising_models import Fundraising_Base
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# ### BEGIN ### API Event ### get_account_obj_fundraising_list() ###
|
||||
# Updated 2021-12-13
|
||||
@router.get('/account/{account_id}/fundraising/list', response_model=Resp_Body_Base)
|
||||
async def get_account_obj_fundraising_list(
|
||||
account_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
hidden: str = 'not_hidden', # hidden, not_hidden, all
|
||||
priority: str = 'all', # priority, not_priority, all
|
||||
|
||||
inc_account_cfg: bool = False,
|
||||
inc_fundraising_cfg: bool = False,
|
||||
inc_product: bool = False,
|
||||
inc_product_list: bool = False,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
account_id = commons.x_account_id
|
||||
|
||||
# Updated 2021-12-13
|
||||
if fundraising_rec_list_result := get_fundraising_rec_list(
|
||||
account_id = account_id,
|
||||
|
||||
enabled = commons.enabled,
|
||||
hidden = hidden,
|
||||
priority = priority,
|
||||
|
||||
limit = commons.limit,
|
||||
offset = commons.offset,
|
||||
):
|
||||
fundraising_result_list = []
|
||||
for fundraising_rec in fundraising_rec_list_result:
|
||||
if load_fundraising_result := load_fundraising_obj(
|
||||
fundraising_id = fundraising_rec.get('fundraising_id', None),
|
||||
|
||||
inc_fundraising_cfg = inc_fundraising_cfg,
|
||||
inc_product_list = inc_product_list,
|
||||
|
||||
enabled = commons.enabled,
|
||||
limit = commons.limit,
|
||||
offset = commons.offset,
|
||||
|
||||
# exclude_unset = commons.exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
fundraising_result_list.append(load_fundraising_result)
|
||||
else:
|
||||
fundraising_result_list.append(None)
|
||||
response_data = fundraising_result_list
|
||||
elif isinstance(fundraising_rec_list_result, list) or fundraising_rec_list_result is None: # Empty list or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=None, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
|
||||
log.debug(response_data)
|
||||
|
||||
return mk_resp(data=response_data, response=commons.response)
|
||||
# ### END ### API Event ### get_account_obj_fundraising_list() ###
|
||||
246
app/routers/archive/grant.py
Normal file
246
app/routers/archive/grant.py
Normal file
@@ -0,0 +1,246 @@
|
||||
import datetime, json
|
||||
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, 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, get_id_random, 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.grant_methods import create_update_grant_obj, load_grant_obj, get_grant_rec_list
|
||||
# from app.methods.grant_methods import create_update_grant_obj, load_grant_obj, get_grant_rec_list, remove_grant_obj
|
||||
|
||||
from app.models.grant_models import Grant_In
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# # ### BEGIN ### API Grant ### post_grant_obj() ###
|
||||
# # Updated 2023-03-22
|
||||
# @router.post('/grant', response_model=Resp_Body_Base)
|
||||
# async def post_grant_obj(
|
||||
# grant_obj: Grant_In,
|
||||
# # account_id: str = Query(..., min_length=11, max_length=22),
|
||||
# event_id: str = Query(..., min_length=11, max_length=22),
|
||||
|
||||
# return_obj: bool = False,
|
||||
# inc_event_abstract: bool = False,
|
||||
|
||||
# commons: Common_Route_Params = Depends(common_route_params),
|
||||
# ):
|
||||
# log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
# log.debug(locals())
|
||||
|
||||
# if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass
|
||||
# else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Event ID was invalid or not found.')
|
||||
|
||||
# # There should probably be a check for the event ID before calling the create function?
|
||||
# if create_grant_obj_result := create_update_grant_obj(
|
||||
# grant_obj = grant_obj,
|
||||
# account_id = commons.account_id,
|
||||
# event_id = event_id,
|
||||
|
||||
# return_outline = False,
|
||||
# ): pass
|
||||
# else: return mk_resp(data=False, status_code=400, response=commons.response, status_message='The grant was not created. Check the field names and data types.')
|
||||
|
||||
# if isinstance(create_grant_obj_result, int):
|
||||
# grant_id = create_grant_obj_result
|
||||
# if return_obj:
|
||||
# if load_grant_obj_result := load_grant_obj(
|
||||
# grant_id = grant_id,
|
||||
# inc_event_file_list = inc_event_file_list,
|
||||
# inc_event_person = inc_event_person,
|
||||
# inc_event_presentation_list = inc_event_presentation_list,
|
||||
# inc_event_presenter_list = inc_event_presenter_list,
|
||||
# ):
|
||||
# data = load_grant_obj_result
|
||||
# else:
|
||||
# data = False
|
||||
# else:
|
||||
# grant_id = grant_id
|
||||
# grant_id_random = get_id_random(record_id=grant_id, table_name='grant')
|
||||
# data = {}
|
||||
# data['grant_id'] = grant_id
|
||||
# data['grant_id_random'] = grant_id_random
|
||||
# return mk_resp(data=data, response=commons.response, status_message='The grant was created.')
|
||||
# else:
|
||||
# return mk_resp(data=False, status_code=400, response=commons.response, status_message='The result from trying to create an grant was unexpected.')
|
||||
# # ### END ### API Grant ### post_grant_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Grant ### patch_grant_obj() ###
|
||||
# Updated 2023-06-28
|
||||
@router.patch('/grant/{grant_id}', response_model=Resp_Body_Base)
|
||||
async def patch_grant_obj(
|
||||
grant_obj: Grant_In,
|
||||
grant_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
return_obj: bool = True,
|
||||
inc_event_abstract: bool = False,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if grant_id := redis_lookup_id_random(record_id_random=grant_id, table_name='grant'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Grant ID was invalid or not found.')
|
||||
|
||||
if update_grant_obj_result := create_update_grant_obj(
|
||||
grant_obj = grant_obj,
|
||||
grant_id = grant_id,
|
||||
return_outline = False,
|
||||
): pass
|
||||
else: return mk_resp(data=False, status_code=400, response=commons.response, status_message='The grant was not created. Check the field names and data types.')
|
||||
|
||||
if update_grant_obj_result:
|
||||
if return_obj:
|
||||
if load_grant_obj_result := load_grant_obj(
|
||||
grant_id = grant_id,
|
||||
inc_event_abstract = inc_event_abstract,
|
||||
):
|
||||
data = load_grant_obj_result
|
||||
else:
|
||||
data = False
|
||||
else:
|
||||
grant_id_random = get_id_random(record_id=grant_id, table_name='grant')
|
||||
data = {}
|
||||
data['grant_id'] = grant_id
|
||||
data['grant_id_random'] = grant_id_random
|
||||
return mk_resp(data=data, response=commons.response, status_message='The grant was created or updated.')
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response, status_message='The result from trying to create an grant was unexpected.')
|
||||
# ### END ### API Grant ### patch_grant_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Grant ### get_grant_obj() ###
|
||||
# Updated 2023-03-22
|
||||
@router.get('/grant/{grant_id}', response_model=Resp_Body_Base)
|
||||
async def get_grant_obj(
|
||||
grant_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
inc_event_abstract: bool = False,
|
||||
|
||||
hidden: str = 'not_hidden', # hidden, not_hidden, all
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
# time.sleep(.5)
|
||||
|
||||
# ### SECTION ### Secondary data validation
|
||||
grant_id_random = grant_id # This is used later for the response data
|
||||
if grant_id := redis_lookup_id_random(record_id_random=grant_id, table_name='grant'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The Grant ID was invalid or not found.')
|
||||
|
||||
if grant_obj_result := load_grant_obj(
|
||||
grant_id = grant_id,
|
||||
|
||||
enabled = commons.enabled,
|
||||
hidden = hidden, # hidden, not_hidden, all
|
||||
|
||||
inc_event_abstract = inc_event_abstract,
|
||||
):
|
||||
log.info('Loading successful. Returning result')
|
||||
log.debug(grant_obj_result)
|
||||
return mk_resp(data=grant_obj_result, response=commons.response) # Success
|
||||
elif isinstance(grant_obj_result, list) or grant_obj_result is None: # Empty list or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=None, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
# ### END ### API Grant ### get_grant_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Grant ### get_event_id_grant_obj_li() ###
|
||||
# Updated 2023-06-23
|
||||
@router.get('/event/{event_id}/grant/list', response_model=Resp_Body_Base)
|
||||
async def get_event_id_grant_obj_li(
|
||||
event_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
inc_event_abstract: bool = False,
|
||||
|
||||
hidden: str = 'not_hidden', # hidden, not_hidden, all
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if event_id := redis_lookup_id_random(record_id_random=event_id, table_name='event'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response)
|
||||
|
||||
# Updated 2023-06-23
|
||||
if grant_rec_list_result := get_grant_rec_list(
|
||||
event_id = event_id,
|
||||
|
||||
hidden = hidden, # hidden, not_hidden, all
|
||||
|
||||
enabled = commons.enabled,
|
||||
limit = commons.limit,
|
||||
offset = commons.offset,
|
||||
):
|
||||
grant_result_list = []
|
||||
for grant_rec in grant_rec_list_result:
|
||||
if load_grant_result := load_grant_obj(
|
||||
grant_id = grant_rec.get('grant_id', None),
|
||||
|
||||
hidden = hidden,
|
||||
|
||||
enabled = commons.enabled,
|
||||
limit = commons.limit,
|
||||
inc_event_abstract = inc_event_abstract,
|
||||
):
|
||||
grant_result_list.append(load_grant_result)
|
||||
else:
|
||||
grant_result_list.append(None)
|
||||
response_data = grant_result_list
|
||||
elif isinstance(grant_rec_list_result, list) or grant_rec_list_result is None: # Empty list or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=False, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=commons.response)
|
||||
# ### END ### API Grant ### get_event_id_grant_obj_li() ###
|
||||
|
||||
|
||||
# # ### BEGIN ### API Grant ### delete_grant_obj() ###
|
||||
# # Updated 2023-03-22
|
||||
# @router.delete('/grant/{grant_id}', response_model=Resp_Body_Base)
|
||||
# def delete_grant_obj(
|
||||
# grant_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
# method: str = None, # None, delete, disable, hide
|
||||
|
||||
# commons: Common_Route_Params = Depends(common_route_params),
|
||||
# ):
|
||||
# log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
# log.debug(locals())
|
||||
|
||||
# # ### SECTION ### Secondary data validation
|
||||
# if grant_id := redis_lookup_id_random(record_id_random=grant_id, table_name='grant'): pass
|
||||
# else: return mk_resp(data=None, status_code=404, response=response, status_message='The Grant ID was invalid or not found.')
|
||||
|
||||
# if grant_obj_result := remove_grant_obj(
|
||||
# grant_id = grant_id,
|
||||
# method = method,
|
||||
# ):
|
||||
# log.info('Delete successful. Returning True')
|
||||
# return mk_resp(data=True, response=response) # Success
|
||||
# elif grant_obj_result is None: # None
|
||||
# log.info('No results')
|
||||
# return mk_resp(data=None, status_code=404, response=response) # Not Found
|
||||
# else:
|
||||
# log.warning('Likely bad request')
|
||||
# return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
# # ### END ### API Grant ### delete_grant_obj() ###
|
||||
135
app/routers/archive/log_client_viewing.py
Normal file
135
app/routers/archive/log_client_viewing.py
Normal file
@@ -0,0 +1,135 @@
|
||||
import datetime, pytz, 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
|
||||
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.log_client_viewing_methods import get_log_client_viewing_rec_list, load_log_client_viewing_obj
|
||||
|
||||
from app.models.log_client_viewing_models import Log_Client_Viewing_Base
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/log/client_viewing', response_model=Resp_Body_Base)
|
||||
async def post_log_client_viewing_obj(
|
||||
obj: Log_Client_Viewing_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'log_client_viewing'
|
||||
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('/log/client_viewing/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_log_client_viewing_obj(
|
||||
obj: Log_Client_Viewing_Base,
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'log_client_viewing'
|
||||
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
|
||||
|
||||
|
||||
# ### BEGIN ### API Log Client Viewing Methods ### get_account_log_client_viewing_obj_li() ###
|
||||
# Updated 2021-07-01
|
||||
@router.get('/account/{account_id}/log/client_viewing/list', response_model=Resp_Body_Base)
|
||||
async def get_account_log_client_viewing_obj_li(
|
||||
account_id: str = Path(min_length=11, max_length=22),
|
||||
enabled: str = 'enabled',
|
||||
limit: int = 1000,
|
||||
from_datetime: datetime.datetime = None,
|
||||
to_datetime: datetime.datetime = None,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
|
||||
else: return mk_resp(data=None, status_code=404)
|
||||
|
||||
# Updated 2021-07-02
|
||||
if log_client_viewing_rec_list_result := get_log_client_viewing_rec_list(
|
||||
account_id = account_id,
|
||||
from_datetime = from_datetime,
|
||||
to_datetime = to_datetime,
|
||||
limit = limit,
|
||||
enabled = enabled,
|
||||
):
|
||||
log_client_viewing_result_list = []
|
||||
for log_client_viewing_rec in log_client_viewing_rec_list_result:
|
||||
if load_log_client_viewing_result := load_log_client_viewing_obj(
|
||||
log_client_viewing_id = log_client_viewing_rec.get('log_client_viewing_id', None),
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
log_client_viewing_result_list.append(load_log_client_viewing_result)
|
||||
else:
|
||||
log_client_viewing_result_list.append(None)
|
||||
response_data = log_client_viewing_result_list
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data)
|
||||
# ### END ### API Log Client Viewing Methods ### get_account_log_client_viewing_obj_li() ###
|
||||
|
||||
|
||||
@router.delete('/log/client_viewing/{log_client_viewing_obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_log_client_viewing_obj(
|
||||
log_client_viewing_obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'log_client_viewing'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=log_client_viewing_obj_id,
|
||||
)
|
||||
return result
|
||||
46
app/routers/archive/membership_cfg.py
Normal file
46
app/routers/archive/membership_cfg.py
Normal file
@@ -0,0 +1,46 @@
|
||||
import datetime
|
||||
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
|
||||
from app.config import settings
|
||||
from app.db_sql import 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.membership_cfg_methods import load_membership_cfg_obj
|
||||
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Cfg ### get_account_obj_membership_cfg() ###
|
||||
# Updated 2021-07-13
|
||||
@router.get('/account/{account_id}/membership/cfg', response_model=Resp_Body_Base)
|
||||
async def get_account_obj_membership_cfg(
|
||||
account_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
|
||||
else: return mk_resp(data=None, status_code=404)
|
||||
|
||||
if membership_cfg_result := load_membership_cfg_obj(
|
||||
account_id = account_id,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
model_as_dict = True,
|
||||
):
|
||||
response_data = membership_cfg_result
|
||||
else: return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data)
|
||||
# ### END ### API Membership Cfg ### get_account_obj_membership_cfg() ###
|
||||
321
app/routers/archive/membership_group.py
Normal file
321
app/routers/archive/membership_group.py
Normal file
@@ -0,0 +1,321 @@
|
||||
import datetime
|
||||
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
|
||||
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.membership_group_methods import get_membership_group_rec_list, load_membership_group_obj
|
||||
|
||||
from app.models.membership_group_models import Membership_Group_Base
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/membership/group', response_model=Resp_Body_Base)
|
||||
async def post_membership_group_obj(
|
||||
obj: Membership_Group_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_group'
|
||||
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('/membership/group/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_membership_group_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Membership_Group_Base = None,
|
||||
#x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_group'
|
||||
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('/membership/group/list', response_model=Resp_Body_Base)
|
||||
async def get_membership_group_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,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_group'
|
||||
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
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Group Methods ### get_account_membership_group_obj_li() ###
|
||||
# Updated 2021-07-01
|
||||
@router.get('/account/{account_id}/membership/group/list', response_model=Resp_Body_Base)
|
||||
async def get_account_membership_group_obj_li(
|
||||
account_id: str = Path(min_length=11, max_length=22),
|
||||
# product_id: Optional[str] = Query(None, min_length=1, max_length=22),
|
||||
# type_level: Optional[int] = None,
|
||||
enabled: str = 'enabled',
|
||||
limit: int = 1000,
|
||||
inc_address: bool = False,
|
||||
inc_contact: bool = False,
|
||||
inc_membership_cfg: bool = False,
|
||||
inc_membership_person_group_list: bool = False,
|
||||
inc_organization: bool = False,
|
||||
inc_person: bool = False,
|
||||
inc_product_list: bool = False,
|
||||
inc_user: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
|
||||
else: return mk_resp(data=None, status_code=404)
|
||||
|
||||
# Updated 2021-07-01
|
||||
if membership_group_rec_list_result := get_membership_group_rec_list(
|
||||
account_id = account_id,
|
||||
# product_id = product_id,
|
||||
# type_level = type_level,
|
||||
limit = limit,
|
||||
enabled = enabled,
|
||||
):
|
||||
membership_group_result_list = []
|
||||
for membership_group_rec in membership_group_rec_list_result:
|
||||
if load_membership_group_result := load_membership_group_obj(
|
||||
membership_group_id = membership_group_rec.get('membership_group_id', None),
|
||||
enabled = enabled,
|
||||
limit = limit,
|
||||
inc_address = inc_address,
|
||||
inc_contact = inc_contact,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
inc_membership_person_group_list = inc_membership_person_group_list,
|
||||
inc_organization = inc_organization,
|
||||
inc_person = inc_person,
|
||||
inc_product_list = inc_product_list,
|
||||
inc_user = inc_user,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
membership_group_result_list.append(load_membership_group_result)
|
||||
else:
|
||||
membership_group_result_list.append(None)
|
||||
response_data = membership_group_result_list
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data)
|
||||
# ### END ### API Membership Group Methods ### get_account_membership_group_obj_li() ###
|
||||
|
||||
|
||||
# Look up is only for account, person, or user records
|
||||
@router.get('/membership/group/lookup', response_model=Resp_Body_Base)
|
||||
async def lookup_membership_group_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_person_profile: bool = True,
|
||||
inc_membership_cfg: bool = True,
|
||||
inc_extended_profile: bool = True,
|
||||
inc_person: bool = True,
|
||||
inc_user: bool = True,
|
||||
by_alias: bool = True,
|
||||
exclude_unset: bool = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_group'
|
||||
base_name = Membership_Group_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, response=response) # Not Found
|
||||
log.setLevel(logging.INFO) # 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_group`.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_group`.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_group`.user_id = :user_id"""
|
||||
sql_limit = 'LIMIT 1'
|
||||
elif for_obj_type == 'membership_group' and for_obj_id:
|
||||
data['membership_group_id'] = for_obj_id
|
||||
sql_where_for_obj_type = """`membership_group`.id = :membership_group_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, response=response) # Bad Request
|
||||
|
||||
sql = f"""
|
||||
SELECT id AS 'membership_group_id', id_random AS 'membership_group_id_random'
|
||||
FROM `membership_group` AS `membership_group`
|
||||
WHERE {sql_where_for_obj_type}
|
||||
{sql_limit}
|
||||
"""
|
||||
|
||||
# This will return a list if selecting by account ID
|
||||
membership_group_obj_result = sql_select(data=data, sql=sql, as_list=as_list)
|
||||
if isinstance(membership_group_obj_result, dict):
|
||||
membership_group_id = membership_group_obj_result.get('membership_group_id', None)
|
||||
membership_group_obj = load_membership_group_obj(
|
||||
membership_group_id = membership_group_id,
|
||||
inc_membership_person_profile = inc_membership_person_profile,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
inc_extended_profile = inc_extended_profile,
|
||||
inc_person = inc_person,
|
||||
inc_user = inc_user,
|
||||
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
data = membership_group_obj
|
||||
elif isinstance(membership_group_obj_result, list):
|
||||
membership_group_obj_li = []
|
||||
for membership_group_obj in membership_group_obj_result:
|
||||
membership_group_id = membership_group_obj.get('membership_group_id', None)
|
||||
membership_group_obj_li.append(
|
||||
load_membership_group_obj(
|
||||
membership_group_id = membership_group_id,
|
||||
inc_membership_person_profile = inc_membership_person_profile,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
inc_extended_profile = inc_extended_profile,
|
||||
inc_person = inc_person,
|
||||
inc_user = inc_user,
|
||||
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
)
|
||||
data = membership_group_obj_li
|
||||
else:
|
||||
log.debug(membership_group_obj_result)
|
||||
return mk_resp(data=None, status_code=404) # Not Found
|
||||
return mk_resp(data=data)
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Group ### get_membership_group_obj() ###
|
||||
# Working well as of 2021-06-21. Using as a template for other routes.
|
||||
@router.get('/membership/group/{membership_group_id}', response_model=Resp_Body_Base)
|
||||
async def get_membership_group_obj(
|
||||
membership_group_id: str = Path(min_length=11, max_length=22),
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
inc_address: bool = False, # Per member
|
||||
inc_contact: bool = False, # Per member
|
||||
inc_membership_cfg: bool = False,
|
||||
inc_membership_group_list: bool = False, # List of groups per member
|
||||
inc_membership_person_group_list: bool = False, # List of members belonging to this group
|
||||
inc_membership_person_profile: bool = False, # Per member
|
||||
inc_organization: bool = False, # Per member
|
||||
inc_person: bool = False, # Per member
|
||||
inc_product: bool = False, # Per member
|
||||
inc_product_list: bool = False,
|
||||
inc_user: bool = False, # Per member
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if membership_group_id := redis_lookup_id_random(record_id_random=membership_group_id, table_name='membership_group'): pass
|
||||
else:
|
||||
return mk_resp(data=None, status_code=404)
|
||||
|
||||
if membership_group_result := load_membership_group_obj(
|
||||
membership_group_id = membership_group_id,
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict, # NOTE: returning model as a dict
|
||||
enabled = enabled,
|
||||
inc_address = inc_address,
|
||||
inc_contact = inc_contact,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
# inc_membership_group_list = inc_membership_group_list,
|
||||
inc_membership_person_group_list = inc_membership_person_group_list,
|
||||
inc_membership_person_profile = inc_membership_person_profile,
|
||||
inc_organization = inc_organization,
|
||||
inc_person = inc_person,
|
||||
# inc_product = inc_product,
|
||||
inc_product_list = inc_product_list,
|
||||
inc_user = inc_user,
|
||||
):
|
||||
pass
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=membership_group_result)
|
||||
# ### END ### API Membership ### get_membership_group_obj() ###
|
||||
|
||||
|
||||
@router.delete('/membership/group/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_membership_group_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_group'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
439
app/routers/archive/membership_person.py
Normal file
439
app/routers/archive/membership_person.py
Normal file
@@ -0,0 +1,439 @@
|
||||
import datetime
|
||||
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, common_route_params, Common_Route_Params
|
||||
from app.config import settings
|
||||
from app.db_sql import sql_enable_part, sql_insert, sql_update, sql_insert_or_update, sql_limit_offset_part, 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.membership_person_methods import create_membership_person_obj, get_membership_person_rec_list, load_membership_person_obj, update_membership_person_obj
|
||||
|
||||
from app.models.common_field_schema import default_num_bytes
|
||||
from app.models.membership_person_models import Membership_Person_Base
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Person ### post_membership_person_obj() ###
|
||||
# Using create_membership_person_obj()
|
||||
# Updated 2022-01-11
|
||||
@router.post('/membership/person', response_model=Resp_Body_Base)
|
||||
async def post_membership_person_obj(
|
||||
membership_person_obj: Membership_Person_Base,
|
||||
person_id: str = Query(..., min_length=11, max_length=22),
|
||||
|
||||
create_sub_obj: bool = False,
|
||||
fail_any: bool = True, # Fail if any thing goes wrong for sub objects
|
||||
|
||||
inc_membership_cfg: bool = False,
|
||||
inc_membership_person_group_list: bool = False, # List of membership group for a person - 2022-01-11
|
||||
inc_membership_person_profile: bool = False, # Membership profile for a person - 2022-01-11
|
||||
inc_membership_person_type: bool = False, # Primary membership type for a person - 2022-01-11
|
||||
return_obj: bool = True,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
# if not person_id:
|
||||
# person_id = membership_person_obj.person_id
|
||||
# person_id_random = membership_person_obj.person_id_random
|
||||
# log.debug(f'Person ID: {person_id}, Person ID Random: {person_id_random}')
|
||||
|
||||
# ### SECTION ### Secondary data validation
|
||||
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, status_message='The person ID was invalid or not found.')
|
||||
|
||||
# ### SECTION ### Process data
|
||||
if membership_person_id := create_membership_person_obj(
|
||||
account_id = commons.x_account_id,
|
||||
person_id = person_id,
|
||||
membership_person_dict_obj = membership_person_obj,
|
||||
): pass
|
||||
else: return mk_resp(data=False, status_code=400, response=commons.response, status_message='The membership person was not created. Check the field names and data types.') # Bad Request
|
||||
|
||||
# ### SECTION ### Return successful results
|
||||
if return_obj:
|
||||
if load_membership_person_obj_result := load_membership_person_obj(
|
||||
membership_person_id = membership_person_id,
|
||||
enabled = commons.enabled,
|
||||
):
|
||||
data = load_membership_person_obj_result
|
||||
else:
|
||||
data = False
|
||||
return mk_resp(data=data, response=commons.response, status_message='The membership person was probably created, but there was a problem returning the data.')
|
||||
else:
|
||||
membership_person_id_random = get_id_random(record_id=membership_person_id, table_name='membership_person')
|
||||
data = {}
|
||||
data['membership_person_id'] = membership_person_id
|
||||
data['membership_person_id_random'] = membership_person_id_random
|
||||
return mk_resp(data=data, response=commons.response)
|
||||
# ### END ### API Membership Person ### post_membership_person_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Person ### patch_membership_person_obj() ###
|
||||
# Using update_membership_person_obj()
|
||||
# Updated 2022-01-11
|
||||
@router.patch('/membership/person/{membership_person_id}', response_model=Resp_Body_Base)
|
||||
async def patch_membership_person_obj(
|
||||
membership_person_obj: Membership_Person_Base,
|
||||
membership_person_id: Optional[str] = Path(min_length=11, max_length=22),
|
||||
|
||||
create_sub_obj: bool = False,
|
||||
fail_any: bool = True, # Fail if any thing goes wrong for sub objects
|
||||
|
||||
inc_membership_cfg: bool = False,
|
||||
inc_membership_person_group_list: bool = False, # List of membership group for a person - 2022-01-11
|
||||
inc_membership_person_profile: bool = False, # Membership profile for a person - 2022-01-11
|
||||
inc_membership_person_type: bool = False, # Primary membership type for a person - 2022-01-11
|
||||
return_obj: bool = True,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
log.debug(f'Membership Person ID: {membership_person_id}')
|
||||
|
||||
membership_person_id_random = membership_person_id # This is used later for the response data
|
||||
|
||||
# ### SECTION ### Secondary data validation
|
||||
if membership_person_id := redis_lookup_id_random(record_id_random=membership_person_id, table_name='membership_person'): pass
|
||||
else: return mk_resp(data=False, status_code=404, response=commons.response, status_message='The membership person ID was invalid or not found.') # Not Found
|
||||
|
||||
# ### SECTION ### Process data
|
||||
if update_membership_person_obj_result := update_membership_person_obj(
|
||||
membership_person_id = membership_person_id,
|
||||
membership_person_dict_obj = membership_person_obj,
|
||||
): pass
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=commons.response, status_message='The membership person was not updated. Check the field names and data types.') # Bad Request
|
||||
|
||||
# ### SECTION ### Return successful results
|
||||
if return_obj:
|
||||
if load_membership_person_obj_result := load_membership_person_obj(
|
||||
membership_person_id = membership_person_id,
|
||||
enabled = commons.enabled,
|
||||
):
|
||||
data = load_membership_person_obj_result
|
||||
else:
|
||||
data = False
|
||||
return mk_resp(data=data, response=commons.response, status_message='The membership person was probably updated, but there was a problem returning the data.')
|
||||
else:
|
||||
data = {}
|
||||
data['membership_person_id'] = membership_person_id
|
||||
data['membership_person_id_random'] = membership_person_id_random
|
||||
return mk_resp(data=data, response=commons.response, status_message='The membership person was updated.')
|
||||
# ### END ### API Membership Person ### patch_membership_person_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Person ### get_membership_person_obj() ###
|
||||
# Updated 2022-01-11
|
||||
@router.get('/membership/person/{membership_person_id}', response_model=Resp_Body_Base)
|
||||
async def get_membership_person_obj(
|
||||
membership_person_id: str = Path(min_length=11, max_length=22),
|
||||
# inc_address: bool = False, # Per member
|
||||
# inc_contact: bool = False, # Per member
|
||||
inc_membership_cfg: bool = False,
|
||||
# inc_membership_group: bool = False, # The primary membership group for a person
|
||||
inc_membership_person_group_list: bool = False, # List of membership group for a person - 2022-01-11
|
||||
# inc_membership_person_profile: bool = False,
|
||||
# inc_membership_person_profile_cust: bool = False, # Extended profile?
|
||||
inc_membership_person_profile: bool = False, # Membership profile for a person - 2022-01-11
|
||||
inc_membership_person_type: bool = False, # Primary membership type for a person - 2022-01-11
|
||||
# inc_membership_type_list: bool = False, # The list of all membership types a person is a part of
|
||||
# inc_membership_person_type: bool = False,
|
||||
# inc_order: bool = False,
|
||||
# inc_organization: bool = False,
|
||||
# inc_person: bool = False,
|
||||
# inc_product: bool = False, # Per member or group member belongs to
|
||||
# inc_product_list: bool = False,
|
||||
# inc_user: bool = False, # Per member
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if membership_person_id := redis_lookup_id_random(record_id_random=membership_person_id, table_name='membership_person'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response)
|
||||
|
||||
if membership_person_rec_result := load_membership_person_obj(
|
||||
membership_person_id = membership_person_id,
|
||||
limit = commons.limit,
|
||||
by_alias = commons.by_alias,
|
||||
exclude_unset = commons.exclude_unset,
|
||||
# model_as_dict = commons.model_as_dict,
|
||||
enabled = commons.enabled,
|
||||
# inc_address = inc_address,
|
||||
# inc_contact = inc_contact,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
inc_membership_person_group_list = inc_membership_person_group_list,
|
||||
# inc_membership_person_profile = inc_membership_person_profile,
|
||||
# inc_membership_person_profile_cust = inc_membership_person_profile_cust,
|
||||
inc_membership_person_profile = inc_membership_person_profile,
|
||||
inc_membership_person_type = inc_membership_person_type,
|
||||
# inc_membership_person_type_list = inc_membership_person_type_list, # All the membership types they are a part of.
|
||||
# inc_membership_type = inc_membership_type,
|
||||
# inc_membership_type_list = inc_membership_type_list,
|
||||
# inc_order = inc_order,
|
||||
# inc_organization = inc_organization,
|
||||
# inc_person = inc_person,
|
||||
# inc_product = inc_product,
|
||||
# inc_product_list = inc_product_list,
|
||||
# inc_user = inc_user,
|
||||
):
|
||||
response_data = membership_person_rec_result
|
||||
elif membership_person_rec_result is None: # Empty dict or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=False, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=commons.response)
|
||||
# ### END ### API Membership Person ### get_membership_person_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Person ### get_person_obj_membership_person() ###
|
||||
# Updated 2022-01-11
|
||||
@router.get('/person/{person_id}/membership/person', response_model=Resp_Body_Base)
|
||||
async def get_person_obj_membership_person(
|
||||
person_id: str = Path(min_length=11, max_length=22),
|
||||
# inc_address: bool = False, # Per member
|
||||
# inc_contact: bool = False, # Per member
|
||||
inc_membership_cfg: bool = False,
|
||||
# inc_membership_group: bool = False, # The primary membership group for a person
|
||||
inc_membership_person_group_list: bool = False, # List of membership group for a person - 2022-01-11
|
||||
# inc_membership_person_group_list: bool = False,
|
||||
# inc_membership_person_profile_cust: bool = False, # Extended profile?
|
||||
inc_membership_person_profile: bool = False, # Membership profile for a person - 2022-01-11
|
||||
inc_membership_person_type: bool = False, # Primary membership type for a person - 2022-01-11
|
||||
# inc_membership_type_list: bool = False, # The list of all membership types a person is a part of
|
||||
# inc_membership_type: bool = False,
|
||||
# inc_order: bool = False,
|
||||
# inc_organization: bool = False,
|
||||
# inc_product: bool = False, # The product the person actually purchased for a member_type or member_group
|
||||
# inc_product_list: bool = False, # The list of products that give access to a member_type or member_group
|
||||
# inc_user: bool = False,
|
||||
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
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response)
|
||||
|
||||
if membership_person_rec := sql_select(table_name='membership_person', field_name='person_id', field_value=person_id): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response)
|
||||
|
||||
log.debug(membership_person_rec)
|
||||
|
||||
membership_person_id = membership_person_rec.get('id') # 'membership_person_id' is using the view
|
||||
log.debug(membership_person_id)
|
||||
if membership_person_rec_result := load_membership_person_obj(
|
||||
membership_person_id = membership_person_id,
|
||||
limit = commons.limit,
|
||||
by_alias = commons.by_alias,
|
||||
exclude_unset = commons.exclude_unset,
|
||||
enabled = commons.enabled,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
inc_membership_person_group_list = inc_membership_person_group_list, # List of membership group for a person - 2022-01-11
|
||||
inc_membership_person_profile = inc_membership_person_profile, # Membership profile for a person - 2022-01-11
|
||||
inc_membership_person_type = inc_membership_person_type, # Primary membership type for a person - 2022-01-11
|
||||
):
|
||||
response_data = membership_person_rec_result
|
||||
elif membership_person_rec_result is None: # Empty dict or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=False, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=commons.response)
|
||||
# ### END ### API Membership Person ### get_person_obj_membership_person() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Person ### get_account_obj_membership_person_list() ###
|
||||
# Updated 2022-01-11
|
||||
@router.get('/account/{account_id}/membership/person/list', response_model=Resp_Body_Base)
|
||||
async def get_account_obj_membership_person_list(
|
||||
account_id: str = Path(min_length=11, max_length=22),
|
||||
# inc_account_cfg: bool = False,
|
||||
# inc_address: bool = False, # Under contact
|
||||
# inc_contact: bool = False,
|
||||
inc_membership_cfg: bool = False,
|
||||
# inc_membership_group: bool = False,
|
||||
inc_membership_person_group_list: bool = False, # List of membership group for a person - 2022-01-11
|
||||
# inc_membership_person: bool = False,
|
||||
# inc_membership_person_list: bool = False,
|
||||
# inc_membership_person_profile: bool = False,
|
||||
# inc_membership_person_profile_cust: bool = False,
|
||||
inc_membership_person_profile: bool = False, # Membership profile for a person - 2022-01-11
|
||||
inc_membership_person_type: bool = False, # Primary membership type for a person - 2022-01-11
|
||||
# inc_membership_type_list: bool = False,
|
||||
# inc_order: bool = False,
|
||||
# inc_organization: bool = False,
|
||||
# inc_person: bool = False,
|
||||
# inc_product: bool = False,
|
||||
# inc_product_list: bool = False,
|
||||
# inc_user: bool = False,
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response)
|
||||
|
||||
response_data = None
|
||||
# log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
|
||||
# Updated 2021-06-23
|
||||
if membership_person_rec_list_result := get_membership_person_rec_list(
|
||||
for_obj_type = 'account',
|
||||
for_obj_id = account_id,
|
||||
limit = commons.limit,
|
||||
enabled = commons.enabled,
|
||||
):
|
||||
membership_person_result_list = []
|
||||
for membership_person_rec in membership_person_rec_list_result:
|
||||
if load_membership_person_result := load_membership_person_obj(
|
||||
membership_person_id = membership_person_rec.get('membership_person_id', None),
|
||||
limit = commons.limit,
|
||||
by_alias = commons.by_alias,
|
||||
exclude_unset = commons.exclude_unset,
|
||||
# model_as_dict = commons.model_as_dict,
|
||||
enabled = commons.enabled,
|
||||
# inc_address = inc_address,
|
||||
# inc_contact = inc_contact,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
inc_membership_person_group_list = inc_membership_person_group_list,
|
||||
# inc_membership_person_group_list = inc_membership_person_group_list,
|
||||
# inc_membership_person = inc_membership_person,
|
||||
# inc_membership_person_list = inc_membership_person_list,
|
||||
inc_membership_person_profile = inc_membership_person_profile,
|
||||
inc_membership_person_type = inc_membership_person_type,
|
||||
# inc_order = inc_order,
|
||||
# inc_organization = inc_organization,
|
||||
# inc_person = inc_person,
|
||||
# inc_product = inc_product,
|
||||
# inc_product_list = inc_product_list,
|
||||
# inc_user = inc_user,
|
||||
):
|
||||
membership_person_result_list.append(load_membership_person_result)
|
||||
else:
|
||||
membership_person_result_list.append(None)
|
||||
response_data = membership_person_result_list
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=commons.response)
|
||||
# ### END ### API Membership Person ### get_account_obj_membership_person_list() ###
|
||||
|
||||
|
||||
# Look up is only for account, person, or user records
|
||||
# Deprecated 2022-01-11
|
||||
@router.get('/membership/person/lookup', response_model=Resp_Body_Base)
|
||||
async def lookup_membership_person_obj(
|
||||
for_obj_id: Union[int,str],
|
||||
for_obj_type: str = Query(..., min_length=2, max_length=50),
|
||||
inc_membership_cfg: bool = True,
|
||||
inc_membership_person_group_list: bool = False, # List of membership group for a person - 2022-01-11
|
||||
inc_membership_person_profile: bool = False, # Membership profile for a person - 2022-01-11
|
||||
inc_membership_person_type: bool = False, # Primary membership type for a person - 2022-01-11
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_person'
|
||||
base_name = Membership_Person_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, response=commons.response) # Not Found
|
||||
log.setLevel(logging.INFO) # 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_person`.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`.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_person`.user_id = :user_id"""
|
||||
sql_limit = 'LIMIT 1'
|
||||
elif for_obj_type == 'membership_person' and for_obj_id:
|
||||
data['membership_person_id'] = for_obj_id
|
||||
sql_where_for_obj_type = """`membership_person`.id = :membership_person_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, response=commons.response) # Bad Request
|
||||
|
||||
sql = f"""
|
||||
SELECT id AS 'membership_person_id', id_random AS 'membership_person_id_random'
|
||||
FROM `membership_person` AS `membership_person`
|
||||
WHERE {sql_where_for_obj_type}
|
||||
{sql_limit}
|
||||
"""
|
||||
|
||||
# This will return a list if selecting by account ID
|
||||
membership_person_obj_result = sql_select(data=data, sql=sql, as_list=as_list)
|
||||
if isinstance(membership_person_obj_result, dict):
|
||||
membership_person_id = membership_person_obj_result.get('membership_person_id', None)
|
||||
membership_person_obj = load_membership_person_obj(
|
||||
membership_person_id = membership_person_id,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
inc_membership_person_group_list = inc_membership_person_group_list,
|
||||
inc_membership_person_profile = inc_membership_person_profile,
|
||||
inc_membership_person_type = inc_membership_person_type,
|
||||
).dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset)
|
||||
data = membership_person_obj
|
||||
elif isinstance(membership_person_obj_result, list):
|
||||
membership_person_obj_li = []
|
||||
for membership_person_obj in membership_person_obj_result:
|
||||
membership_person_id = membership_person_obj.get('membership_person_id', None)
|
||||
membership_person_obj_li.append(
|
||||
load_membership_person_obj(
|
||||
membership_person_id = membership_person_id,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
inc_membership_person_group_list = inc_membership_person_group_list,
|
||||
inc_membership_person_profile = inc_membership_person_profile,
|
||||
inc_membership_person_type = inc_membership_person_type,
|
||||
).dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset)
|
||||
)
|
||||
data = membership_person_obj_li
|
||||
else:
|
||||
log.debug(membership_person_obj_result)
|
||||
return mk_resp(data=None, status_code=404, response=commons.response) # Not Found
|
||||
return mk_resp(data=data, response=commons.response)
|
||||
|
||||
|
||||
@router.delete('/membership/person/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_membership_person_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_person'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
123
app/routers/archive/membership_person_group.py
Normal file
123
app/routers/archive/membership_person_group.py
Normal file
@@ -0,0 +1,123 @@
|
||||
import datetime
|
||||
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
|
||||
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.membership_person_group_methods import get_membership_person_group_rec_list, load_membership_person_group_obj
|
||||
|
||||
from app.models.membership_person_group_models import Membership_Person_Group_Base
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/membership/group/person', response_model=Resp_Body_Base)
|
||||
async def post_membership_person_group_obj(
|
||||
obj: Membership_Person_Group_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_person_group'
|
||||
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('/membership/group/person/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_membership_person_group_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Membership_Person_Group_Base = None,
|
||||
#x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_person_group'
|
||||
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
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Type Person ### get_membership_person_group_obj() ###
|
||||
# Updated 2021-07-27
|
||||
@router.get('/membership/group/person/{membership_person_group_id}', response_model=Resp_Body_Base)
|
||||
async def get_membership_person_group_obj(
|
||||
membership_person_group_id: str = Path(min_length=11, max_length=22),
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
inc_product: bool = False, # Per member or group member belongs to
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if membership_person_group_id := redis_lookup_id_random(record_id_random=membership_person_group_id, table_name='membership_person_group'): pass
|
||||
else: return mk_resp(data=None, status_code=404)
|
||||
|
||||
if membership_person_group_result := load_membership_person_group_obj(
|
||||
membership_person_group_id = membership_person_group_id,
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
enabled = enabled,
|
||||
inc_product = inc_product,
|
||||
):
|
||||
response_data = membership_person_group_result
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data)
|
||||
# ### END ### API Membership Type Person ### get_membership_person_group_obj() ###
|
||||
|
||||
|
||||
@router.delete('/membership/group/person/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_membership_person_group_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_person_group'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
101
app/routers/archive/membership_person_profile.py
Normal file
101
app/routers/archive/membership_person_profile.py
Normal file
@@ -0,0 +1,101 @@
|
||||
import datetime
|
||||
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
|
||||
from app.config import settings
|
||||
from app.db_sql import 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.membership_person_profile_methods import load_membership_person_profile_obj
|
||||
|
||||
from app.models.membership_person_profile_models import Membership_Person_Profile_Base, Membership_Person_Profile_Base_Up
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/membership/person/profile', response_model=Resp_Body_Base)
|
||||
async def post_membership_person_profile_obj(
|
||||
obj: Membership_Person_Profile_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_person_profile'
|
||||
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('/membership/person/profile/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_membership_person_profile_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Membership_Person_Profile_Base_Up = None,
|
||||
#x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_person_profile'
|
||||
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
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Profile ### get_membership_person_obj_profile() ###
|
||||
# Updated 2021-07-13
|
||||
@router.get('/membership/person/{membership_person_id}/profile', response_model=Resp_Body_Base)
|
||||
async def get_membership_person_obj_profile(
|
||||
membership_person_id: str = Path(min_length=11, max_length=22),
|
||||
inc_membership_cfg: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if membership_person_id := redis_lookup_id_random(record_id_random=membership_person_id, table_name='membership_person'): pass
|
||||
else: return mk_resp(data=None, status_code=404)
|
||||
|
||||
if membership_person_profile_result := load_membership_person_profile_obj(
|
||||
membership_person_id = membership_person_id,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
model_as_dict = True,
|
||||
):
|
||||
response_data = membership_person_profile_result
|
||||
else: return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data)
|
||||
# ### END ### API Membership Profile ### get_membership_person_obj_profile() ###
|
||||
123
app/routers/archive/membership_person_type.py
Normal file
123
app/routers/archive/membership_person_type.py
Normal file
@@ -0,0 +1,123 @@
|
||||
import datetime
|
||||
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
|
||||
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.membership_person_type_methods import get_membership_person_type_rec_list, load_membership_person_type_obj
|
||||
|
||||
from app.models.membership_person_type_models import Membership_Person_Type_Base
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/membership/type/person', response_model=Resp_Body_Base)
|
||||
async def post_membership_person_type_obj(
|
||||
obj: Membership_Person_Type_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_person_type'
|
||||
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('/membership/type/person/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_membership_person_type_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Membership_Person_Type_Base = None,
|
||||
#x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_person_type'
|
||||
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
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Type Person ### get_membership_person_type_obj() ###
|
||||
# Updated 2021-07-27
|
||||
@router.get('/membership/type/person/{membership_person_type_id}', response_model=Resp_Body_Base)
|
||||
async def get_membership_person_type_obj(
|
||||
membership_person_type_id: str = Path(min_length=11, max_length=22),
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
inc_product: bool = False, # Per member or group member belongs to
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if membership_person_type_id := redis_lookup_id_random(record_id_random=membership_person_type_id, table_name='membership_person_type'): pass
|
||||
else: return mk_resp(data=None, status_code=404)
|
||||
|
||||
if membership_person_type_result := load_membership_person_type_obj(
|
||||
membership_person_type_id = membership_person_type_id,
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
enabled = enabled,
|
||||
inc_product = inc_product,
|
||||
):
|
||||
response_data = membership_person_type_result
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data)
|
||||
# ### END ### API Membership Type Person ### get_membership_person_type_obj() ###
|
||||
|
||||
|
||||
@router.delete('/membership/type/person/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_membership_person_type_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_person_type'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
343
app/routers/archive/membership_type.py
Normal file
343
app/routers/archive/membership_type.py
Normal file
@@ -0,0 +1,343 @@
|
||||
import datetime
|
||||
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, 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.membership_type_methods import get_membership_type_rec_list, load_membership_type_obj
|
||||
|
||||
from app.models.membership_type_models import Membership_Type_Base
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/membership/type', response_model=Resp_Body_Base)
|
||||
async def post_membership_type_obj(
|
||||
obj: Membership_Type_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_type'
|
||||
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('/membership/type/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_membership_type_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Membership_Type_Base = None,
|
||||
#x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_type'
|
||||
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('/membership/type/list', response_model=Resp_Body_Base)
|
||||
async def get_membership_type_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,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_type'
|
||||
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
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Type Methods ### get_account_membership_type_obj_li() ###
|
||||
# Updated 2022-01-13
|
||||
@router.get('/account/{account_id}/membership/type/list', response_model=Resp_Body_Base)
|
||||
async def get_account_membership_type_obj_li(
|
||||
account_id: str = Path(min_length=11, max_length=22),
|
||||
# product_id: Optional[str] = Query(None, min_length=1, max_length=22),
|
||||
# type_level: Optional[int] = None,
|
||||
|
||||
# inc_address: bool = False,
|
||||
# inc_contact: bool = False,
|
||||
inc_membership_cfg: bool = False,
|
||||
inc_membership_person_list: bool = False,
|
||||
# inc_organization: bool = False,
|
||||
# inc_person: bool = False,
|
||||
inc_product_list: bool = False,
|
||||
# inc_user: bool = False,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The account ID was invalid or not found.')
|
||||
|
||||
# Updated 2022-01-13
|
||||
if membership_type_rec_list_result := get_membership_type_rec_list(
|
||||
account_id = account_id,
|
||||
# product_id = product_id,
|
||||
# type_level = type_level,
|
||||
limit = commons.limit,
|
||||
enabled = commons.enabled,
|
||||
):
|
||||
membership_type_result_list = []
|
||||
for membership_type_rec in membership_type_rec_list_result:
|
||||
if load_membership_type_result := load_membership_type_obj(
|
||||
membership_type_id = membership_type_rec.get('membership_type_id', None),
|
||||
enabled = commons.enabled,
|
||||
limit = commons.limit,
|
||||
# inc_address = inc_address,
|
||||
# inc_contact = inc_contact,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
inc_membership_person_list = inc_membership_person_list,
|
||||
# inc_organization = inc_organization,
|
||||
# inc_person = inc_person,
|
||||
inc_product_list = inc_product_list,
|
||||
# inc_user = inc_user,
|
||||
# by_alias = by_alias,
|
||||
# exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
membership_type_result_list.append(load_membership_type_result)
|
||||
else:
|
||||
membership_type_result_list.append(None)
|
||||
response_data = membership_type_result_list
|
||||
elif isinstance(membership_person_rec_result, list) or membership_person_rec_result is None: # Empty list or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=False, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=commons.response)
|
||||
# ### BEGIN ### API Membership Type Methods ### get_account_membership_type_obj_li() ###
|
||||
|
||||
|
||||
# Look up is only for account, person, or user records
|
||||
@router.get('/membership/type/lookup', response_model=Resp_Body_Base)
|
||||
async def lookup_membership_type_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_person_profile: bool = True,
|
||||
inc_membership_cfg: bool = True,
|
||||
inc_extended_profile: bool = True,
|
||||
inc_person: bool = True,
|
||||
inc_user: bool = True,
|
||||
by_alias: bool = True,
|
||||
exclude_unset: bool = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_type'
|
||||
base_name = Membership_Type_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, response=response) # 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_type`.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_type`.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_type`.user_id = :user_id"""
|
||||
sql_limit = 'LIMIT 1'
|
||||
elif for_obj_type == 'membership_type' and for_obj_id:
|
||||
data['membership_type_id'] = for_obj_id
|
||||
sql_where_for_obj_type = """`membership_type`.id = :membership_type_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, response=response) # Bad Request
|
||||
|
||||
sql = f"""
|
||||
SELECT id AS 'membership_type_id', id_random AS 'membership_type_id_random'
|
||||
FROM `membership_type` AS `membership_type`
|
||||
WHERE {sql_where_for_obj_type}
|
||||
{sql_limit}
|
||||
"""
|
||||
|
||||
# This will return a list if selecting by account ID
|
||||
membership_type_obj_result = sql_select(data=data, sql=sql, as_list=as_list)
|
||||
if isinstance(membership_type_obj_result, dict):
|
||||
membership_type_id = membership_type_obj_result.get('membership_type_id', None)
|
||||
membership_type_obj = load_membership_type_obj(
|
||||
membership_type_id = membership_type_id,
|
||||
inc_membership_person_profile = inc_membership_person_profile,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
inc_extended_profile = inc_extended_profile,
|
||||
inc_person = inc_person,
|
||||
inc_user = inc_user,
|
||||
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
data = membership_type_obj
|
||||
elif isinstance(membership_type_obj_result, list):
|
||||
membership_type_obj_li = []
|
||||
for membership_type_obj in membership_type_obj_result:
|
||||
membership_type_id = membership_type_obj.get('membership_type_id', None)
|
||||
membership_type_obj_li.append(
|
||||
load_membership_type_obj(
|
||||
membership_type_id = membership_type_id,
|
||||
inc_membership_person_profile = inc_membership_person_profile,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
inc_extended_profile = inc_extended_profile,
|
||||
inc_person = inc_person,
|
||||
inc_user = inc_user,
|
||||
).dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
)
|
||||
data = membership_type_obj_li
|
||||
else:
|
||||
log.debug(membership_type_obj_result)
|
||||
return mk_resp(data=None, status_code=404) # Not Found
|
||||
return mk_resp(data=data)
|
||||
|
||||
|
||||
# ### BEGIN ### API Membership Type ### get_membership_type_obj() ###
|
||||
# Working well as of 2021-07-01. Using as a template for other routes.
|
||||
@router.get('/membership/type/{membership_type_id}', response_model=Resp_Body_Base)
|
||||
async def get_membership_type_obj(
|
||||
membership_type_id: str = Path(min_length=11, max_length=22),
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
inc_address: bool = False, # Per member
|
||||
inc_contact: bool = False, # Per member
|
||||
inc_membership_cfg: bool = False,
|
||||
inc_membership_group_list: bool = False, # Per member
|
||||
inc_membership_person_list: bool = False,
|
||||
inc_membership_person_profile: bool = False, # Per member
|
||||
inc_organization: bool = False, # Per member
|
||||
inc_person: bool = False, # Per member
|
||||
inc_product: bool = False, # Per member
|
||||
inc_product_list: bool = False,
|
||||
inc_user: bool = False, # Per member
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if membership_type_id := redis_lookup_id_random(record_id_random=membership_type_id, table_name='membership_type'): pass
|
||||
else:
|
||||
return mk_resp(data=None, status_code=404)
|
||||
|
||||
if membership_type_result := load_membership_type_obj(
|
||||
membership_type_id = membership_type_id,
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict, # NOTE: returning model as a dict
|
||||
enabled = enabled,
|
||||
inc_address = inc_address,
|
||||
inc_contact = inc_contact,
|
||||
inc_membership_cfg = inc_membership_cfg,
|
||||
inc_membership_group_list = inc_membership_group_list,
|
||||
inc_membership_person_list = inc_membership_person_list,
|
||||
inc_membership_person_profile = inc_membership_person_profile,
|
||||
inc_organization = inc_organization,
|
||||
inc_person = inc_person,
|
||||
inc_product = inc_product,
|
||||
inc_product_list = inc_product_list,
|
||||
inc_user = inc_user,
|
||||
):
|
||||
pass
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=membership_type_result)
|
||||
# ### END ### API Membership ### get_membership_type_obj() ###
|
||||
|
||||
|
||||
# @router.get('/membership/type/{obj_id}', response_model=Resp_Body_Base)
|
||||
# async def get_membership_type_obj_old(
|
||||
# obj_id: str = Path(min_length=11, max_length=22),
|
||||
# x_account_id: str = Header(...),
|
||||
# by_alias: Optional[bool] = True,
|
||||
# exclude_unset: Optional[bool] = True,
|
||||
# response: Response = Response,
|
||||
# ):
|
||||
# log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
# log.debug(locals())
|
||||
|
||||
# obj_type = 'membership_type'
|
||||
# result = get_obj_template(
|
||||
# obj_type=obj_type,
|
||||
# obj_id=obj_id,
|
||||
# by_alias=True,
|
||||
# exclude_unset=True,
|
||||
# )
|
||||
# return result
|
||||
|
||||
|
||||
@router.delete('/membership/type/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_membership_type_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'membership_type'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
447
app/routers/archive/order.py
Normal file
447
app/routers/archive/order.py
Normal file
@@ -0,0 +1,447 @@
|
||||
import datetime
|
||||
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 *
|
||||
from app.config import settings
|
||||
from app.db_sql import *
|
||||
|
||||
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.order_methods import get_order_rec_list, load_order_obj, save_order_obj
|
||||
|
||||
from app.models.response_models import *
|
||||
from app.models.order_models import Order_Base, Order_DB_Base
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# NOTE 2021-08-09: Use with rework of order_cart
|
||||
# account_id is required, person_id is ideal
|
||||
@router.post('/order', response_model=Resp_Body_Base)
|
||||
async def post_order_obj(
|
||||
order_obj: Order_DB_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'order'
|
||||
order_obj = order_obj.dict(by_alias=False, exclude_unset=False)
|
||||
result = post_obj_template(
|
||||
obj_type = obj_type,
|
||||
data = order_obj,
|
||||
return_obj = True,
|
||||
by_alias = True,
|
||||
exclude_unset = True,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
# NOTE 2021-08-09: Use with rework of order_cart
|
||||
@router.patch('/order/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_order_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Order_Base = None,
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'order'
|
||||
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
|
||||
|
||||
|
||||
|
||||
# NOTE 2021-08-09: Use with rework of order_cart
|
||||
# NOTE: The router needs to have the prefix (/order) removed.
|
||||
@router.patch('/order/{order_id}/line/add', response_model=Resp_Body_Base)
|
||||
async def patch_order_obj_line_add(
|
||||
order_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Order_Base = None,
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
|
||||
|
||||
@router.get('/order/list', response_model=Resp_Body_Base)
|
||||
async def get_order_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),
|
||||
order_status: Optional[str] = 'complete',
|
||||
from_datetime: Optional[datetime.datetime] = None,
|
||||
to_datetime: Optional[datetime.datetime] = None,
|
||||
limit: Optional[int] = None,
|
||||
inc_order_line_list: Optional[bool] = False,
|
||||
inc_order_cfg: Optional[bool] = False,
|
||||
inc_person_obj: Optional[bool] = False,
|
||||
inc_user_obj: Optional[bool] = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
data = {}
|
||||
if for_obj_type == 'account' and for_obj_id:
|
||||
data['account_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='account')
|
||||
sql_account_person_user = f"""`order`.account_id = :account_id"""
|
||||
elif for_obj_type == 'person' and for_obj_id:
|
||||
data['person_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='person')
|
||||
sql_account_person_user = f"""`order`.person_id = :person_id"""
|
||||
# elif for_obj_type == 'user' and for_obj_id:
|
||||
# data['user_id'] = redis_lookup_id_random(record_id_random=for_obj_id, table_name='user')
|
||||
# sql_account_person_user = f"""`order`.user_id = :user_id"""
|
||||
else:
|
||||
sql_account_person_user = ''
|
||||
|
||||
if order_status in ['canceled', 'complete', 'in progress', 'started']:
|
||||
data['status'] = order_status
|
||||
sql_status = f"""AND `order`.status = :status"""
|
||||
else:
|
||||
sql_status = ''
|
||||
|
||||
if from_datetime and to_datetime:
|
||||
data['from_datetime'] = from_datetime
|
||||
data['to_datetime'] = to_datetime
|
||||
sql_from_to_datetime = f"""AND `order`.created_on >= :from_datetime AND `order`.created_on <= :to_datetime"""
|
||||
elif from_datetime:
|
||||
data['from_datetime'] = from_datetime
|
||||
sql_from_to_datetime = f"""AND `order`.created_on >= :from_datetime"""
|
||||
elif to_datetime:
|
||||
data['to_datetime'] = to_datetime
|
||||
sql_from_to_datetime = f"""AND `order`.created_on <= :to_datetime"""
|
||||
else:
|
||||
sql_from_to_datetime = ''
|
||||
|
||||
if limit:
|
||||
data['limit'] = limit
|
||||
sql_limit = f"""LIMIT :limit"""
|
||||
else:
|
||||
sql_limit = ''
|
||||
|
||||
sql = f"""
|
||||
SELECT `order`.id AS 'order_id', `order`.id_random AS 'order_id_random'
|
||||
FROM `order` AS `order`
|
||||
WHERE {sql_account_person_user}
|
||||
{sql_status}
|
||||
{sql_from_to_datetime}
|
||||
ORDER BY `order`.created_on DESC, `order`.updated_on DESC
|
||||
{sql_limit};
|
||||
"""
|
||||
|
||||
if order_obj_li_result := sql_select(data=data, sql=sql, as_list=True):
|
||||
order_obj_li = []
|
||||
for order_obj in order_obj_li_result:
|
||||
order_id = order_obj.get('order_id', None)
|
||||
if order_obj := load_order_obj(order_id=order_id, inc_order_line_list=inc_order_line_list, inc_order_cfg=inc_order_cfg, inc_person_obj=inc_person_obj):
|
||||
data = order_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
order_obj_li.append(data)
|
||||
return mk_resp(data=order_obj_li)
|
||||
else:
|
||||
log.debug(order_obj_li_result)
|
||||
return mk_resp(data=False, status_code=404, response=response)
|
||||
|
||||
|
||||
# ### BEGIN ### API Order Routes ### get_order_obj() ###
|
||||
# NOTE 2021-08-09: Use with rework of order_cart
|
||||
# Updated 2021-08-07
|
||||
@router.get('/order/{order_id}', response_model=Resp_Body_Base)
|
||||
async def get_order_obj(
|
||||
order_id: str = Path(min_length=11, max_length=22),
|
||||
limit: int = 500,
|
||||
enabled: str = 'enabled',
|
||||
inc_order_line_list: bool = False,
|
||||
inc_order_cfg: bool = False,
|
||||
inc_person: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: bool = True,
|
||||
exclude_unset: bool = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if order_obj := load_order_obj(
|
||||
order_id = order_id,
|
||||
limit = limit,
|
||||
enabled = enabled,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
inc_order_line_list = inc_order_line_list,
|
||||
inc_order_cfg = inc_order_cfg,
|
||||
inc_person = inc_person,
|
||||
):
|
||||
log.debug(order_obj)
|
||||
data = order_obj.dict(by_alias=by_alias, exclude_unset=False) # NOTE NOTE NOTE NOTE exclude_unset is forced to False for now. Will return more fields than is ideal. Need to create another Order_Line_Base. Probably Order_Line_OUT_Base
|
||||
return mk_resp(data=data)
|
||||
else:
|
||||
return mk_resp(data=False, status_code=404, response=response) # Not Found
|
||||
# ### END ### API Order Routes ### get_order_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Order ### get_obj_id_order_list() ###
|
||||
# Updated 2021-12-13
|
||||
@router.get('/{obj_type}/{obj_id}/order/list', response_model=Resp_Body_Base)
|
||||
async def get_obj_id_order_list(
|
||||
obj_type: str = Path(min_length=4, max_length=25), # Expects account or person
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
from_datetime: datetime.datetime = None,
|
||||
to_datetime: datetime.datetime = None,
|
||||
inc_order_cfg: bool = False,
|
||||
inc_order_line_list: bool = False,
|
||||
# w_prod_type: str = 'all', # all, cont_edu_cert, event, fundraising, membership, etc
|
||||
inc_person: bool = False,
|
||||
status: str = 'closed', # open, locked, reopened?, closed (complete), canceled, other
|
||||
enabled: str = 'enabled',
|
||||
limit: int = 50,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
x_account_id: str = Header(..., min_length=11, max_length=22),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if obj_type in ['account', 'person']:
|
||||
if obj_id := redis_lookup_id_random(record_id_random=obj_id, table_name=obj_type): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
if order_rec_list_result := get_order_rec_list(
|
||||
for_obj_type = obj_type,
|
||||
for_obj_id = obj_id,
|
||||
from_datetime = from_datetime,
|
||||
to_datetime = to_datetime,
|
||||
status = status,
|
||||
enabled = enabled,
|
||||
limit = limit,
|
||||
):
|
||||
order_result_list = []
|
||||
for order_rec in order_rec_list_result:
|
||||
if load_order_result := load_order_obj(
|
||||
order_id = order_rec.get('order_id', None),
|
||||
inc_order_cfg = inc_order_cfg,
|
||||
inc_order_line_list = inc_order_line_list,
|
||||
inc_person = inc_person,
|
||||
enabled = enabled,
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
order_result_list.append(load_order_result)
|
||||
else:
|
||||
order_result_list.append(None)
|
||||
response_data = order_result_list
|
||||
elif isinstance(order_rec_list_result, list) or order_rec_list_result is None: # Empty list or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=None, status_code=404, response=response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data, response=response)
|
||||
# ### END ### API Order ### get_obj_id_order_list() ###
|
||||
|
||||
|
||||
# # ### BEGIN ### API Order ### get_account_obj_order_list() ###
|
||||
# # Updated 2021-11-19
|
||||
# @router.get('/account/{account_id}/order/list', response_model=Resp_Body_Base)
|
||||
# async def get_account_id_order_list(
|
||||
# account_id: str = Query(..., min_length=11, max_length=22),
|
||||
# limit: int = 50,
|
||||
# enabled: str = 'enabled',
|
||||
# from_datetime: datetime.datetime = None,
|
||||
# to_datetime: datetime.datetime = None,
|
||||
# inc_order_cfg: bool = False,
|
||||
# inc_order_line_list: bool = False,
|
||||
# # inc_order_w_prod_type: str = 'all', # all, membership, fundraising, event, etc
|
||||
# status: str = 'closed', # open, locked, reopened?, closed (complete), canceled, other
|
||||
# x_account_id: str = Header(...),
|
||||
# by_alias: Optional[bool] = True,
|
||||
# exclude_unset: Optional[bool] = True,
|
||||
# response: Response = Response,
|
||||
# ):
|
||||
# log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
# log.debug(locals())
|
||||
|
||||
# if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
|
||||
# else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
# # Updated 2021-06-28
|
||||
# if order_rec_list_result := get_order_rec_list(
|
||||
# for_obj_type = 'account',
|
||||
# for_obj_id = account_id,
|
||||
# limit = limit,
|
||||
# enabled = enabled,
|
||||
# from_datetime = from_datetime,
|
||||
# to_datetime = to_datetime,
|
||||
# status = status,
|
||||
# ):
|
||||
# order_result_list = []
|
||||
# for order_rec in order_rec_list_result:
|
||||
# if load_order_result := load_order_obj(
|
||||
# order_id = order_rec.get('order_id', None),
|
||||
# limit = limit,
|
||||
# enabled = enabled,
|
||||
# by_alias = by_alias,
|
||||
# exclude_unset = exclude_unset,
|
||||
# # model_as_dict = model_as_dict,
|
||||
# inc_order_cfg = inc_order_cfg,
|
||||
# inc_order_line_list = inc_order_line_list,
|
||||
# ):
|
||||
# order_result_list.append(load_order_result)
|
||||
# else:
|
||||
# order_result_list.append(None)
|
||||
# response_data = order_result_list
|
||||
# else:
|
||||
# return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
# return mk_resp(data=response_data)
|
||||
# # ### END ### API Order ### get_account_obj_order_list() ###
|
||||
|
||||
|
||||
# # ### BEGIN ### API Order ### get_person_obj_order_list() ###
|
||||
# # Updated 2021-11-19
|
||||
# @router.get('/person/{person_id}/order/list', response_model=Resp_Body_Base)
|
||||
# async def get_person_id_order_list(
|
||||
# person_id: str = Query(..., min_length=11, max_length=22),
|
||||
# limit: int = 50,
|
||||
# enabled: str = 'enabled',
|
||||
# from_datetime: datetime.datetime = None,
|
||||
# to_datetime: datetime.datetime = None,
|
||||
# inc_order_cfg: bool = False,
|
||||
# inc_order_line_list: bool = False,
|
||||
# # inc_order_w_prod_type: str = 'all', # all, membership, fundraising, event, etc
|
||||
# status: str = 'closed', # open, locked, reopened?, closed (complete), canceled, other
|
||||
# x_account_id: str = Header(...),
|
||||
# by_alias: Optional[bool] = True,
|
||||
# exclude_unset: Optional[bool] = True,
|
||||
# response: Response = Response,
|
||||
# ):
|
||||
# log.setLevel(logging.WARNING) # 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
|
||||
# else: return mk_resp(data=None, status_code=404, response=response)
|
||||
|
||||
# # Updated 2021-06-28
|
||||
# if order_rec_list_result := get_order_rec_list(
|
||||
# for_obj_type = 'person',
|
||||
# for_obj_id = person_id,
|
||||
# limit = limit,
|
||||
# enabled = enabled,
|
||||
# from_datetime = from_datetime,
|
||||
# to_datetime = to_datetime,
|
||||
# status = status,
|
||||
# ):
|
||||
# order_result_list = []
|
||||
# for order_rec in order_rec_list_result:
|
||||
# if load_order_result := load_order_obj(
|
||||
# order_id = order_rec.get('order_id', None),
|
||||
# limit = limit,
|
||||
# enabled = enabled,
|
||||
# by_alias = by_alias,
|
||||
# exclude_unset = exclude_unset,
|
||||
# # model_as_dict = model_as_dict,
|
||||
# inc_order_cfg = inc_order_cfg,
|
||||
# inc_order_line_list = inc_order_line_list,
|
||||
# ):
|
||||
# order_result_list.append(load_order_result)
|
||||
# else:
|
||||
# order_result_list.append(None)
|
||||
# response_data = order_result_list
|
||||
# else:
|
||||
# return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
# return mk_resp(data=response_data)
|
||||
# # ### END ### API Order ### get_person_obj_order_list() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Order ### get_person_id_order_cart() ###
|
||||
# NOTE 2021-08-09: Use with rework of order_cart. The most recent (hopefully only one) "open" order for a person.
|
||||
# Updated 2021-11-19
|
||||
@router.get('/person/{person_id}/order/cart', response_model=Resp_Body_Base)
|
||||
async def get_person_id_order_cart(
|
||||
person_id: str = Path(min_length=11, max_length=22),
|
||||
enabled: str = 'enabled',
|
||||
inc_order_line_list: bool = False,
|
||||
inc_order_cfg: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: bool = True,
|
||||
exclude_unset: bool = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
# Query to get the one "open" order status for a person ID
|
||||
|
||||
return False
|
||||
# ### END ### API Order ### get_person_id_order_cart() ###
|
||||
|
||||
|
||||
@router.delete('/order/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_order_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'order'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
# NOTE 2021-08-09: Use with rework of order_cart
|
||||
# NOTE: The router needs to have the prefix (/order) removed.
|
||||
@router.delete('/order/{order_id}/line/<order_line_id>/remove', response_model=Resp_Body_Base)
|
||||
async def delete_order_line_obj_NOT_SURE(
|
||||
order_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Order_Base = None,
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
251
app/routers/archive/order_cart.py
Normal file
251
app/routers/archive/order_cart.py
Normal file
@@ -0,0 +1,251 @@
|
||||
import datetime
|
||||
#from datetime import datetime, time, timedelta
|
||||
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 *
|
||||
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 app.methods.order_cart_methods import update_order_cart_obj, load_order_cart_obj
|
||||
|
||||
from app.models.order_cart_models import Order_Cart_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('', response_model=Resp_Body_Base)
|
||||
async def post_order_cart_obj(
|
||||
obj: Order_Cart_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'order_cart'
|
||||
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
|
||||
|
||||
|
||||
# Update 2021-08-02 (partially)
|
||||
@router.patch('/{order_cart_id}', response_model=Resp_Body_Base)
|
||||
async def patch_order_cart_obj(
|
||||
order_cart_id: str = Path(min_length=11, max_length=22),
|
||||
order_cart_obj: Order_Cart_Base = None,
|
||||
repl_order_cart_line_list: Optional[bool] = False, # Replace all the lines instead of trying to update
|
||||
# was repl_order_cart_line_list # NOTE: It was with out _list, just _li
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
inc_order_cart_line_list: Optional[bool] = True,
|
||||
inc_order_cfg: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
log.debug(order_cart_obj)
|
||||
|
||||
order_cart_obj_up_result = update_order_cart_obj(
|
||||
order_cart_obj = order_cart_obj,
|
||||
repl_order_cart_line_list = repl_order_cart_line_list,
|
||||
)
|
||||
if isinstance(order_cart_obj_up_result, int):
|
||||
log.info(f'Order cart update and the result was an int: {order_cart_obj_up_result}')
|
||||
pass
|
||||
elif isinstance(order_cart_obj_up_result, bool) and order_cart_obj_up_result:
|
||||
log.info(f'Order cart update and the result was an bool: {order_cart_obj_up_result}')
|
||||
pass
|
||||
elif isinstance(order_cart_obj_up_result, bool) and not order_cart_obj_up_result:
|
||||
log.error(f'Order cart update and the result was an bool: {order_cart_obj_up_result}')
|
||||
return mk_resp(data=False, status_code=500, response=response) # Internal Server Error
|
||||
|
||||
if return_obj:
|
||||
if order_cart_obj := load_order_cart_obj(
|
||||
order_cart_id = order_cart_id,
|
||||
inc_order_cart_line_list = inc_order_cart_line_list,
|
||||
inc_order_cfg = inc_order_cfg
|
||||
):
|
||||
data = order_cart_obj.dict(by_alias=True, exclude_unset=False)
|
||||
return mk_resp(data=data)
|
||||
else:
|
||||
return mk_resp(data=False, status_code=404, response=response) # Not Found
|
||||
else:
|
||||
return mk_resp(data=True)
|
||||
|
||||
|
||||
@router.get('/list', response_model=Resp_Body_Base)
|
||||
async def get_order_cart_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,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'order_cart'
|
||||
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, order, person, or user records
|
||||
@router.get('/lookup', response_model=Resp_Body_Base)
|
||||
async def lookup_order_cart_obj(
|
||||
for_obj_type: Optional[str] = Query(None, min_length=2, max_length=50),
|
||||
for_obj_id: Optional[Union[int,str]] = None,
|
||||
inc_order_cart_line_list: Optional[bool] = True,
|
||||
inc_order_cfg: Optional[bool] = True,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'order_cart'
|
||||
base_name = Order_Cart_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, response=response) # Not Found
|
||||
log.setLevel(logging.INFO) # 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 = """`order_cart`.account_id = :account_id"""
|
||||
sql_limit = ''
|
||||
as_list = True
|
||||
elif for_obj_type == 'order' and for_obj_id:
|
||||
data['order_id'] = for_obj_id
|
||||
sql_where_for_obj_type = """`order_cart`.order_id = :order_id"""
|
||||
sql_limit = 'LIMIT 1'
|
||||
elif for_obj_type == 'person' and for_obj_id:
|
||||
data['person_id'] = for_obj_id
|
||||
sql_where_for_obj_type = """`order_cart`.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 = """`order_cart`.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, response=response) # Bad Request
|
||||
|
||||
sql = f"""
|
||||
SELECT id AS 'order_cart_id', id_random AS 'order_cart_id_random'
|
||||
FROM `order_cart` AS `order_cart`
|
||||
WHERE {sql_where_for_obj_type}
|
||||
{sql_limit}
|
||||
"""
|
||||
|
||||
# This will return a list if selecting by account ID
|
||||
order_cart_obj_result = sql_select(data=data, sql=sql, as_list=as_list)
|
||||
if isinstance(order_cart_obj_result, dict):
|
||||
order_cart_id = order_cart_obj_result.get('order_cart_id', None)
|
||||
order_cart_id_random = order_cart_obj_result.get('order_cart_id_random', None)
|
||||
|
||||
if order_cart_obj := load_order_cart_obj(
|
||||
order_cart_id = order_cart_id,
|
||||
inc_order_cart_line_list = inc_order_cart_line_list,
|
||||
inc_order_cfg = inc_order_cfg,
|
||||
):
|
||||
data = order_cart_obj.dict(by_alias=True, exclude_unset=False)
|
||||
return mk_resp(data=data)
|
||||
else:
|
||||
return mk_resp(data=False, status_code=404, response=response) # Not Found
|
||||
elif isinstance(order_cart_obj_result, list):
|
||||
order_cart_obj_li = []
|
||||
for order_cart_obj in order_cart_obj_result:
|
||||
order_cart_id = order_cart_obj.get('order_cart_id', None)
|
||||
order_cart_obj_li.append(
|
||||
load_order_cart_obj(
|
||||
order_cart_id = order_cart_id,
|
||||
inc_order_cart_line_list = inc_order_cart_line_list,
|
||||
inc_order_cfg = inc_order_cfg,
|
||||
)
|
||||
)
|
||||
data = order_cart_obj_li
|
||||
return mk_resp(data=data)
|
||||
else:
|
||||
log.debug(order_cart_obj_result)
|
||||
return mk_resp(data=False, status_code=404, response=response) # Not Found
|
||||
|
||||
|
||||
# ### BEGIN ### API Order Cart Routes ### get_order_cart_obj() ###
|
||||
# Updated 2021-08-07
|
||||
@router.get('/{order_cart_id}', response_model=Resp_Body_Base)
|
||||
async def get_order_cart_obj(
|
||||
order_cart_id: str = Path(min_length=11, max_length=22),
|
||||
limit: int = 500,
|
||||
enabled: str = 'enabled',
|
||||
inc_order_cart_line_list: bool = False,
|
||||
inc_order_cfg: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: bool = True,
|
||||
exclude_unset: bool = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if order_cart_obj := load_order_cart_obj(
|
||||
order_cart_id = order_cart_id,
|
||||
limit = limit,
|
||||
enabled = enabled,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
inc_order_cart_line_list = inc_order_cart_line_list,
|
||||
inc_order_cfg = inc_order_cfg,
|
||||
):
|
||||
data = order_cart_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
return mk_resp(data=data)
|
||||
else:
|
||||
return mk_resp(data=False, status_code=404, response=response) # Not Found
|
||||
# ### END ### API Order Cart Routes ### get_order_cart_obj() ###
|
||||
|
||||
|
||||
@router.delete('/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_order_cart_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'order_cart'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
126
app/routers/archive/order_line.py
Normal file
126
app/routers/archive/order_line.py
Normal file
@@ -0,0 +1,126 @@
|
||||
import datetime
|
||||
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 *
|
||||
from app.config import settings
|
||||
from app.db_sql import *
|
||||
|
||||
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.order_line_methods import get_order_line_rec_list, load_order_obj_line, load_order_obj_line_full_detail
|
||||
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# ### BEGIN ### API Order Line ### get_obj_id_order_line_list() ###
|
||||
# Updated 2022-01-04
|
||||
@router.get('/{obj_type}/{obj_id}/order/line/list', response_model=Resp_Body_Base)
|
||||
async def get_obj_id_order_line_list(
|
||||
obj_type: str = Path(min_length=4, max_length=25), # Expects account or order or person
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
from_datetime: datetime.datetime = None,
|
||||
to_datetime: datetime.datetime = None,
|
||||
prod_type: str = 'all', # all, cont_edu_cert, event, fundraising, membership, etc
|
||||
status: str = 'closed', # open, locked, reopened?, closed (complete), canceled, other
|
||||
full_detail: bool = False, # Uses a different view: v_order_line_full_detail
|
||||
# enabled: str = 'enabled',
|
||||
limit: int = 50,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
create_export: Optional[bool] = False,
|
||||
x_account_id: str = Header(..., min_length=11, max_length=22),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if obj_type in ['account', 'order', 'person']:
|
||||
if obj_id := redis_lookup_id_random(record_id_random=obj_id, table_name=obj_type): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=response)
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
if order_line_rec_list_result := get_order_line_rec_list(
|
||||
for_obj_type = obj_type,
|
||||
for_obj_id = obj_id,
|
||||
from_datetime = from_datetime,
|
||||
to_datetime = to_datetime,
|
||||
product_for_type = prod_type,
|
||||
status = status,
|
||||
full_detail = full_detail,
|
||||
# enabled = enabled,
|
||||
limit = limit,
|
||||
):
|
||||
order_line_result_list = []
|
||||
data_dict_list_for_export = []
|
||||
for order_line_rec in order_line_rec_list_result:
|
||||
if not full_detail:
|
||||
if load_order_line_result := load_order_obj_line(
|
||||
order_line_id = order_line_rec.get('order_line_id', None),
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
order_line_result_list.append(load_order_line_result)
|
||||
else:
|
||||
order_line_result_list.append(None)
|
||||
else: # Uses a different view: v_order_line_full_detail
|
||||
if load_order_line_result := load_order_obj_line_full_detail(
|
||||
order_line_rec = order_line_rec,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
model_as_dict = False,
|
||||
):
|
||||
if create_export:
|
||||
data_dict = load_order_line_result.dict(by_alias=by_alias, exclude_unset=exclude_unset)
|
||||
data_dict_list_for_export.append(data_dict)
|
||||
order_line_result_list.append(load_order_line_result)
|
||||
else:
|
||||
order_line_result_list.append(None)
|
||||
response_data = order_line_result_list
|
||||
elif isinstance(order_line_rec_list_result, list) or order_line_rec_list_result is None: # Empty list or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=None, status_code=404, response=response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
if create_export:
|
||||
# column_name_li = ['order_id_random', 'order_line_id_random', '', 'product_name', 'quantity', 'amount', 'dollar_amount', 'person_email']
|
||||
|
||||
# column_name_li = ['order_line_id_random', 'order_id_random', 'product_id_random', 'product_type', 'product_name', 'product_unit_price', 'product_recurring', 'curr_product_id_random', 'curr_product_type', 'curr_product_type_name', 'curr_product_name', 'name', 'quantity', 'amount', 'dollar_amount', 'recurring', 'message', 'person_id_random', 'person_given_name', 'person_family_name', 'person_display_name', 'person_full_name', 'person_contact_email', 'person_contact_cc_email', 'person_contact_phone_mobile', 'person_contact_phone_home', 'person_contact_phone_office', 'person_contact_phone_land', 'person_contact_phone_fax', 'person_contact_phone_other', 'person_contact_address_name', 'person_contact_address_organization_name', 'person_contact_address_line_1', 'person_contact_address_line_2', 'person_contact_address_line_3', 'person_contact_address_city', 'person_contact_address_country_subdivision_code', 'person_contact_address_state_province', 'person_contact_address_postal_code', 'person_contact_address_country_alpha_2_code', 'person_contact_address_country_name', 'person_contact_address_country', 'order_status', 'order_created_on', 'order_updated_on', 'created_on', 'updated_on']
|
||||
|
||||
column_name_li = ['order_line_id_random', 'order_id_random', 'product_id_random', 'product_type', 'product_name', 'quantity', 'amount', 'dollar_amount', 'message',
|
||||
'person_id_random', 'person_given_name', 'person_family_name', 'person_display_name', 'person_full_name', 'person_contact_email', 'person_contact_cc_email',
|
||||
'person_contact_address_name', 'person_contact_address_organization_name', 'person_contact_address_line_1', 'person_contact_address_line_2', 'person_contact_address_line_3',
|
||||
'person_contact_address_city', 'person_contact_address_country_subdivision_code', 'person_contact_address_state_province', 'person_contact_address_postal_code',
|
||||
'person_contact_address_country_alpha_2_code', 'person_contact_address_country_name', 'person_contact_address_country',
|
||||
'order_status',
|
||||
'order_created_on', 'order_updated_on',
|
||||
# 'order_started_on', 'order_last_updated_on'
|
||||
'created_on', 'updated_on'
|
||||
]
|
||||
|
||||
|
||||
# column_name_li = []
|
||||
datetime_format='%Y-%m-%d_%H%M'
|
||||
|
||||
# current_datetime = datetime.datetime.now() # Servers timezone (Eastern)
|
||||
current_datetime_utc = datetime.datetime.utcnow()
|
||||
current_datetime_utc = current_datetime_utc.strftime(datetime_format)
|
||||
filename = f'order_line_list_{current_datetime_utc}'
|
||||
if result := create_export_file(data_dict_list=data_dict_list_for_export, column_name_li=column_name_li, subdir_path='order_line', filename=filename, export_type='Excel'):
|
||||
tmp_file_path = result
|
||||
else:
|
||||
log.error('Something went wrong while creating or saving the export file')
|
||||
tmp_file_path = result
|
||||
else: tmp_file_path = None
|
||||
|
||||
return mk_resp(data=response_data, tmp_file_path=tmp_file_path, response=response)
|
||||
# ### END ### API Order Line ### get_obj_id_order_line_list() ###
|
||||
480
app/routers/archive/order_v3.py
Normal file
480
app/routers/archive/order_v3.py
Normal file
@@ -0,0 +1,480 @@
|
||||
import datetime
|
||||
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 *
|
||||
from app.config import settings
|
||||
from app.db_sql import *
|
||||
|
||||
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.order_methods import create_order_obj, update_order_obj, get_order_rec_list, load_order_obj, save_order_obj
|
||||
from app.methods.order_line_methods import create_order_obj_line, update_order_obj_line, load_order_obj_line
|
||||
|
||||
from app.models.response_models import Resp_Body_Base, mk_resp
|
||||
from app.models.order_models_v3 import Order_Base
|
||||
from app.models.order_line_models_v3 import Order_Line_Base
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
# ### BEGIN ### API Order Routers ### post_order_obj() ###
|
||||
# Updated 2022-01-18
|
||||
@router.post('/v3/order', response_model=Resp_Body_Base)
|
||||
@router.post('/v3/person/{person_id}/order', response_model=Resp_Body_Base)
|
||||
async def post_order_obj(
|
||||
order_obj: Order_Base,
|
||||
person_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
inc_address: bool = False,
|
||||
inc_contact: bool = False,
|
||||
inc_order_line_list: bool = True,
|
||||
inc_person: bool = False,
|
||||
return_obj: bool = True,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
# ### SECTION ### Secondary data validation
|
||||
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, status_message='The person ID was invalid or not found.')
|
||||
|
||||
# ### SECTION ### Process data
|
||||
if order_id := create_order_obj(
|
||||
account_id = commons.x_account_id,
|
||||
person_id = person_id,
|
||||
order_dict_obj = order_obj,
|
||||
): pass
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response, status_message='Something failed while processing the data.') # Bad Request
|
||||
|
||||
# ### SECTION ### Return successful results
|
||||
if return_obj:
|
||||
if load_order_obj_result := load_order_obj(
|
||||
order_id = order_id,
|
||||
inc_address = inc_address,
|
||||
inc_contact = inc_contact,
|
||||
inc_order_line_list = inc_order_line_list,
|
||||
inc_person = inc_person,
|
||||
).dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset):
|
||||
log.info('Loading successful. Returning result')
|
||||
log.debug(load_order_obj_result)
|
||||
return mk_resp(data=load_order_obj_result, response=commons.response)
|
||||
elif isinstance(load_order_obj_result, list) or load_order_obj_result is None: # Empty list or None
|
||||
return mk_resp(data=None, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
else:
|
||||
order_id_random = get_id_random(record_id=order_id, table_name='order')
|
||||
data = {}
|
||||
data['order_id'] = order_id
|
||||
data['order_id_random'] = order_id_random
|
||||
return mk_resp(data=data, response=commons.response)
|
||||
# ### END ### API Order Routers ### post_order_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Order Routers ### patch_order_obj() ###
|
||||
# Updated 2022-01-18
|
||||
@router.patch('/v3/order/{order_id}', response_model=Resp_Body_Base)
|
||||
# @router.patch('/v3/person/{person_id}/order/{order_id}', response_model=Resp_Body_Base)
|
||||
async def patch_order_obj(
|
||||
order_obj: Order_Base,
|
||||
order_id: str = Path(min_length=11, max_length=22),
|
||||
# person_id: str = Query(None, min_length=11, max_length=22),
|
||||
|
||||
inc_address: bool = False,
|
||||
inc_contact: bool = False,
|
||||
inc_order_line_list: bool = True,
|
||||
inc_person: bool = False,
|
||||
return_obj: Optional[bool] = True,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
# ### SECTION ### Secondary data validation
|
||||
order_id_random = order_id # This is used later for the response data
|
||||
# person_id_random = person_id # This is used later for the response data
|
||||
|
||||
if order_id := redis_lookup_id_random(record_id_random=order_id, table_name='order'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The order ID was invalid or not found.')
|
||||
|
||||
# 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, status_message='The person ID was invalid or not found.')
|
||||
|
||||
# ### SECTION ### Process data
|
||||
if update_order_obj_result := update_order_obj(
|
||||
order_id = order_id,
|
||||
order_dict_obj = order_obj,
|
||||
# person_id = person_id,
|
||||
): pass
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response, status_message='Something failed while processing the data.') # Bad Request
|
||||
|
||||
# ### SECTION ### Return successful results
|
||||
if return_obj:
|
||||
if load_order_obj_result := load_order_obj(
|
||||
order_id = order_id,
|
||||
inc_address = inc_address,
|
||||
inc_contact = inc_contact,
|
||||
inc_order_line_list = inc_order_line_list,
|
||||
inc_person = inc_person,
|
||||
).dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset):
|
||||
log.info('Loading successful. Returning result')
|
||||
log.debug(load_order_obj_result)
|
||||
return mk_resp(data=load_order_obj_result, response=commons.response)
|
||||
elif isinstance(load_order_obj_result, list) or load_order_obj_result is None: # Empty list or None
|
||||
return mk_resp(data=None, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
else:
|
||||
data = {}
|
||||
data['order_id'] = order_id
|
||||
data['order_id_random'] = order_id_random
|
||||
return mk_resp(data=data, response=commons.response)
|
||||
# ### END ### API Order Routers ### patch_order_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Order Routers ### patch_order_obj_add_line() ###
|
||||
# Updated 2022-01-18
|
||||
@router.patch('/v3/order/{order_id}/line/add', response_model=Resp_Body_Base)
|
||||
async def patch_order_obj_add_line(
|
||||
order_line_obj: Order_Line_Base,
|
||||
order_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
# inc_order: bool = False,
|
||||
inc_order_line_list: bool = True,
|
||||
return_obj: Optional[bool] = True,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
# ### SECTION ### Secondary data validation
|
||||
order_id_random = order_id # This is used later for the response data
|
||||
|
||||
if order_id := redis_lookup_id_random(record_id_random=order_id, table_name='order'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The order ID was invalid or not found.')
|
||||
|
||||
# ### SECTION ### Process data
|
||||
if order_line_id := add_order_obj_line(
|
||||
order_id = order_id,
|
||||
order_line_dict_obj = order_line_obj,
|
||||
): pass
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response, status_message='Something failed while processing the data.') # Bad Request
|
||||
|
||||
# ### SECTION ### Return successful results
|
||||
if return_obj:
|
||||
if load_order_obj_result := load_order_obj(
|
||||
order_id = order_id,
|
||||
# inc_address = inc_address,
|
||||
# inc_contact = inc_contact,
|
||||
inc_order_line_list = inc_order_line_list,
|
||||
# inc_person = inc_person,
|
||||
).dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset):
|
||||
log.info('Loading successful. Returning result')
|
||||
log.debug(load_order_obj_result)
|
||||
return mk_resp(data=load_order_obj_result, response=commons.response)
|
||||
elif isinstance(load_order_obj_result, list) or load_order_obj_result is None: # Empty list or None
|
||||
return mk_resp(data=None, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
else:
|
||||
order_line_id = order_line_add_result
|
||||
order_line_id_random = get_id_random(record_id=order_line_id, table_name='order_line')
|
||||
data = {}
|
||||
data['order_id'] = order_id
|
||||
data['order_id_random'] = order_id_random
|
||||
data['order_line_id'] = order_line_id
|
||||
data['order_line_id_random'] = order_line_id_random
|
||||
return mk_resp(data=data, response=commons.response)
|
||||
# ### END ### API Order Routers ### patch_order_obj_add_line() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Order Routers ### patch_order_obj_update_line() ###
|
||||
# Updated 2022-01-18
|
||||
@router.patch('/v3/order/{order_id}/line/{order_line_id}/update', response_model=Resp_Body_Base)
|
||||
async def patch_order_obj_update_line(
|
||||
order_obj: Order_Line_Base,
|
||||
order_id: str = Path(min_length=11, max_length=22),
|
||||
order_line_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
# inc_order: bool = False,
|
||||
inc_order_line_list: bool = True,
|
||||
return_obj: Optional[bool] = True,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
# ### SECTION ### Secondary data validation
|
||||
order_id_random = order_id # This is used later for the response data
|
||||
order_line_id_random = order_line_id # This is used later for the response data
|
||||
|
||||
if order_id := redis_lookup_id_random(record_id_random=order_id, table_name='order'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The order ID was invalid or not found.')
|
||||
|
||||
if order_line_id := redis_lookup_id_random(record_id_random=order_line_id, table_name='order_line'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The order line ID was invalid or not found.')
|
||||
|
||||
# ### SECTION ### Process data
|
||||
if update_order_obj_line_result := update_order_obj_line(
|
||||
order_line_id = order_line_id,
|
||||
order_line_dict_obj = order_line_obj,
|
||||
): pass
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response, status_message='Something failed while processing the data.') # Bad Request
|
||||
|
||||
# ### SECTION ### Return successful results
|
||||
if return_obj:
|
||||
if load_order_obj_result := load_order_obj(
|
||||
order_id = order_id,
|
||||
# inc_address = inc_address,
|
||||
# inc_contact = inc_contact,
|
||||
inc_order_line_list = inc_order_line_list,
|
||||
# inc_person = inc_person,
|
||||
).dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset):
|
||||
log.info('Loading successful. Returning result')
|
||||
log.debug(order_dict)
|
||||
return mk_resp(data=order_dict, response=commons.response)
|
||||
elif isinstance(load_order_obj_result, list) or load_order_obj_result is None: # Empty list or None
|
||||
return mk_resp(data=None, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
else:
|
||||
data = {}
|
||||
data['order_id'] = order_id
|
||||
data['order_id_random'] = order_id_random
|
||||
data['order_line_id'] = order_line_id
|
||||
data['order_line_id_random'] = order_line_id_random
|
||||
return mk_resp(data=data, response=commons.response)
|
||||
# ### END ### API Order Routers ### patch_order_obj_update_line() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Order Routers ### patch_order_obj_remove_line() ###
|
||||
# Updated 2022-01-18
|
||||
@router.patch('/v3/order/{order_id}/line/{order_line_id}/remove', response_model=Resp_Body_Base)
|
||||
async def patch_order_obj_remove_line(
|
||||
order_obj: Order_Line_Base,
|
||||
order_id: str = Path(min_length=11, max_length=22),
|
||||
order_line_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
# inc_order: bool = False,
|
||||
inc_order_line_list: bool = True,
|
||||
return_obj: Optional[bool] = True,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
# ### SECTION ### Secondary data validation
|
||||
order_id_random = order_id # This is used later for the response data
|
||||
order_line_id_random = order_line_id # This is used later for the response data
|
||||
|
||||
if order_id := redis_lookup_id_random(record_id_random=order_id, table_name='order'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The order ID was invalid or not found.')
|
||||
|
||||
if order_line_id := redis_lookup_id_random(record_id_random=order_line_id, table_name='order_line'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The order line ID was invalid or not found.')
|
||||
|
||||
# ### SECTION ### Process data
|
||||
if remove_order_obj_line_result := remove_order_obj_line(
|
||||
order_line_id = order_line_id,
|
||||
): pass
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response, status_message='Something failed while processing the data.') # Bad Request
|
||||
|
||||
# ### SECTION ### Return successful results
|
||||
if return_obj:
|
||||
if load_order_obj_result := load_order_obj(
|
||||
order_id = order_id,
|
||||
# inc_address = inc_address,
|
||||
# inc_contact = inc_contact,
|
||||
inc_order_line_list = inc_order_line_list,
|
||||
# inc_person = inc_person,
|
||||
).dict(by_alias=commons.by_alias, exclude_unset=commons.exclude_unset):
|
||||
log.info('Loading successful. Returning result')
|
||||
log.debug(order_dict)
|
||||
return mk_resp(data=order_dict, response=commons.response)
|
||||
elif isinstance(load_order_obj_result, list) or load_order_obj_result is None: # Empty list or None
|
||||
return mk_resp(data=None, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
else:
|
||||
data = {}
|
||||
data['order_id'] = order_id
|
||||
data['order_id_random'] = order_id_random
|
||||
data['order_line_id'] = order_line_id
|
||||
data['order_line_id_random'] = order_line_id_random
|
||||
return mk_resp(data=data, response=commons.response)
|
||||
# ### END ### API Order Routers ### patch_order_obj_remove_line() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Order Routers ### get_order_obj_li() ###
|
||||
# Updated 2022-01-18
|
||||
@router.get('/v3/{for_obj_type}/{for_obj_id}/order/list', response_model=Resp_Body_Base)
|
||||
async def get_order_obj_li(
|
||||
for_obj_type: str = Path(min_length=2, max_length=50),
|
||||
for_obj_id: str = Path(min_length=11, max_length=22),
|
||||
order_status: str = 'complete',
|
||||
order_checkout_status: str = 'complete',
|
||||
from_datetime: datetime.datetime = None,
|
||||
to_datetime: datetime.datetime = None,
|
||||
|
||||
inc_address: bool = False,
|
||||
inc_contact: bool = False,
|
||||
inc_order_cfg: bool = False,
|
||||
inc_order_line_list: bool = False,
|
||||
inc_person: bool = False,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if obj_type in ['account', 'person']: pass
|
||||
else: return mk_resp(data=False, status_code=400, response=response, status_message='The object type passed was invalid or not found. Expecting "account" or "person".') # Bad Request
|
||||
|
||||
if obj_type_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, response=commons.response) # Not Found
|
||||
|
||||
if get_order_rec_list_result := get_order_rec_list(
|
||||
for_obj_type = for_obj_type,
|
||||
for_obj_id = for_obj_id,
|
||||
from_datetime = from_datetime,
|
||||
to_datetime = to_datetime,
|
||||
status = order_status,
|
||||
# checkout_status = order_checkout_status,
|
||||
enabled = commons.enabled,
|
||||
limit = commons.limit,
|
||||
offset = commons.offset,
|
||||
):
|
||||
order_obj_list = []
|
||||
for order_rec in get_order_rec_list_result:
|
||||
if load_order_obj_result := load_order_obj(
|
||||
order_id = order_rec.get('order_id'),
|
||||
inc_address = inc_address,
|
||||
inc_contact = inc_contact,
|
||||
inc_order_cfg = inc_order_cfg,
|
||||
inc_order_line_list = inc_order_line_list,
|
||||
inc_person = inc_person,
|
||||
enabled = commons.enabled,
|
||||
limit = commons.limit,
|
||||
by_alias = commons.by_alias,
|
||||
exclude_unset = commons.exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
log.debug(load_order_obj_result)
|
||||
order_obj_list.append(load_order_obj_result)
|
||||
else:
|
||||
order_obj_list.append(None)
|
||||
log.info('Loading successful. Returning result')
|
||||
log.debug(order_obj_list)
|
||||
return mk_resp(data=order_obj_list, response=commons.response)
|
||||
elif isinstance(get_order_rec_list_result, list) or get_order_rec_list_result is None: # Empty list or None
|
||||
return mk_resp(data=None, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
# ### END ### API Order Routers ### get_order_obj_li() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Order Routes ### get_order_obj() ###
|
||||
# NOTE 2021-08-09: Use with rework of order_cart
|
||||
# Updated 2022-12-18
|
||||
@router.get('/v3/order/{order_id}', response_model=Resp_Body_Base)
|
||||
async def get_order_obj(
|
||||
order_id: str = Path(min_length=11, max_length=22),
|
||||
|
||||
inc_address: bool = False,
|
||||
inc_contact: bool = False,
|
||||
inc_order_cfg: bool = False,
|
||||
inc_order_line_list: bool = False,
|
||||
inc_person: bool = False,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if order_id := redis_lookup_id_random(record_id_random=order_id, table_name='order'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The order ID was invalid or not found.')
|
||||
|
||||
if load_order_obj_result := load_order_obj(
|
||||
order_id = order_id,
|
||||
inc_address = inc_address,
|
||||
inc_contact = inc_contact,
|
||||
inc_order_cfg = inc_order_cfg,
|
||||
inc_order_line_list = inc_order_line_list,
|
||||
inc_person = inc_person,
|
||||
limit = commons.limit,
|
||||
enabled = commons.enabled,
|
||||
by_alias = commons.by_alias,
|
||||
exclude_unset = commons.exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
log.debug(load_order_obj_result)
|
||||
order_dict = load_order_obj_result.dict(by_alias=commons.by_alias, exclude_unset=False) # NOTE NOTE NOTE NOTE exclude_unset is forced to False for now. Will return more fields than is ideal. Need to create another Order_Line_Base. Probably Order_Line_OUT_Base
|
||||
log.info('Loading successful. Returning result')
|
||||
return mk_resp(data=order_dict, response=commons.response)
|
||||
elif isinstance(load_order_obj_result, list) or load_order_obj_result is None: # Empty list or None
|
||||
return mk_resp(data=None, status_code=404, response=commons.response) # Not Found
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=commons.response) # Bad Request
|
||||
# ### END ### API Order Routes ### get_order_obj() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Order ### get_person_id_order_cart() ###
|
||||
# NOTE 2021-08-09: Use with rework of order_cart. The most recent (hopefully only one) "open" order for a person.
|
||||
# Updated 2022-12-18
|
||||
@router.get('/v3/person/{person_id}/order/cart', response_model=Resp_Body_Base)
|
||||
async def get_person_id_order_cart(
|
||||
person_id: str = Path(min_length=11, max_length=22),
|
||||
enabled: str = 'enabled',
|
||||
inc_order_line_list: bool = False,
|
||||
inc_order_cfg: bool = False,
|
||||
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.WARNING) # 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
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The person ID was invalid or not found.')
|
||||
|
||||
# Query to get the one "open" order status for a person ID
|
||||
|
||||
return False
|
||||
# ### END ### API Order ### get_person_id_order_cart() ###
|
||||
|
||||
|
||||
# ### BEGIN ### API Order Routers ### delete_order_obj() ###
|
||||
# Updated 2022-01-18
|
||||
@router.delete('/v3/order/{order_id}', response_model=Resp_Body_Base)
|
||||
async def delete_order_obj(
|
||||
order_id: str = Path(min_length=11, max_length=22),
|
||||
commons: Common_Route_Params = Depends(common_route_params),
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if order_id := redis_lookup_id_random(record_id_random=order_id, table_name='order'): pass
|
||||
else: return mk_resp(data=None, status_code=404, response=commons.response, status_message='The order ID was invalid or not found.')
|
||||
|
||||
obj_type = 'order'
|
||||
result = delete_obj_template(
|
||||
obj_type = obj_type,
|
||||
obj_id = obj_id,
|
||||
)
|
||||
return result
|
||||
# ### END ### API Order Routers ### delete_order_obj() ###
|
||||
195
app/routers/archive/post.py
Normal file
195
app/routers/archive/post.py
Normal file
@@ -0,0 +1,195 @@
|
||||
import datetime
|
||||
#from datetime import datetime, time, timedelta
|
||||
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 *
|
||||
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 app.methods.post_methods import get_post_rec_list, load_post_obj
|
||||
|
||||
from app.models.post_models import Post_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/post', response_model=Resp_Body_Base)
|
||||
async def post_post_obj(
|
||||
obj: Post_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'post'
|
||||
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('/post/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_post_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Post_Base = None,
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'post'
|
||||
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('/post/list', response_model=Resp_Body_Base)
|
||||
async def get_post_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,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'post'
|
||||
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
|
||||
|
||||
|
||||
# ### BEGIN ### API Post ### get_account_obj_post_list() ###
|
||||
# Updated 2021-12-13
|
||||
@router.get('/account/{account_id}/post/list', response_model=Resp_Body_Base)
|
||||
async def get_account_obj_post_list(
|
||||
account_id: str = Path(min_length=11, max_length=22),
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
archive_on: datetime.datetime = None,
|
||||
inc_account_cfg: bool = False,
|
||||
inc_address: bool = False, # Under contact
|
||||
inc_contact: bool = False,
|
||||
inc_person: bool = False,
|
||||
inc_post_comment_list: bool = False,
|
||||
inc_user: bool = False,
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
|
||||
else:
|
||||
return mk_resp(data=None, status_code=404)
|
||||
|
||||
response_data = None
|
||||
|
||||
# Updated 2021-12-13
|
||||
if post_rec_list_result := get_post_rec_list(
|
||||
for_obj_type = 'account',
|
||||
for_obj_id = account_id,
|
||||
limit = limit,
|
||||
enabled = enabled,
|
||||
archive_on = archive_on,
|
||||
):
|
||||
post_result_list = []
|
||||
for post_rec in post_rec_list_result:
|
||||
if load_post_result := load_post_obj(
|
||||
post_id = post_rec.get('post_id'),
|
||||
limit = limit,
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
enabled = enabled,
|
||||
inc_person = inc_person,
|
||||
inc_post_comment_list = inc_post_comment_list,
|
||||
inc_user = inc_user,
|
||||
):
|
||||
post_result_list.append(load_post_result)
|
||||
else:
|
||||
post_result_list.append(None)
|
||||
response_data = post_result_list
|
||||
elif isinstance(post_rec_list_result, list) or post_rec_list_result is None: # Empty list or None
|
||||
log.info('No results')
|
||||
return mk_resp(data=False, status_code=404, response=response) # Not Found
|
||||
else:
|
||||
log.warning('Likely bad request')
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data)
|
||||
# ### END ### API Post ### get_account_obj_post_list() ###
|
||||
|
||||
|
||||
@router.get('/post/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def get_post_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'post'
|
||||
result = get_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
by_alias=True,
|
||||
exclude_unset=True,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
@router.delete('/post/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_post_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'post'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
131
app/routers/archive/post_comment.py
Normal file
131
app/routers/archive/post_comment.py
Normal file
@@ -0,0 +1,131 @@
|
||||
import datetime
|
||||
#from datetime import datetime, time, timedelta
|
||||
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 *
|
||||
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 app.models.post_comment_models import Post_Comment_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('', response_model=Resp_Body_Base)
|
||||
async def post_post_comment_obj(
|
||||
obj: Post_Comment_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'post_comment'
|
||||
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_post_comment_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Post_Comment_Base = None,
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'post_comment'
|
||||
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_post_comment_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,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'post_comment'
|
||||
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
|
||||
|
||||
|
||||
@router.get('/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def get_post_comment_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'post_comment'
|
||||
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_post_comment_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'post_comment'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
203
app/routers/archive/product.py
Normal file
203
app/routers/archive/product.py
Normal file
@@ -0,0 +1,203 @@
|
||||
import datetime
|
||||
#from datetime import datetime, time, timedelta
|
||||
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 *
|
||||
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 app.methods.product_methods import get_product_rec_list, load_product_obj
|
||||
|
||||
from app.models.product_models import Product_Base
|
||||
from app.models.response_models import *
|
||||
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.post('/product', response_model=Resp_Body_Base)
|
||||
async def post_product_obj(
|
||||
obj: Product_Base,
|
||||
x_account_id: str = Header(...),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'product'
|
||||
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('/product/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def patch_product_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
obj: Product_Base = None,
|
||||
x_account_id: Optional[str] = Header(..., ),
|
||||
return_obj: Optional[bool] = True,
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'product'
|
||||
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('/product/list', response_model=Resp_Body_Base)
|
||||
async def get_product_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),
|
||||
prod_type: Optional[str] = Query(None, min_length=2, max_length=50),
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
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=None, status_code=404)
|
||||
|
||||
# Updated 2021-07-01
|
||||
if product_rec_list_result := get_product_rec_list(
|
||||
for_obj_type = for_obj_type,
|
||||
for_obj_id = for_obj_id,
|
||||
prod_type = prod_type,
|
||||
limit = limit,
|
||||
enabled = enabled,
|
||||
):
|
||||
product_result_list = []
|
||||
for product_rec in product_rec_list_result:
|
||||
if load_product_result := load_product_obj(
|
||||
product_id = product_rec.get('product_id', None),
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
product_result_list.append(load_product_result)
|
||||
else:
|
||||
product_result_list.append(None)
|
||||
response_data = product_result_list
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data)
|
||||
|
||||
|
||||
@router.get('/account/{account_id}/product/list', response_model=Resp_Body_Base)
|
||||
async def get_account_product_obj_li(
|
||||
account_id: str = Path(min_length=11, max_length=22),
|
||||
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),
|
||||
prod_type: Optional[str] = Query(None, min_length=2, max_length=50),
|
||||
limit: int = 500, # For now this covers any included objects or object lists
|
||||
enabled: str = 'enabled', # For now this covers any included objects or object lists
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
if account_id := redis_lookup_id_random(record_id_random=account_id, table_name='account'): pass
|
||||
else: return mk_resp(data=None, status_code=404)
|
||||
if for_obj_id := redis_lookup_id_random(record_id_random=for_obj_id, table_name=for_obj_type): pass
|
||||
else: pass
|
||||
|
||||
# Updated 2021-07-01
|
||||
if product_rec_list_result := get_product_rec_list(
|
||||
account_id = account_id,
|
||||
for_obj_type = for_obj_type,
|
||||
for_obj_id = for_obj_id,
|
||||
prod_type = prod_type,
|
||||
limit = limit,
|
||||
enabled = enabled,
|
||||
):
|
||||
product_result_list = []
|
||||
for product_rec in product_rec_list_result:
|
||||
if load_product_result := load_product_obj(
|
||||
product_id = product_rec.get('product_id', None),
|
||||
by_alias = by_alias,
|
||||
exclude_unset = exclude_unset,
|
||||
# model_as_dict = model_as_dict,
|
||||
):
|
||||
product_result_list.append(load_product_result)
|
||||
else:
|
||||
product_result_list.append(None)
|
||||
response_data = product_result_list
|
||||
else:
|
||||
return mk_resp(data=False, status_code=400, response=response) # Bad Request
|
||||
|
||||
return mk_resp(data=response_data)
|
||||
|
||||
|
||||
@router.get('/product/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def get_product_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
by_alias: Optional[bool] = True,
|
||||
exclude_unset: Optional[bool] = True,
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'product'
|
||||
result = get_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
by_alias=True,
|
||||
exclude_unset=True,
|
||||
response=response,
|
||||
)
|
||||
return result
|
||||
|
||||
|
||||
@router.delete('/product/{obj_id}', response_model=Resp_Body_Base)
|
||||
async def delete_product_obj(
|
||||
obj_id: str = Path(min_length=11, max_length=22),
|
||||
x_account_id: str = Header(...),
|
||||
response: Response = Response,
|
||||
):
|
||||
log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
|
||||
log.debug(locals())
|
||||
|
||||
obj_type = 'product'
|
||||
result = delete_obj_template(
|
||||
obj_type=obj_type,
|
||||
obj_id=obj_id,
|
||||
)
|
||||
return result
|
||||
Reference in New Issue
Block a user