diff --git a/app/main.py b/app/main.py index 60c1163..585e35a 100644 --- a/app/main.py +++ b/app/main.py @@ -156,7 +156,7 @@ app.include_router( ) app.include_router( log_client_viewing.router, - prefix='/log/client_viewing', + # prefix='/log/client_viewing', tags=['Log Client Viewing'], ) app.include_router( @@ -265,6 +265,7 @@ origins = [ 'http://dev-idaa.localhost:5000', 'http://connect.home:5000', 'http://connect.localhost:5000', + 'http://svelte.localhost:5555', ] app.add_middleware( diff --git a/app/methods/log_client_viewing_methods.py b/app/methods/log_client_viewing_methods.py new file mode 100644 index 0000000..2d29adc --- /dev/null +++ b/app/methods/log_client_viewing_methods.py @@ -0,0 +1,97 @@ +from __future__ import annotations +import datetime + +from typing import Dict, List, Optional, Set, Union +from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator + +from app.db_sql import redis_lookup_id_random, sql_insert, sql_insert_or_update, sql_select, sql_update +from app.lib_general import log, logging + + +from app.models.common_field_schema import default_num_bytes +from app.models.log_client_viewing_models import Log_Client_Viewing_Base + + +# ### BEGIN ### API Log Client Viewing Methods ### load_log_client_viewing_obj() ### +def load_log_client_viewing_obj( + log_client_viewing_id: int|str, + limit: int = 10000, + by_alias: bool = True, + exclude_unset: bool = True, + model_as_dict: bool = False, + ) -> Log_Client_Viewing_Base|bool: + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + if log_client_viewing_id := redis_lookup_id_random(record_id_random=log_client_viewing_id, table_name='log_client_viewing'): pass + else: return False + + if log_client_viewing_rec := sql_select(table_name='v_log_client_viewing', record_id=log_client_viewing_id): pass + else: return False + + try: + log_client_viewing_obj = Log_Client_Viewing_Base(**log_client_viewing_rec) + log.debug(log_client_viewing_obj) + except ValidationError as e: + log.error(e.json()) + + if model_as_dict: + return log_client_viewing_obj.dict(by_alias=by_alias, exclude_unset=exclude_unset) # pylint: disable=no-member + else: + return log_client_viewing_obj +# ### END ### API Log Client Viewing Methods ### load_log_client_viewing_obj() ### + + +# ### BEGIN ### API Log Client Viewing Methods ### get_log_client_viewing_rec_list() ### +def get_log_client_viewing_rec_list( + account_id: str, + from_datetime: datetime.datetime = None, + to_datetime: datetime.datetime = None, + limit: int = 1000, + enabled: str = 'enabled', # enabled, disabled, all + ) -> list|bool: + 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 False + data = {} + data['account_id'] = account_id + sql_account_id = f'`tbl`.account_id = :account_id' + + # if enabled in ['enabled', 'disabled', 'all']: + # if enabled == 'enabled': + # data['enable'] = True + # sql_enabled = f'AND `tbl`.enable = :enable' + # elif enabled == 'disabled': + # data['enable'] = False + # sql_enabled = f'AND `tbl`.enable = :enable' + # elif enabled == 'all': + # sql_enabled = '' + sql_enabled = '' + + if limit: + data['limit'] = limit + sql_limit = f'LIMIT :limit' + else: + sql_limit = '' + + sql = f""" + SELECT `tbl`.id AS 'log_client_viewing_id', `tbl`.id_random AS 'log_client_viewing_id_random' + FROM `log_client_viewing` AS `tbl` + WHERE + {sql_account_id} + {sql_enabled} + ORDER BY `tbl`.created_on DESC, `tbl`.updated_on DESC + {sql_limit}; + """ + + if log_client_viewing_rec_li_result := sql_select(data=data, sql=sql, as_list=True): + log_client_viewing_rec_li = log_client_viewing_rec_li_result + else: + log_client_viewing_rec_li = [] + log.setLevel(logging.DEBUG) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(log_client_viewing_rec_li_result) + + return log_client_viewing_rec_li +# ### END ### API Log Client Viewing Methods ### get_log_client_viewing_rec_list() ### diff --git a/app/routers/log_client_viewing.py b/app/routers/log_client_viewing.py index 1f82942..cd98af8 100644 --- a/app/routers/log_client_viewing.py +++ b/app/routers/log_client_viewing.py @@ -9,7 +9,7 @@ from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, 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.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 @@ -18,7 +18,7 @@ from app.models.response_models import Resp_Body_Base, mk_resp router = APIRouter() -@router.post('', response_model=Resp_Body_Base) +@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(...), @@ -41,7 +41,7 @@ async def post_log_client_viewing_obj( return result -@router.patch('/{obj_id}', response_model=Resp_Body_Base) +@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 = Query(..., min_length=1, max_length=22), @@ -66,3 +66,66 @@ async def patch_log_client_viewing_obj( 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 = Query(..., min_length=1, 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, + ): + 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) # 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 = Query(..., min_length=1, max_length=22), + x_account_id: str = Header(...), + ): + log.setLevel(logging.WARNING) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL + log.debug(locals()) + + obj_type = 'log_client_viewing' + result = delete_obj_template( + obj_type=obj_type, + obj_id=log_client_viewing_obj_id, + ) + return result diff --git a/app/routers/membership_group.py b/app/routers/membership_group.py index c259bb4..eac68f7 100644 --- a/app/routers/membership_group.py +++ b/app/routers/membership_group.py @@ -117,7 +117,6 @@ async def get_account_membership_group_obj_li( 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, @@ -152,7 +151,7 @@ async def get_account_membership_group_obj_li( return mk_resp(data=False, status_code=400) # Bad Request return mk_resp(data=response_data) -# ### BEGIN ### API Membership Group Methods ### get_account_membership_group_obj_li() ### +# ### END ### API Membership Group Methods ### get_account_membership_group_obj_li() ### # Look up is only for account, person, or user records diff --git a/app/routers/membership_type.py b/app/routers/membership_type.py index cf0488a..a14a3ea 100644 --- a/app/routers/membership_type.py +++ b/app/routers/membership_type.py @@ -117,7 +117,6 @@ async def get_account_membership_type_obj_li( 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_type_rec_list_result := get_membership_type_rec_list( account_id = account_id,