identity service completed

This commit is contained in:
berkay 2025-04-22 01:20:15 +03:00
parent 9069ba0754
commit d7f1da8de8
3 changed files with 78 additions and 81 deletions

View File

@ -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,
}

View File

@ -6,6 +6,7 @@ class EventCluster:
""" """
EventCluster EventCluster
""" """
def __init__(self, endpoint_uu_id: str, name: str): def __init__(self, endpoint_uu_id: str, name: str):
self.endpoint_uu_id = endpoint_uu_id self.endpoint_uu_id = endpoint_uu_id
self.name = name self.name = name
@ -98,6 +99,7 @@ class RouterCluster:
""" """
RouterCluster RouterCluster
""" """
event_clusters: dict[str, EventCluster] = {} event_clusters: dict[str, EventCluster] = {}
def __init__(self, name: str): def __init__(self, name: str):
@ -117,4 +119,3 @@ class RouterCluster:
if event_cluster_name not in self.event_clusters: if event_cluster_name not in self.event_clusters:
raise ValueError("Event cluster not found") raise ValueError("Event cluster not found")
return self.event_clusters[event_cluster_name] return self.event_clusters[event_cluster_name]

View File

@ -1,11 +1,9 @@
import uuid from fastapi import APIRouter, Depends
from fastapi import APIRouter, Request, Response, Header from ApiControllers.abstracts.default_validations import CommonHeaders
from ApiDefaults.config import api_config
from Events.people.cluster import PeopleRouterCluster
from ApiControllers.providers.token_provider import TokenProvider from ApiControllers.providers.token_provider import TokenProvider
from Controllers.Postgres.pagination import PaginateOnly from Controllers.Postgres.pagination import PaginateOnly
from Events.people.cluster import PeopleRouterCluster
people_route = APIRouter(prefix="/people", tags=["People"]) 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", operation_id="f102db46-031a-43e4-966a-dae6896f985b",
) )
def people_route_list( def people_route_list(
request: Request,
response: Response,
data: PaginateOnly, data: PaginateOnly,
language: str = Header(None, alias="language"), headers: CommonHeaders = Depends(CommonHeaders.as_dependency),
domain: str = Header(None, alias="domain"),
tz: str = Header(None, alias="timezone"),
): ):
""" """
List people endpoint List people endpoint
""" """
endpoint_code = "f102db46-031a-43e4-966a-dae6896f985b" token_object = TokenProvider.get_dict_from_redis(token=headers.token)
token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None) event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object)
headers = { event_key = TokenProvider.retrieve_event_codes(**event_founder_dict)
"language": language or "", FoundCluster = PeopleRouterCluster.get_event_cluster("PeopleList")
"domain": domain or "", event_cluster_matched = FoundCluster.match_event(event_key=event_key)
"eys-ext": f"{str(uuid.uuid4())}", return event_cluster_matched.event_callable()
"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")
@people_route.post( @people_route.post(
@ -55,35 +35,17 @@ def people_route_list(
operation_id="eb465fde-337f-4b81-94cf-28c6d4f2b1b6", operation_id="eb465fde-337f-4b81-94cf-28c6d4f2b1b6",
) )
def people_route_create( def people_route_create(
request: Request, headers: CommonHeaders = Depends(CommonHeaders.as_dependency),
response: Response,
language: str = Header(None, alias="language"),
domain: str = Header(None, alias="domain"),
tz: str = Header(None, alias="timezone"),
): ):
""" """
Create people endpoint Create people endpoint
""" """
endpoint_code = "eb465fde-337f-4b81-94cf-28c6d4f2b1b6" token_object = TokenProvider.get_dict_from_redis(token=headers.token)
token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None) event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object)
headers = { event_key = TokenProvider.retrieve_event_codes(**event_founder_dict)
"language": language or "", FoundCluster = PeopleRouterCluster.get_event_cluster("PeopleCreate")
"domain": domain or "", event_cluster_matched = FoundCluster.match_event(event_key=event_key)
"eys-ext": f"{str(uuid.uuid4())}", return event_cluster_matched.event_callable()
"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")
@people_route.post( @people_route.post(
@ -92,32 +54,14 @@ def people_route_create(
operation_id="c9e5ba69-6915-43f5-8f9c-a5c2aa865b89", operation_id="c9e5ba69-6915-43f5-8f9c-a5c2aa865b89",
) )
def people_route_update( def people_route_update(
request: Request, headers: CommonHeaders = Depends(CommonHeaders.as_dependency),
response: Response,
language: str = Header(None, alias="language"),
domain: str = Header(None, alias="domain"),
tz: str = Header(None, alias="timezone"),
): ):
""" """
Update people endpoint Update people endpoint
""" """
token = request.headers.get(api_config.ACCESS_TOKEN_TAG, None) token_object = TokenProvider.get_dict_from_redis(token=headers.token)
endpoint_code = "c9e5ba69-6915-43f5-8f9c-a5c2aa865b89" event_founder_dict = dict(endpoint_code=headers.operation_id, token=token_object)
headers = { event_key = TokenProvider.retrieve_event_codes(**event_founder_dict)
"language": language or "", FoundCluster = PeopleRouterCluster.get_event_cluster("PeopleUpdate")
"domain": domain or "", event_cluster_matched = FoundCluster.match_event(event_key=event_key)
"eys-ext": f"{str(uuid.uuid4())}", return event_cluster_matched.event_callable()
"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")