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/tool_routes.py

55 lines
1.4 KiB
Python

from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from app.db.database import SessionLocal
from app.repositories.tool_repository import ToolRepository
from app.api.schemas import ToolCreate, ToolResponse
router = APIRouter(prefix="/tools", tags=["Tools"])
# Dependency para abrir e fechar conexão automaticamente
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@router.post("/", response_model=ToolResponse)
def create_tool(tool: ToolCreate, db: Session = Depends(get_db)):
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)):
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)):
repo = ToolRepository(db)
tool = repo.get_by_id(tool_id)
if not tool:
raise HTTPException(status_code=404, detail="Tool não encontrada")
return tool
@router.delete("/{tool_id}")
def delete_tool(tool_id: int, db: Session = Depends(get_db)):
repo = ToolRepository(db)
tool = repo.delete(tool_id)
if not tool:
raise HTTPException(status_code=404, detail="Tool não encontrada")
return {"message": "Tool removida com sucesso"}