From d7f1da8de8d63071ae2db9e0e1f1d127e24025ca Mon Sep 17 00:00:00 2001 From: berkay Date: Tue, 22 Apr 2025 01:20:15 +0300 Subject: [PATCH] identity service completed --- .../abstracts/default_validations.py | 52 +++++++++ ApiControllers/abstracts/event_clusters.py | 3 +- .../IdentityService/Endpoints/people/route.py | 104 ++++-------------- 3 files changed, 78 insertions(+), 81 deletions(-) create mode 100644 ApiControllers/abstracts/default_validations.py diff --git a/ApiControllers/abstracts/default_validations.py b/ApiControllers/abstracts/default_validations.py new file mode 100644 index 0000000..20070a8 --- /dev/null +++ b/ApiControllers/abstracts/default_validations.py @@ -0,0 +1,52 @@ +from fastapi import Header, Depends, Request, Response +from pydantic import BaseModel + +from ApiDefaults.config import api_config + + +class CommonHeaders(BaseModel): + language: str | None = None + domain: str | None = None + timezone: str | None = None + token: str | None = None + request: Request | None = None + response: Response | None = None + operation_id: str | None = None + + @classmethod + def as_dependency( + cls, + request: Request, + response: Response, + language: str = Header(None, alias="language"), + domain: str = Header(None, alias="domain"), + tz: str = Header(None, alias="timezone"), + ): + token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None) + + # Extract operation_id from the route + operation_id = None + if hasattr(request.scope.get('route'), 'operation_id'): + operation_id = request.scope.get('route').operation_id + + return cls( + language=language, + domain=domain, + timezone=tz, + token=token, + request=request, + response=response, + operation_id=operation_id + ) + + def get_headers_dict(self): + """Convert the headers to a dictionary format used in the application""" + import uuid + + return { + "language": self.language or "", + "domain": self.domain or "", + "eys-ext": f"{str(uuid.uuid4())}", + "tz": self.timezone or "GMT+3", + "token": self.token, + } diff --git a/ApiControllers/abstracts/event_clusters.py b/ApiControllers/abstracts/event_clusters.py index a073dd8..b54fe1a 100644 --- a/ApiControllers/abstracts/event_clusters.py +++ b/ApiControllers/abstracts/event_clusters.py @@ -6,6 +6,7 @@ class EventCluster: """ EventCluster """ + def __init__(self, endpoint_uu_id: str, name: str): self.endpoint_uu_id = endpoint_uu_id self.name = name @@ -98,6 +99,7 @@ class RouterCluster: """ RouterCluster """ + event_clusters: dict[str, EventCluster] = {} def __init__(self, name: str): @@ -117,4 +119,3 @@ class RouterCluster: if event_cluster_name not in self.event_clusters: raise ValueError("Event cluster not found") return self.event_clusters[event_cluster_name] - \ No newline at end of file diff --git a/ApiServices/IdentityService/Endpoints/people/route.py b/ApiServices/IdentityService/Endpoints/people/route.py index 118d12a..256c96b 100644 --- a/ApiServices/IdentityService/Endpoints/people/route.py +++ b/ApiServices/IdentityService/Endpoints/people/route.py @@ -1,11 +1,9 @@ -import uuid +from fastapi import APIRouter, Depends -from fastapi import APIRouter, Request, Response, Header - -from ApiDefaults.config import api_config -from Events.people.cluster import PeopleRouterCluster +from ApiControllers.abstracts.default_validations import CommonHeaders from ApiControllers.providers.token_provider import TokenProvider from Controllers.Postgres.pagination import PaginateOnly +from Events.people.cluster import PeopleRouterCluster people_route = APIRouter(prefix="/people", tags=["People"]) @@ -17,36 +15,18 @@ people_route = APIRouter(prefix="/people", tags=["People"]) operation_id="f102db46-031a-43e4-966a-dae6896f985b", ) def people_route_list( - request: Request, - response: Response, data: PaginateOnly, - language: str = Header(None, alias="language"), - domain: str = Header(None, alias="domain"), - tz: str = Header(None, alias="timezone"), + headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ List people endpoint """ - endpoint_code = "f102db46-031a-43e4-966a-dae6896f985b" - token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None) - headers = { - "language": language or "", - "domain": domain or "", - "eys-ext": f"{str(uuid.uuid4())}", - "tz": tz or "GMT+3", - "token": token, - } - token_object = TokenProvider.get_dict_from_redis(token=token) - event_key = TokenProvider.retrieve_event_codes( - endpoint_code=endpoint_code, token=token_object - ) - event_cluster_matched = PeopleRouterCluster.get_event_cluster("PeopleList").match_event( - event_key=event_key - ) - response.headers["X-Header"] = "List Header GET" - if runner_callable := event_cluster_matched.event_callable(list_options=data): - return runner_callable - raise ValueError("Event key not found or multiple matches found") + token_object = TokenProvider.get_dict_from_redis(token=headers.token) + event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object) + event_key = TokenProvider.retrieve_event_codes(**event_founder_dict) + FoundCluster = PeopleRouterCluster.get_event_cluster("PeopleList") + event_cluster_matched = FoundCluster.match_event(event_key=event_key) + return event_cluster_matched.event_callable() @people_route.post( @@ -55,35 +35,17 @@ def people_route_list( operation_id="eb465fde-337f-4b81-94cf-28c6d4f2b1b6", ) def people_route_create( - request: Request, - response: Response, - language: str = Header(None, alias="language"), - domain: str = Header(None, alias="domain"), - tz: str = Header(None, alias="timezone"), + headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ Create people endpoint """ - endpoint_code = "eb465fde-337f-4b81-94cf-28c6d4f2b1b6" - token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None) - headers = { - "language": language or "", - "domain": domain or "", - "eys-ext": f"{str(uuid.uuid4())}", - "tz": tz or "GMT+3", - "token": token, - } - token_object = TokenProvider.get_dict_from_redis(token=token) - event_key = TokenProvider.retrieve_event_codes( - endpoint_code=endpoint_code, token=token_object - ) - event_cluster_matched = PeopleRouterCluster.get_event_cluster("PeopleCreate").match_event( - event_key=event_key - ) - response.headers["X-Header"] = "Create Header POST" - if runner_callable := event_cluster_matched.event_callable(): - return runner_callable - raise ValueError("Event key not found or multiple matches found") + token_object = TokenProvider.get_dict_from_redis(token=headers.token) + event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object) + event_key = TokenProvider.retrieve_event_codes(**event_founder_dict) + FoundCluster = PeopleRouterCluster.get_event_cluster("PeopleCreate") + event_cluster_matched = FoundCluster.match_event(event_key=event_key) + return event_cluster_matched.event_callable() @people_route.post( @@ -92,32 +54,14 @@ def people_route_create( operation_id="c9e5ba69-6915-43f5-8f9c-a5c2aa865b89", ) def people_route_update( - request: Request, - response: Response, - language: str = Header(None, alias="language"), - domain: str = Header(None, alias="domain"), - tz: str = Header(None, alias="timezone"), + headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ Update people endpoint """ - token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None) - endpoint_code = "c9e5ba69-6915-43f5-8f9c-a5c2aa865b89" - headers = { - "language": language or "", - "domain": domain or "", - "eys-ext": f"{str(uuid.uuid4())}", - "tz": tz or "GMT+3", - "token": token, - } - token_object = TokenProvider.get_dict_from_redis(token=token) - event_key = TokenProvider.retrieve_event_codes( - endpoint_code=endpoint_code, token=token_object - ) - event_cluster_matched = PeopleRouterCluster.get_event_cluster("PeopleUpdate").match_event( - event_key=event_key - ) - response.headers["X-Header"] = "Update Header POST" - if runner_callable := event_cluster_matched.event_callable(): - return runner_callable - raise ValueError("Event key not found or multiple matches found") + token_object = TokenProvider.get_dict_from_redis(token=headers.token) + event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object) + event_key = TokenProvider.retrieve_event_codes(**event_founder_dict) + FoundCluster = PeopleRouterCluster.get_event_cluster("PeopleUpdate") + event_cluster_matched = FoundCluster.match_event(event_key=event_key) + return event_cluster_matched.event_callable()