from typing import Any from fastapi import APIRouter, Depends 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 from Validations.service_endpoints.validations import ( Event2Employee, Event2Occupant, AddRemoveService, ) from Events.event_endpoints.cluster import EventsEndpointRouterCluster # Create API router event_endpoint_route = APIRouter(prefix="/events", tags=["Event Actions"]) @event_endpoint_route.post( path="/list/available", description="List available events endpoint", operation_id="0659d5e4-671f-466c-a84f-47a1290a6f0d", ) def event_list_available_route( data: PaginateOnly, headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ List available events 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 = EventsEndpointRouterCluster.get_event_cluster("EventsListAvailable") event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(list_options=data) @event_endpoint_route.post( path="/list/appended", description="List appended events endpoint", operation_id="4d563973-cdcd-44e1-94e0-4262ffb456a1", ) def event_list_appended_route( data: PaginateOnly, headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ List events 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 = EventsEndpointRouterCluster.get_event_cluster("EventsListAppended") event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(list_options=data) @event_endpoint_route.post( path="/register/service", description="Register event to service endpoint", operation_id="c89a2150-db4d-4a8f-b6ec-9e0f09625f76", ) def event_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 = EventsEndpointRouterCluster.get_event_cluster("EventRegisterService") event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(data=data) @event_endpoint_route.post( path="/unregister/service", description="Unregister event from service endpoint", operation_id="2f16dc9e-de02-449d-9c3f-1a21f87e8794", ) def event_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 = EventsEndpointRouterCluster.get_event_cluster( "EventUnregisterService" ) event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(data=data) @event_endpoint_route.post( path="/bind/extra/employee", description="Bind event to employee extra endpoint", operation_id="58ef3640-04ec-43f9-8f3e-f86be3ce4a24", ) def event_bind_employee_extra_route( data: Any, headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ Bind event to employee extra """ 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 = EventsEndpointRouterCluster.get_event_cluster( "EventBindEmployeeExtra" ) event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(data=data) @event_endpoint_route.post( path="/bind/extra/occupant", description="Bind event to occupant extra endpoint", operation_id="7794a550-3073-43e3-b0c5-80128f8d3e4b", ) def event_bind_occupant_extra_route( data: Any, headers: CommonHeaders = Depends(CommonHeaders.as_dependency), ): """ Bind event to occupant extra """ 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 = EventsEndpointRouterCluster.get_event_cluster( "EventBindOccupantExtra" ) event_cluster_matched = FoundCluster.match_event(event_key=event_key) return event_cluster_matched.event_callable(data=data)