routes.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. from fastapi import APIRouter, Depends, Query
  2. from sqlalchemy import text
  3. from sqlalchemy.orm import Session
  4. from core_domain import ServiceHealth
  5. from app.application.services import ToolApplicationService
  6. from app.db.session import get_db
  7. from app.domain.repositories import ToolBindingRepository, ToolDefinitionRepository, ToolVersionRepository
  8. from app.schemas.tool import (
  9. ToolBindingCreateRequest,
  10. ToolBindingResponse,
  11. ToolCreateRequest,
  12. ToolResponse,
  13. ToolVersionCreateRequest,
  14. ToolVersionResponse,
  15. )
  16. router = APIRouter()
  17. def get_tool_application_service(db: Session = Depends(get_db)) -> ToolApplicationService:
  18. return ToolApplicationService(
  19. tool_definition_repository=ToolDefinitionRepository(db),
  20. tool_version_repository=ToolVersionRepository(db),
  21. tool_binding_repository=ToolBindingRepository(db),
  22. )
  23. @router.get("/health", response_model=ServiceHealth)
  24. def health_check(db: Session = Depends(get_db)) -> ServiceHealth:
  25. db.execute(text("SELECT 1"))
  26. return ServiceHealth(service="tool-service", status="ok", database="ok")
  27. @router.post("", response_model=ToolResponse)
  28. def create_tool_definition(
  29. payload: ToolCreateRequest,
  30. service: ToolApplicationService = Depends(get_tool_application_service),
  31. ) -> ToolResponse:
  32. entity = service.create_tool_definition(payload)
  33. return ToolResponse.from_entity(entity)
  34. @router.get("", response_model=list[ToolResponse])
  35. def list_tool_definitions(
  36. tenant_id: str = Query(...),
  37. service: ToolApplicationService = Depends(get_tool_application_service),
  38. ) -> list[ToolResponse]:
  39. return [ToolResponse.from_entity(item) for item in service.list_tool_definitions(tenant_id)]
  40. @router.post("/versions", response_model=ToolVersionResponse)
  41. def create_tool_version(
  42. payload: ToolVersionCreateRequest,
  43. service: ToolApplicationService = Depends(get_tool_application_service),
  44. ) -> ToolVersionResponse:
  45. entity = service.create_tool_version(payload)
  46. return ToolVersionResponse.from_entity(entity)
  47. @router.get("/versions", response_model=list[ToolVersionResponse])
  48. def list_tool_versions(
  49. tenant_id: str = Query(...),
  50. tool_id: str = Query(...),
  51. service: ToolApplicationService = Depends(get_tool_application_service),
  52. ) -> list[ToolVersionResponse]:
  53. return [
  54. ToolVersionResponse.from_entity(item)
  55. for item in service.list_tool_versions(tenant_id=tenant_id, tool_id=tool_id)
  56. ]
  57. @router.post("/bindings", response_model=ToolBindingResponse)
  58. def create_tool_binding(
  59. payload: ToolBindingCreateRequest,
  60. service: ToolApplicationService = Depends(get_tool_application_service),
  61. ) -> ToolBindingResponse:
  62. entity = service.create_tool_binding(payload)
  63. return ToolBindingResponse.from_entity(entity)
  64. @router.get("/bindings", response_model=list[ToolBindingResponse])
  65. def list_tool_bindings(
  66. tenant_id: str = Query(...),
  67. app_id: str | None = Query(default=None),
  68. service: ToolApplicationService = Depends(get_tool_application_service),
  69. ) -> list[ToolBindingResponse]:
  70. return [
  71. ToolBindingResponse.from_entity(item)
  72. for item in service.list_tool_bindings(tenant_id=tenant_id, app_id=app_id)
  73. ]