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(): """Fornece sessao para operacoes de tools e fecha conexao ao final da request.""" db = SessionLocal() try: yield db finally: db.close() @router.post("/", response_model=ToolResponse) # Desenvolver uma tela de cadastro e atualização 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 não 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 não encontrada") return {"message": "Tool removida com sucesso"}