identity service completed
This commit is contained in:
parent
9069ba0754
commit
d7f1da8de8
|
|
@ -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,
|
||||||
|
}
|
||||||
|
|
@ -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]
|
||||||
|
|
||||||
|
|
@ -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")
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue