|
| 1 | +# Philippe Stepniewski |
| 2 | +import inspect |
| 3 | + |
| 4 | +from fastapi import APIRouter, Depends, Request |
| 5 | +from fastapi.responses import JSONResponse |
| 6 | + |
| 7 | +from backend.domain.ports.model_info_db_handler import ModelInfoDbHandler |
| 8 | +from backend.domain.ports.user_handler import UserHandler |
| 9 | +from backend.domain.use_cases.auth_usecases import get_current_user, get_user_adapter |
| 10 | +from backend.domain.use_cases.model_info_usecases import search_model_infos |
| 11 | +from backend.domain.use_cases.user_usecases import user_can_perform_action_for_project |
| 12 | + |
| 13 | +router = APIRouter() |
| 14 | + |
| 15 | + |
| 16 | +def get_model_info_db_handler(request: Request) -> ModelInfoDbHandler: |
| 17 | + return request.app.state.model_info_db_handler |
| 18 | + |
| 19 | + |
| 20 | +@router.get("/search") |
| 21 | +def search( |
| 22 | + query: str, |
| 23 | + project_name: str | None = None, |
| 24 | + model_info_db_handler: ModelInfoDbHandler = Depends(get_model_info_db_handler), |
| 25 | + current_user: dict = Depends(get_current_user), |
| 26 | + user_adapter: UserHandler = Depends(get_user_adapter), |
| 27 | +) -> JSONResponse: |
| 28 | + if project_name is not None: |
| 29 | + user_can_perform_action_for_project( |
| 30 | + current_user, |
| 31 | + project_name=project_name, |
| 32 | + action_name=inspect.currentframe().f_code.co_name, |
| 33 | + user_adapter=user_adapter, |
| 34 | + ) |
| 35 | + results = search_model_infos(query=query, model_info_db_handler=model_info_db_handler, project_name=project_name) |
| 36 | + return JSONResponse(content=[m.to_json() for m in results]) |
0 commit comments