IWS_WS24_clean_architecture/src/interface_adapters/controllers/base_endpoint.py

29 lines
1.1 KiB
Python

from typing import Type
from fastapi import APIRouter, HTTPException
from .base_controller import BaseController
from use_cases.interfaces import BaseOutputPort, BaseInputPort, BaseRepository
class Endpoint:
def __init__(self,
router: APIRouter,
controller_impl: Type[BaseController],
presenter_impl: Type[BaseOutputPort],
repository_impl: Type[BaseRepository],
use_case_impl: Type[BaseInputPort]
):
self.router = router
self.presenter = presenter_impl()
self.repository = repository_impl()
self.use_case = use_case_impl(repository=self.repository, output_port=self.presenter)
self.controller = controller_impl(input_port=self.use_case)
def create(self, route: str, request_model: Type, response_model: Type):
@self.router.post(route, response_model=response_model)
async def endpoint(request: request_model):
try:
response = self.controller.handle_request(request)
return response
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))