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.
51 lines
1.5 KiB
Python
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"}
|