from typing import List from fastapi import APIRouter, FastAPI class RouteRegisterController: def __init__(self, app: FastAPI, router_list: List[APIRouter]): self.router_list = router_list self.app = app @staticmethod def add_router_with_event_to_database(route: APIRouter): from Schemas import EndpointRestriction with EndpointRestriction.new_session() as db_session: route_path = str(getattr(route, "path")) route_summary = str(getattr(route, "name")) or "" operation_id = str(getattr(route, "operation_id")) or "" if not operation_id: return for route_method in [method.lower() for method in getattr(route, "methods")]: restriction = EndpointRestriction.find_or_create( **dict( endpoint_method=route_method, endpoint_name=route_path, endpoint_desc=route_summary.replace("_", " "), endpoint_function=route_summary, operation_uu_id=operation_id, # UUID of the endpoint is_confirmed=True, ) ) if not restriction.meta_data.created: restriction.endpoint_code = f"AR{str(restriction.id).zfill(3)}" restriction.save(db=db_session) def register_routes(self): for router in self.router_list: self.app.include_router(router) self.add_router_with_event_to_database(router) return self.app