You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
orquestrador/app/api/routes/tools.py

51 lines
1.5 KiB
Python

from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from app.api.routes.dependencies import get_db
from app.api.schemas import ToolCreate, ToolResponse
from app.repositories.tool_repository import ToolRepository
router = APIRouter(prefix="/tools", tags=["Tools"])
@router.post("/", response_model=ToolResponse)
def create_tool(tool: ToolCreate, db: Session = Depends(get_db)):
"""Cria uma nova tool persistida no banco."""
repo = ToolRepository(db)
return repo.create(
name=tool.name,
description=tool.description,
parameters=tool.parameters,
)
@router.get("/", response_model=list[ToolResponse])
def list_tools(db: Session = Depends(get_db)):
"""Lista todas as tools cadastradas."""
repo = ToolRepository(db)
return repo.get_all()
@router.get("/{tool_id}", response_model=ToolResponse)
def get_tool(tool_id: int, db: Session = Depends(get_db)):
"""Busca uma tool por ID e retorna 404 quando inexistente."""
repo = ToolRepository(db)
tool = repo.get_by_id(tool_id)
if not tool:
raise HTTPException(status_code=404, detail="Tool nao encontrada")
return tool
@router.delete("/{tool_id}")
def delete_tool(tool_id: int, db: Session = Depends(get_db)):
"""Remove uma tool por ID e retorna 404 quando nao encontrada."""
repo = ToolRepository(db)
tool = repo.delete(tool_id)
if not tool:
raise HTTPException(status_code=404, detail="Tool nao encontrada")
return {"message": "Tool removida com sucesso"}