from fastapi import APIRouter, Depends from typing import Any from ApiControllers.abstracts.default_validations import CommonHeaders from ApiControllers.providers.token_provider import TokenProvider from Controllers.Postgres.pagination import PaginateOnly, Pagination, PaginationResult from Controllers.Postgres.response import EndpointResponse, CreateEndpointResponse from Schemas import Applications from Validations.application.validations import RequestApplication from Events.application.cluster import ApplicationRouterCluster from Validations.application.validations import AddRemoveService # Create API router application_route = APIRouter(prefix="/application", tags=["Application Management"]) @application_route.post( path="/list/all", description="List all applications endpoint", operation_id="fe30481d-802c-4490-897f-a4e95310e6bc", ) def application_list_all_route( data: PaginateOnly, headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ List all applications with pagination and filtering options """ 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 = ApplicationRouterCluster.get_event_cluster("ApplicationListAll") event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(list_options=data) @application_route.post( path="/list/available", description="List available applications endpoint", operation_id="7492bb02-a074-4320-b58c-4bc7d9fba3a6", ) def application_list_available_route( data: PaginateOnly, headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ List available applications with pagination and filtering options """ 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 = ApplicationRouterCluster.get_event_cluster("ApplicationListAvailable") event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(list_options=data) @application_route.post( path="/list/appended", description="List appended applications endpoint", operation_id="ea7bbd58-da09-407c-a630-c324e0272385", ) def application_list_appended_route( data: PaginateOnly, headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ List appended applications with pagination and filtering options """ 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 = ApplicationRouterCluster.get_event_cluster("ApplicationListAppended") event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(list_options=data) @application_route.post( path="/register/service", description="Register event to service endpoint", operation_id="92e0870f-f8bb-4879-ba03-c2901cc70ecc", ) def application_register_service_route( data: AddRemoveService, headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ Register event to service """ 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 = ApplicationRouterCluster.get_event_cluster("ApplicationRegisterService") event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(data=data) @application_route.post( path="/unregister/service", description="Unregister event from service endpoint", operation_id="7fa1a183-4c99-4746-b675-148f65ad7ba7", ) def application_unregister_service_route( data: AddRemoveService, headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ Unregister event from service """ 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 = ApplicationRouterCluster.get_event_cluster("ApplicationUnRegisterService") event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(data=data) @application_route.post( path="/create", description="Create application endpoint", operation_id="5570be78-030a-438e-8674-7e751447608b", ) def application_create_route( data: RequestApplication, headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ Create a new application """ 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 = ApplicationRouterCluster.get_event_cluster("ApplicationCreate") event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(data=data) @application_route.post( path="/update/{application_uuid}", description="Update application endpoint", operation_id="87cd4515-73dd-4d11-a01f-562e221d973c", ) def application_update_route( data: RequestApplication, application_uuid: str, headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ Update an existing application """ 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 = ApplicationRouterCluster.get_event_cluster("ApplicationUpdate") event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(data=data, uu_id=application_uuid) @application_route.post( path="/bind/employee", description="Bind application to employee endpoint", operation_id="2bab94fa-becb-4d8e-80f1-f4631119a521", ) def application_bind_employee_route( data: Any, headers: CommonHeaders, ): """ Bind application to employee endpoint """ 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 = ApplicationRouterCluster.get_event_cluster("ApplicationBindEmployee") event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(data=data) @application_route.post( path="/bind/occupant", description="Bind application to occupant endpoint", operation_id="fccf1a59-0650-4e5c-ba8d-f389dadce01c", ) def application_bind_occupant_route( data: Any, headers: CommonHeaders, ): """ Bind application to occupant endpoint """ 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 = ApplicationRouterCluster.get_event_cluster("ApplicationBindOccupant") event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(data=data)