29 lines
1.1 KiB
Python
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))
|