wag-managment-api-service-v.../Events/AllEvents/events/address/function_handlers.py

129 lines
5.5 KiB
Python

from typing import Union, Optional
from ApiLayers.ApiValidations.Request import ListOptions
from Events.base_request_model import BaseRouteModel, ListOptionsBase
from Services.PostgresDb.Models.pagination import PaginationResult
from ApiLayers.Schemas import AddressNeighborhood
class Handlers:
"""Class for handling authentication functions"""
@classmethod # Requires no auth context
def handle_function(cls, **kwargs):
"""Handle function with kwargs"""
return
class AddressListFunctions(BaseRouteModel):
@classmethod
def template_example_function_list(cls, data: Optional[Union[dict, ListOptions]]) -> PaginationResult:
list_options_base = ListOptionsBase(
table=AddressNeighborhood, list_options=data, model_query=None,
)
db_session, query_options = list_options_base.init_list_options()
if cls.context_retriever.token.is_occupant:
AddressNeighborhood.pre_query = AddressNeighborhood.filter_all(
AddressNeighborhood.neighborhood_code.icontains("10"),
db=db_session,
).query
elif cls.context_retriever.token.is_employee:
AddressNeighborhood.pre_query = AddressNeighborhood.filter_all(
AddressNeighborhood.neighborhood_code.icontains("9"),
db=db_session,
).query
records = AddressNeighborhood.filter_all(*query_options.convert(), db=db_session)
return list_options_base.paginated_result(
records=records, response_model=getattr(cls.context_retriever, 'RESPONSE_VALIDATOR', None)
)
class AddressCreateFunctions(BaseRouteModel):
@classmethod
def template_example_function_list(cls, data: Optional[Union[dict, ListOptions]]) -> PaginationResult:
from ApiLayers.Schemas import AddressNeighborhood
list_options_base = ListOptionsBase(
table=AddressNeighborhood, list_options=data, model_query=None,
)
db_session, query_options = list_options_base.init_list_options()
if cls.context_retriever.token.is_occupant:
AddressNeighborhood.pre_query = AddressNeighborhood.filter_all(
AddressNeighborhood.neighborhood_code.icontains("10"),
db=db_session,
).query
elif cls.context_retriever.token.is_employee:
AddressNeighborhood.pre_query = AddressNeighborhood.filter_all(
AddressNeighborhood.neighborhood_code.icontains("9"),
db=db_session,
).query
records = AddressNeighborhood.filter_all(*query_options.convert(), db=db_session)
return list_options_base.paginated_result(
records=records, response_model=getattr(cls.context_retriever, 'RESPONSE_VALIDATOR', None)
)
class AddressSearchFunctions(BaseRouteModel):
"""Event methods for searching addresses.
This class handles address search functionality including text search
and filtering.
"""
@classmethod
def template_example_function_list(cls, data: Optional[Union[dict, ListOptions]]) -> PaginationResult:
from ApiLayers.Schemas import AddressNeighborhood
list_options_base = ListOptionsBase(
table=AddressNeighborhood, list_options=data, model_query=None,
)
db_session, query_options = list_options_base.init_list_options()
if cls.context_retriever.token.is_occupant:
AddressNeighborhood.pre_query = AddressNeighborhood.filter_all(
AddressNeighborhood.neighborhood_code.icontains("10"),
db=db_session,
).query
elif cls.context_retriever.token.is_employee:
AddressNeighborhood.pre_query = AddressNeighborhood.filter_all(
AddressNeighborhood.neighborhood_code.icontains("9"),
db=db_session,
).query
records = AddressNeighborhood.filter_all(*query_options.convert(), db=db_session)
return list_options_base.paginated_result(
records=records, response_model=getattr(cls.context_retriever, 'RESPONSE_VALIDATOR', None)
)
class AddressUpdateFunctions(BaseRouteModel):
@classmethod
def template_example_function_list(cls, data: Optional[Union[dict, ListOptions]]) -> PaginationResult:
from ApiLayers.Schemas import AddressNeighborhood
list_options_base = ListOptionsBase(
table=AddressNeighborhood, list_options=data, model_query=None,
)
db_session, query_options = list_options_base.init_list_options()
if cls.context_retriever.token.is_occupant:
AddressNeighborhood.pre_query = AddressNeighborhood.filter_all(
AddressNeighborhood.neighborhood_code.icontains("10"),
db=db_session,
).query
elif cls.context_retriever.token.is_employee:
AddressNeighborhood.pre_query = AddressNeighborhood.filter_all(
AddressNeighborhood.neighborhood_code.icontains("9"),
db=db_session,
).query
records = AddressNeighborhood.filter_all(*query_options.convert(), db=db_session)
return list_options_base.paginated_result(
records=records, response_model=getattr(cls.context_retriever, 'RESPONSE_VALIDATOR', None)
)
class AddressSuperUserFunctions:
AddressListFunctions = AddressListFunctions
AddressCreateFunctions = AddressCreateFunctions
AddressSearchFunctions = AddressSearchFunctions
AddressUpdateFunctions = AddressUpdateFunctions