more services added
This commit is contained in:
31
api_services/api_builds/identity_service/Dockerfile
Normal file
31
api_services/api_builds/identity_service/Dockerfile
Normal file
@@ -0,0 +1,31 @@
|
||||
FROM python:3.12-slim
|
||||
|
||||
WORKDIR /
|
||||
|
||||
# Install system dependencies and Poetry
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends gcc && rm -rf /var/lib/apt/lists/* && pip install --no-cache-dir poetry
|
||||
|
||||
# Copy Poetry configuration
|
||||
COPY /pyproject.toml ./pyproject.toml
|
||||
|
||||
# Configure Poetry and install dependencies with optimizations
|
||||
RUN poetry config virtualenvs.create false && poetry install --no-interaction --no-ansi --no-root --only main && pip cache purge && rm -rf ~/.cache/pypoetry
|
||||
|
||||
# Copy application code
|
||||
COPY /api_services/api_initializer /api_initializer
|
||||
COPY /api_services/api_controllers /api_controllers
|
||||
COPY /api_services/api_validations /api_validations
|
||||
COPY /api_services/schemas /schemas
|
||||
COPY /api_services/api_modules /api_modules
|
||||
|
||||
COPY /api_services/api_middlewares /api_middlewares
|
||||
COPY /api_services/api_builds/identity_service/endpoints /api_initializer/endpoints
|
||||
COPY /api_services/api_builds/identity_service/events /api_initializer/events
|
||||
COPY /api_services/api_builds/identity_service/validations /api_initializer/validations
|
||||
COPY /api_services/api_builds/identity_service/index.py /api_initializer/index.py
|
||||
|
||||
# Set Python path to include app directory
|
||||
ENV PYTHONPATH=/ PYTHONUNBUFFERED=1 PYTHONDONTWRITEBYTECODE=1
|
||||
|
||||
# Run the application using the configured uvicorn server
|
||||
CMD ["poetry", "run", "python", "/api_initializer/app.py"]
|
||||
@@ -0,0 +1,72 @@
|
||||
from typing import Any
|
||||
from fastapi import APIRouter, Depends
|
||||
|
||||
from index import endpoints_index
|
||||
from events.people.cluster import PeopleRouterCluster
|
||||
|
||||
from api_validations.defaults.validations import CommonHeaders
|
||||
from api_validations.response.pagination import PaginateOnly
|
||||
from api_middlewares.token_provider import TokenProvider
|
||||
|
||||
|
||||
people_endpoint_route = APIRouter(prefix="/people", tags=["People Cluster"])
|
||||
|
||||
|
||||
people_list = "PeopleList"
|
||||
@people_endpoint_route.post(
|
||||
path="/list",
|
||||
description="List all people endpoint",
|
||||
operation_id=endpoints_index[people_list],
|
||||
)
|
||||
def people_list_route(data: PaginateOnly, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
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(people_list)
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(list_options=data, headers=headers)
|
||||
|
||||
|
||||
people_create = "PeopleCreate"
|
||||
@people_endpoint_route.post(
|
||||
path="/create",
|
||||
description="Create people endpoint",
|
||||
operation_id=endpoints_index[people_create],
|
||||
)
|
||||
def people_create_route(data, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
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(people_create)
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(data=data, headers=headers)
|
||||
|
||||
|
||||
people_update = "PeopleUpdate"
|
||||
@people_endpoint_route.post(
|
||||
path="/update/{uu_id}",
|
||||
description="Update people endpoint",
|
||||
operation_id=endpoints_index[people_update],
|
||||
)
|
||||
def people_update_route(uu_id: str, data, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
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(people_update)
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(uu_id=uu_id, data=data, header=headers)
|
||||
|
||||
|
||||
people_delete = "PeopleDelete"
|
||||
@people_endpoint_route.delete(
|
||||
path="/delete/{uu_id}",
|
||||
description="Delete people endpoint",
|
||||
operation_id=endpoints_index[people_delete],
|
||||
)
|
||||
def people_delete_route(uu_id: str, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
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(people_delete)
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(uu_id=uu_id, headers=headers)
|
||||
17
api_services/api_builds/identity_service/endpoints/routes.py
Normal file
17
api_services/api_builds/identity_service/endpoints/routes.py
Normal file
@@ -0,0 +1,17 @@
|
||||
from fastapi import APIRouter
|
||||
from .people.router import people_endpoint_route
|
||||
from .user.router import user_endpoint_route
|
||||
|
||||
|
||||
def get_routes() -> list[APIRouter]:
|
||||
return [people_endpoint_route, user_endpoint_route]
|
||||
|
||||
|
||||
def get_safe_endpoint_urls() -> list[tuple[str, str]]:
|
||||
return [
|
||||
("/", "GET"),
|
||||
("/docs", "GET"),
|
||||
("/redoc", "GET"),
|
||||
("/openapi.json", "GET"),
|
||||
("/metrics", "GET"),
|
||||
]
|
||||
@@ -0,0 +1,73 @@
|
||||
from typing import Any
|
||||
from fastapi import APIRouter, Depends
|
||||
|
||||
from index import endpoints_index
|
||||
from events.user.cluster import UserRouterCluster
|
||||
|
||||
from api_validations.defaults.validations import CommonHeaders
|
||||
from api_validations.response.pagination import PaginateOnly
|
||||
from api_middlewares.token_provider import TokenProvider
|
||||
|
||||
|
||||
user_endpoint_route = APIRouter(prefix="/users", tags=["User Cluster"])
|
||||
|
||||
|
||||
user_list = "UserList"
|
||||
@user_endpoint_route.post(
|
||||
path="/list",
|
||||
description="List all users endpoint",
|
||||
operation_id=endpoints_index[user_list],
|
||||
)
|
||||
def user_list_route(data: PaginateOnly, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
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 = UserRouterCluster.get_event_cluster(user_list)
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(list_options=data, headers=headers)
|
||||
|
||||
|
||||
user_create = "UserCreate"
|
||||
@user_endpoint_route.post(
|
||||
path="/create",
|
||||
description="Create user endpoint",
|
||||
operation_id=endpoints_index[user_create],
|
||||
)
|
||||
def user_create_route(data, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
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 = UserRouterCluster.get_event_cluster(user_create)
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(data=data, headers=headers)
|
||||
|
||||
|
||||
user_update = "UserUpdate"
|
||||
@user_endpoint_route.post(
|
||||
path="/update/{uu_id}",
|
||||
description="Update user endpoint",
|
||||
operation_id=endpoints_index[user_update],
|
||||
)
|
||||
def user_update_route(uu_id: str, data, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
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 = UserRouterCluster.get_event_cluster(user_update)
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(uu_id=uu_id, data=data, headers=headers)
|
||||
|
||||
|
||||
user_delete = "UserDelete"
|
||||
@user_endpoint_route.delete(
|
||||
path="/delete/{uu_id}",
|
||||
description="Delete user endpoint",
|
||||
operation_id=endpoints_index[user_delete],
|
||||
)
|
||||
def user_delete_route(uu_id: str, headers: CommonHeaders = Depends(CommonHeaders.as_dependency)):
|
||||
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 = UserRouterCluster.get_event_cluster(user_delete)
|
||||
event_cluster_matched = FoundCluster.match_event(event_key=event_key)
|
||||
return event_cluster_matched.event_callable(uu_id=uu_id, headers=headers)
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
from .people.cluster import PeopleRouterCluster
|
||||
from .user.cluster import UserRouterCluster
|
||||
|
||||
__all__ = [
|
||||
"PeopleRouterCluster",
|
||||
"UserRouterCluster",
|
||||
]
|
||||
@@ -0,0 +1,27 @@
|
||||
from api_initializer.event_clusters import EventCluster, RouterCluster
|
||||
from index import endpoints_index
|
||||
from .supers_events import (
|
||||
SuperPeopleListEvent,
|
||||
SuperPeopleCreateEvent,
|
||||
SuperPeopleUpdateEvent,
|
||||
SuperPeopleDeleteEvent,
|
||||
)
|
||||
|
||||
PeopleRouterCluster = RouterCluster(name="PeopleRouterCluster")
|
||||
|
||||
PeopleListEventCluster = EventCluster(name="PeopleListEventCluster", endpoint_uu_id=endpoints_index["PeopleList"])
|
||||
PeopleListEventCluster.add_event(SuperPeopleListEvent)
|
||||
|
||||
PeopleCreateEventCluster = EventCluster(name="PeopleCreateEventCluster", endpoint_uu_id=endpoints_index["PeopleCreate"])
|
||||
PeopleCreateEventCluster.add_event(SuperPeopleCreateEvent)
|
||||
|
||||
PeopleUpdateEventCluster = EventCluster(name="PeopleUpdateEventCluster", endpoint_uu_id=endpoints_index["PeopleUpdate"])
|
||||
PeopleUpdateEventCluster.add_event(SuperPeopleUpdateEvent)
|
||||
|
||||
PeopleDeleteEventCluster = EventCluster(name="PeopleDeleteEventCluster", endpoint_uu_id=endpoints_index["PeopleDelete"])
|
||||
PeopleDeleteEventCluster.add_event(SuperPeopleDeleteEvent)
|
||||
|
||||
PeopleRouterCluster.set_event_cluster(PeopleListEventCluster)
|
||||
PeopleRouterCluster.set_event_cluster(PeopleCreateEventCluster)
|
||||
PeopleRouterCluster.set_event_cluster(PeopleUpdateEventCluster)
|
||||
PeopleRouterCluster.set_event_cluster(PeopleDeleteEventCluster)
|
||||
@@ -0,0 +1,114 @@
|
||||
from typing import Any
|
||||
|
||||
from api_initializer.event_clusters import Event
|
||||
from api_validations.response import (
|
||||
PaginateOnly,
|
||||
Pagination,
|
||||
PaginationResult,
|
||||
PostgresResponseSingle,
|
||||
PostgresResponse,
|
||||
EndpointResponse
|
||||
)
|
||||
from api_validations.token.validations import TokenDictType
|
||||
from schemas import (
|
||||
Build,
|
||||
BuildLivingSpace,
|
||||
BuildParts,
|
||||
People,
|
||||
)
|
||||
|
||||
|
||||
# List all endpoint Super User
|
||||
SuperPeopleListEvent = Event(
|
||||
name="super_people_list",
|
||||
key="0f8a8b7f-0615-4507-916b-030d48cb5c1d",
|
||||
request_validator=None, # TODO: Add request validator
|
||||
response_validator=None, # TODO: Add response validator
|
||||
description="Super People List all flat representative users endpoint",
|
||||
)
|
||||
|
||||
# Create endpoint Super User
|
||||
SuperPeopleCreateEvent = Event(
|
||||
name="super_people_create",
|
||||
key="e18657b7-7a5a-43b8-b43a-422cbc783326",
|
||||
request_validator=None, # TODO: Add request validator
|
||||
response_validator=None, # TODO: Add response validator
|
||||
description="Super People Create flat representative users endpoint",
|
||||
)
|
||||
|
||||
# Update endpoint Super User
|
||||
SuperPeopleUpdateEvent = Event(
|
||||
name="super_people_update",
|
||||
key="02a774aa-1f7d-472b-98f1-7b4a58d43e31",
|
||||
request_validator=None, # TODO: Add request validator
|
||||
response_validator=None, # TODO: Add response validator
|
||||
description="Super People Update flat representative users endpoint",
|
||||
)
|
||||
|
||||
# Delete endpoint Super User
|
||||
SuperPeopleDeleteEvent = Event(
|
||||
name="super_people_delete",
|
||||
key="b56fd146-b11a-466a-84c9-4c72fb0b9ffa",
|
||||
request_validator=None, # TODO: Add request validator
|
||||
response_validator=None, # TODO: Add response validator
|
||||
description="Super People Delete flat representative users endpoint",
|
||||
)
|
||||
|
||||
|
||||
def super_people_list_callable(list_options: PaginateOnly, token: TokenDictType):
|
||||
list_options = PaginateOnly(**list_options.model_dump())
|
||||
if token.is_employee:
|
||||
raise Exception("Forbidden for employees")
|
||||
|
||||
# TODO: Pydantic Model must be implemnted for list_options.query
|
||||
with People.new_session() as db_session:
|
||||
People.set_session(db_session)
|
||||
db_session.query(
|
||||
).join(BuildParts, BuildParts.id == BuildLivingSpace.build_parts_id
|
||||
).join(People, People.person_id == BuildLivingSpace.people_id
|
||||
).filter()
|
||||
if list_options.query:
|
||||
people_list = People.query.filter(*People.convert(list_options.query))
|
||||
else:
|
||||
people_list = People.query.filter()
|
||||
|
||||
pagination = Pagination(data=people_list)
|
||||
pagination.change(**list_options.model_dump())
|
||||
pagination_result = PaginationResult(data=people_list, pagination=pagination)
|
||||
return EndpointResponse(message="MSG0003-LIST", pagination_result=pagination_result).response
|
||||
|
||||
|
||||
SuperPeopleListEvent.event_callable = super_people_list_callable
|
||||
|
||||
|
||||
def super_people_create_callable(data: People, token: TokenDictType):
|
||||
return {
|
||||
"message": "MSG0001-INSERT",
|
||||
"data": None,
|
||||
"completed": True,
|
||||
}
|
||||
|
||||
|
||||
SuperPeopleCreateEvent.event_callable = super_people_create_callable
|
||||
|
||||
|
||||
def super_people_update_callable(data: People, token: TokenDictType):
|
||||
return {
|
||||
"message": "MSG0002-UPDATE",
|
||||
"data": None,
|
||||
"completed": True,
|
||||
}
|
||||
|
||||
|
||||
SuperPeopleUpdateEvent.event_callable = super_people_update_callable
|
||||
|
||||
|
||||
def super_people_delete_callable(data: People, token: TokenDictType):
|
||||
return {
|
||||
"message": "MSG0004-DELETE",
|
||||
"data": None,
|
||||
"completed": True,
|
||||
}
|
||||
|
||||
|
||||
SuperPeopleDeleteEvent.event_callable = super_people_delete_callable
|
||||
@@ -0,0 +1,27 @@
|
||||
from api_initializer.event_clusters import EventCluster, RouterCluster
|
||||
from index import endpoints_index
|
||||
from .supers_events import (
|
||||
SuperUserListEvent,
|
||||
SuperUserCreateEvent,
|
||||
SuperUserUpdateEvent,
|
||||
SuperUserDeleteEvent,
|
||||
)
|
||||
|
||||
UserRouterCluster = RouterCluster(name="UserRouterCluster")
|
||||
|
||||
UserListAllEventCluster = EventCluster(name="UserListAllEventCluster", endpoint_uu_id=endpoints_index["UserList"])
|
||||
UserListAllEventCluster.add_event(SuperUserListEvent)
|
||||
|
||||
UserCreateEventCluster = EventCluster(name="UserCreateEventCluster", endpoint_uu_id=endpoints_index["UserCreate"])
|
||||
UserCreateEventCluster.add_event(SuperUserCreateEvent)
|
||||
|
||||
UserUpdateEventCluster = EventCluster(name="UserUpdateEventCluster", endpoint_uu_id=endpoints_index["UserUpdate"])
|
||||
UserUpdateEventCluster.add_event(SuperUserUpdateEvent)
|
||||
|
||||
UserDeleteEventCluster = EventCluster(name="UserDeleteEventCluster", endpoint_uu_id=endpoints_index["UserDelete"])
|
||||
UserDeleteEventCluster.add_event(SuperUserDeleteEvent)
|
||||
|
||||
UserRouterCluster.set_event_cluster(UserListAllEventCluster)
|
||||
UserRouterCluster.set_event_cluster(UserCreateEventCluster)
|
||||
UserRouterCluster.set_event_cluster(UserUpdateEventCluster)
|
||||
UserRouterCluster.set_event_cluster(UserDeleteEventCluster)
|
||||
@@ -0,0 +1,100 @@
|
||||
from typing import Any
|
||||
|
||||
from api_initializer.event_clusters import Event
|
||||
from api_validations.response import (
|
||||
PaginateOnly,
|
||||
Pagination,
|
||||
PaginationResult,
|
||||
PostgresResponseSingle,
|
||||
PostgresResponse,
|
||||
EndpointResponse
|
||||
)
|
||||
from api_validations.token.validations import TokenDictType
|
||||
from schemas import (
|
||||
Build,
|
||||
BuildLivingSpace,
|
||||
BuildParts,
|
||||
Users,
|
||||
UsersTokens,
|
||||
People,
|
||||
)
|
||||
|
||||
# List all endpoint Super User
|
||||
SuperUserListEvent = Event(
|
||||
name="super_user_list",
|
||||
key="202eec81-b382-4623-911b-709f1b841f3f",
|
||||
request_validator=None, # TODO: Add request validator
|
||||
response_validator=None, # TODO: Add response validator
|
||||
description="Super Users List all flat representative users endpoint",
|
||||
)
|
||||
|
||||
# Create endpoint Super User
|
||||
SuperUserCreateEvent = Event(
|
||||
name="super_user_create",
|
||||
key="2f0a3691-114d-48b7-b166-9572fc889695",
|
||||
request_validator=None, # TODO: Add request validator
|
||||
response_validator=None, # TODO: Add response validator
|
||||
description="Super Users Create flat representative users endpoint",
|
||||
)
|
||||
|
||||
# Update endpoint Super User
|
||||
SuperUserUpdateEvent = Event(
|
||||
name="super_user_update",
|
||||
key="8a8c8dd6-43ad-40df-86bd-345488273f52",
|
||||
request_validator=None, # TODO: Add request validator
|
||||
response_validator=None, # TODO: Add response validator
|
||||
description="Super Users Update flat representative users endpoint",
|
||||
)
|
||||
|
||||
# Delete endpoint Super User
|
||||
SuperUserDeleteEvent = Event(
|
||||
name="super_user_delete",
|
||||
key="e8c77554-4b0e-491f-aab5-67a5ef670999",
|
||||
request_validator=None, # TODO: Add request validator
|
||||
response_validator=None, # TODO: Add response validator
|
||||
description="Super Users Delete flat representative users endpoint",
|
||||
)
|
||||
|
||||
|
||||
def super_user_list_callable(list_options: PaginateOnly, token: TokenDictType):
|
||||
return {
|
||||
"message": "MSG0003-LIST",
|
||||
"data": None,
|
||||
"completed": True,
|
||||
}
|
||||
|
||||
|
||||
SuperUserListEvent.event_callable = super_user_list_callable
|
||||
|
||||
|
||||
def super_user_create_callable(data: dict, token: TokenDictType):
|
||||
return {
|
||||
"message": "MSG0001-INSERT",
|
||||
"data": None,
|
||||
"completed": True,
|
||||
}
|
||||
|
||||
|
||||
SuperUserCreateEvent.event_callable = super_user_create_callable
|
||||
|
||||
|
||||
def super_user_update_callable(data: dict, token: TokenDictType):
|
||||
return {
|
||||
"message": "MSG0002-UPDATE",
|
||||
"data": None,
|
||||
"completed": True,
|
||||
}
|
||||
|
||||
|
||||
SuperUserUpdateEvent.event_callable = super_user_update_callable
|
||||
|
||||
|
||||
def super_user_delete_callable(data: dict, token: TokenDictType):
|
||||
return {
|
||||
"message": "MSG0004-DELETE",
|
||||
"data": None,
|
||||
"completed": True,
|
||||
}
|
||||
|
||||
|
||||
SuperUserDeleteEvent.event_callable = super_user_delete_callable
|
||||
11
api_services/api_builds/identity_service/index.py
Normal file
11
api_services/api_builds/identity_service/index.py
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
endpoints_index: dict = {
|
||||
"UserList": "5a4ebed3-f764-473c-bc80-57b14082b636",
|
||||
"UserCreate": "4fb2e886-98b4-49c7-a388-7e0607893af7",
|
||||
"UserUpdate": "d4b046ac-0a93-4804-a233-8ee616152c5a",
|
||||
"UserDelete": "98d5deac-8517-42da-8ce8-6a0ed79ba915",
|
||||
"PeopleList": "155d7d42-9f41-4126-be3a-c3367a507f95",
|
||||
"PeopleCreate": "b4d785a7-aac7-4d55-9aa3-bac871fe7252",
|
||||
"PeopleUpdate": "448e1b4e-60b4-467f-a5cc-02c37522d5cc",
|
||||
"PeopleDelete": "72a59bcd-52e5-42ec-b491-59c21c5e4014",
|
||||
}
|
||||
Reference in New Issue
Block a user