update events via wrapper routers
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
"""Event Service API initialization"""
|
||||
|
||||
from .route_configs import get_route_configs
|
||||
|
||||
__all__ = ["get_route_configs"]
|
||||
|
||||
@@ -1,8 +1,19 @@
|
||||
import typing
|
||||
from collections.abc import Callable
|
||||
|
||||
from fastapi import Request
|
||||
from typing import Dict, Any
|
||||
from ApiEvents.abstract_class import (
|
||||
MethodToEvent,
|
||||
RouteFactoryConfig,
|
||||
EndpointFactoryConfig,
|
||||
endpoint_wrapper,
|
||||
)
|
||||
from ApiEvents.base_request_model import BaseRequestModel, DictRequestModel
|
||||
|
||||
from typing import TYPE_CHECKING, Dict, Any
|
||||
from fastapi import Request, Path, Body, Depends, APIRouter
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from fastapi import Request
|
||||
|
||||
from ApiValidations.Custom.token_objects import (
|
||||
OccupantTokenObject,
|
||||
@@ -21,15 +32,43 @@ from ApiValidations.Request import (
|
||||
UpdateAccountRecord,
|
||||
ListOptions,
|
||||
)
|
||||
from Services.PostgresDb.Models.alchemy_response import AlchemyJsonResponse
|
||||
from ApiValidations.Response import AccountRecordResponse
|
||||
from events.abstract_class import (
|
||||
MethodToEvent,
|
||||
RouteFactoryConfig,
|
||||
EndpointFactoryConfig,
|
||||
from Services.PostgresDb.Models.alchemy_response import (
|
||||
AlchemyJsonResponse,
|
||||
DictJsonResponse,
|
||||
)
|
||||
from ApiValidations.Response import AccountRecordResponse
|
||||
|
||||
# from events.utils import with_token_event
|
||||
|
||||
class AddressUpdateRequest(BaseModel):
|
||||
"""Request model for address update."""
|
||||
|
||||
data: Dict[str, Any] = Field(..., description="Updated address data")
|
||||
|
||||
|
||||
class AddressUpdateResponse(BaseModel):
|
||||
"""Response model for address update."""
|
||||
|
||||
address_uu_id: str = Field(..., description="UUID of the updated address")
|
||||
data: Dict[str, Any] = Field(..., description="Updated address data")
|
||||
function_code: str = Field(..., description="Function code for the endpoint")
|
||||
|
||||
|
||||
class InsertAccountRecordRequestModel(BaseRequestModel[InsertAccountRecord]):
|
||||
"""Request model for inserting account records."""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class UpdateAccountRecordRequestModel(BaseRequestModel[UpdateAccountRecord]):
|
||||
"""Request model for updating account records."""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class ListOptionsRequestModel(BaseRequestModel[ListOptions]):
|
||||
"""Request model for list options."""
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class AccountRecordsListEventMethods(MethodToEvent):
|
||||
@@ -50,7 +89,7 @@ class AccountRecordsListEventMethods(MethodToEvent):
|
||||
@classmethod
|
||||
def account_records_list(
|
||||
cls,
|
||||
list_options: ListOptions,
|
||||
list_options: ListOptionsRequestModel,
|
||||
token_dict: typing.Union[EmployeeTokenObject, OccupantTokenObject],
|
||||
):
|
||||
db_session = AccountRecords.new_session()
|
||||
@@ -79,7 +118,7 @@ class AccountRecordsListEventMethods(MethodToEvent):
|
||||
@classmethod
|
||||
def account_records_list_flt_res(
|
||||
cls,
|
||||
list_options: ListOptions,
|
||||
list_options: ListOptionsRequestModel,
|
||||
token_dict: typing.Union[EmployeeTokenObject, OccupantTokenObject],
|
||||
):
|
||||
db_session = AccountRecords.new_session()
|
||||
@@ -229,7 +268,7 @@ class AccountRecordsCreateEventMethods(MethodToEvent):
|
||||
@classmethod
|
||||
def account_records_create(
|
||||
cls,
|
||||
data: InsertAccountRecord,
|
||||
data: InsertAccountRecordRequestModel,
|
||||
token_dict: typing.Union[EmployeeTokenObject, OccupantTokenObject],
|
||||
):
|
||||
data_dict = data.excluded_dump()
|
||||
@@ -318,7 +357,7 @@ class AccountRecordsUpdateEventMethods(MethodToEvent):
|
||||
def build_area_update(
|
||||
cls,
|
||||
build_uu_id: str,
|
||||
data: UpdateAccountRecord,
|
||||
data: UpdateAccountRecordRequestModel,
|
||||
token_dict: typing.Union[EmployeeTokenObject, OccupantTokenObject],
|
||||
):
|
||||
if isinstance(token_dict, OccupantTokenObject):
|
||||
@@ -336,52 +375,19 @@ class AccountRecordsUpdateEventMethods(MethodToEvent):
|
||||
)
|
||||
|
||||
|
||||
class AccountRecordsPatchEventMethods(MethodToEvent):
|
||||
|
||||
event_type = "PATCH"
|
||||
event_description = ""
|
||||
event_category = ""
|
||||
|
||||
__event_keys__ = {
|
||||
"34c38937-42a2-45f1-b2ef-a23978650aee": "account_records_patch",
|
||||
}
|
||||
__event_validation__ = {
|
||||
"34c38937-42a2-45f1-b2ef-a23978650aee": None,
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def build_area_patch(
|
||||
cls,
|
||||
build_uu_id: str,
|
||||
data,
|
||||
token_dict: typing.Union[EmployeeTokenObject, OccupantTokenObject],
|
||||
):
|
||||
account_record = AccountRecords.patch_one(build_uu_id, data).data
|
||||
return AlchemyJsonResponse(
|
||||
completed=True,
|
||||
message="Account record patched successfully",
|
||||
result=account_record,
|
||||
)
|
||||
|
||||
|
||||
|
||||
def address_list(request: Request, data: dict) -> Dict[str, Any]:
|
||||
@endpoint_wrapper("/account/records/address/list")
|
||||
async def address_list(request: "Request", data: ListOptionsRequestModel):
|
||||
"""Handle address list endpoint."""
|
||||
# Access context through the handler
|
||||
handler = address_list.handler
|
||||
handler_context = address_list.handler.context
|
||||
function_name = AccountRecordsListEventMethods.__event_keys__.get(handler.function_code)
|
||||
original_function = getattr(AccountRecordsListEventMethods, function_name)
|
||||
# original_function(data, request)
|
||||
return {
|
||||
"data": data,
|
||||
"function_code": handler.function_code, # This will be the URL
|
||||
"token_dict": handler_context.get('token_dict'),
|
||||
"url_of_endpoint": handler_context.get('url_of_endpoint'),
|
||||
"request": str(request.headers),
|
||||
"request_url": str(request.url),
|
||||
"request_base_url": str(request.base_url),
|
||||
}
|
||||
|
||||
def address_create(request: Request, data: dict):
|
||||
|
||||
@endpoint_wrapper("/account/records/address/create")
|
||||
async def address_create(request: "Request", data: DictRequestModel):
|
||||
"""Handle address creation endpoint."""
|
||||
return {
|
||||
"data": data,
|
||||
@@ -390,80 +396,100 @@ def address_create(request: Request, data: dict):
|
||||
"request_base_url": str(request.base_url),
|
||||
}
|
||||
|
||||
def address_search(request: Request, data: dict):
|
||||
|
||||
@endpoint_wrapper("/account/records/address/search")
|
||||
async def address_search(request: "Request", data: DictRequestModel):
|
||||
"""Handle address search endpoint."""
|
||||
# Get function_code from the wrapper's closure
|
||||
function_code = address_search.function_code
|
||||
return {
|
||||
"data": data,
|
||||
"function_code": function_code
|
||||
}
|
||||
return {"data": data}
|
||||
|
||||
def address_update(request: Request, address_uu_id: str, data: dict):
|
||||
"""Handle address update endpoint."""
|
||||
# Get function_code from the wrapper's closure
|
||||
function_code = address_update.function_code
|
||||
return {
|
||||
"address_uu_id": address_uu_id,
|
||||
"data": data,
|
||||
"function_code": function_code
|
||||
}
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@endpoint_wrapper("/account/records/address/{address_uu_id}")
|
||||
async def address_update(
|
||||
request: Request,
|
||||
address_uu_id: str = Path(..., description="UUID of the address to update"),
|
||||
request_data: DictRequestModel = Body(..., description="Request body"),
|
||||
):
|
||||
"""
|
||||
Handle address update endpoint.
|
||||
|
||||
Args:
|
||||
request: FastAPI request object
|
||||
address_uu_id: UUID of the address to update
|
||||
request_data: Request body containing updated address data
|
||||
|
||||
Returns:
|
||||
DictJsonResponse: Response containing updated address info
|
||||
"""
|
||||
return DictJsonResponse(
|
||||
data={
|
||||
"address_uu_id": address_uu_id,
|
||||
"data": request_data.root,
|
||||
"request": str(request.headers),
|
||||
"request_url": str(request.url),
|
||||
"request_base_url": str(request.base_url),
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
prefix = "/account/records"
|
||||
|
||||
# Account Records Router Configuration
|
||||
ACCOUNT_RECORDS_CONFIG = RouteFactoryConfig(
|
||||
name='account_records',
|
||||
prefix='/account/records',
|
||||
tags=['Account Records'],
|
||||
name="account_records",
|
||||
prefix=prefix,
|
||||
tags=["Account Records"],
|
||||
include_in_schema=True,
|
||||
endpoints=[
|
||||
EndpointFactoryConfig(
|
||||
url_prefix = "/account/records",
|
||||
url_prefix=prefix,
|
||||
url_endpoint="/address/list",
|
||||
url_of_endpoint = "/account/records/address/list",
|
||||
url_of_endpoint="/account/records/address/list",
|
||||
endpoint="/address/list",
|
||||
method="POST",
|
||||
summary="List Active/Delete/Confirm Address",
|
||||
description="List Active/Delete/Confirm Address",
|
||||
is_auth_required=True,
|
||||
is_event_required=True,
|
||||
endpoint_function=address_list
|
||||
endpoint_function=address_list,
|
||||
),
|
||||
EndpointFactoryConfig(
|
||||
url_prefix = "/account/records",
|
||||
url_prefix=prefix,
|
||||
url_endpoint="/address/create",
|
||||
url_of_endpoint = "/account/records/address/create",
|
||||
url_of_endpoint="/account/records/address/create",
|
||||
endpoint="/address/create",
|
||||
method="POST",
|
||||
summary="Create Address with given auth levels",
|
||||
description="Create Address with given auth levels",
|
||||
is_auth_required=False,
|
||||
is_event_required=False,
|
||||
endpoint_function=address_create
|
||||
endpoint_function=address_create,
|
||||
),
|
||||
EndpointFactoryConfig(
|
||||
url_prefix = "/account/records",
|
||||
url_prefix=prefix,
|
||||
url_endpoint="/address/search",
|
||||
url_of_endpoint = "/account/records/address/search",
|
||||
url_of_endpoint="/account/records/address/search",
|
||||
endpoint="/address/search",
|
||||
method="POST",
|
||||
summary="Search Address with given auth levels",
|
||||
description="Search Address with given auth levels",
|
||||
is_auth_required=True,
|
||||
is_event_required=True,
|
||||
endpoint_function=address_search
|
||||
endpoint_function=address_search,
|
||||
),
|
||||
EndpointFactoryConfig(
|
||||
url_prefix = "/account/records",
|
||||
url_endpoint="/address/update/{address_uu_id}",
|
||||
url_of_endpoint="/account/records/address/update/{address_uu_id}",
|
||||
endpoint="/address/update/{address_uu_id}",
|
||||
url_prefix=prefix,
|
||||
url_endpoint="/address/{address_uu_id}",
|
||||
url_of_endpoint="/account/records/address/{address_uu_id}",
|
||||
endpoint="/address/{address_uu_id}",
|
||||
method="PUT",
|
||||
summary="Update Address with given auth levels",
|
||||
description="Update Address with given auth levels",
|
||||
is_auth_required=True,
|
||||
is_event_required=True,
|
||||
endpoint_function=address_update
|
||||
)
|
||||
]
|
||||
endpoint_function=address_update,
|
||||
),
|
||||
],
|
||||
).as_dict()
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
"""
|
||||
Route configuration registry.
|
||||
Route configuration registry for Event Service.
|
||||
|
||||
This module collects and registers all route configurations from different modules
|
||||
to be used by the dynamic route creation system.
|
||||
"""
|
||||
|
||||
from typing import Dict, List, Any
|
||||
from events.account.account_records import ACCOUNT_RECORDS_CONFIG
|
||||
from .account.account_records import ACCOUNT_RECORDS_CONFIG
|
||||
|
||||
|
||||
# Registry of all route configurations
|
||||
@@ -14,6 +14,7 @@ ROUTE_CONFIGS = [
|
||||
ACCOUNT_RECORDS_CONFIG,
|
||||
]
|
||||
|
||||
|
||||
def get_route_configs() -> List[Dict[str, Any]]:
|
||||
"""Get all registered route configurations."""
|
||||
return ROUTE_CONFIGS
|
||||
return [ACCOUNT_RECORDS_CONFIG]
|
||||
|
||||
Reference in New Issue
Block a user