✨ feat: Adicionando os endpoints de acesso as Tools e movendo o acesso para o banco de dados.
parent
43ce4a6093
commit
3f94ffe2e1
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,54 @@
|
|||||||
|
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"}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
from sqlalchemy import create_engine
|
||||||
|
from sqlalchemy.orm import sessionmaker, declarative_base
|
||||||
|
from app.core.settings import settings
|
||||||
|
|
||||||
|
DATABASE_URL = (
|
||||||
|
f"mysql+pymysql://{settings.db_user}:"
|
||||||
|
f"{settings.db_password}@"
|
||||||
|
f"{settings.db_host}:"
|
||||||
|
f"{settings.db_port}/"
|
||||||
|
f"{settings.db_name}"
|
||||||
|
)
|
||||||
|
|
||||||
|
engine = create_engine(DATABASE_URL, echo=True)
|
||||||
|
|
||||||
|
SessionLocal = sessionmaker(
|
||||||
|
autocommit=False,
|
||||||
|
autoflush=False,
|
||||||
|
bind=engine
|
||||||
|
)
|
||||||
|
|
||||||
|
Base = declarative_base()
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
from sqlalchemy import Column, Integer, String, Text, JSON, TIMESTAMP
|
||||||
|
from sqlalchemy.sql import func
|
||||||
|
from app.db.database import Base
|
||||||
|
|
||||||
|
|
||||||
|
class Tool(Base):
|
||||||
|
__tablename__ = "tools"
|
||||||
|
|
||||||
|
id = Column(Integer, primary_key=True, index=True)
|
||||||
|
|
||||||
|
name = Column(String(100), unique=True, nullable=False)
|
||||||
|
|
||||||
|
description = Column(Text, nullable=False)
|
||||||
|
|
||||||
|
parameters = Column(JSON, nullable=False)
|
||||||
|
|
||||||
|
created_at = Column(
|
||||||
|
TIMESTAMP,
|
||||||
|
server_default=func.current_timestamp()
|
||||||
|
)
|
||||||
|
|
||||||
|
updated_at = Column(
|
||||||
|
TIMESTAMP,
|
||||||
|
server_default=func.current_timestamp(),
|
||||||
|
onupdate=func.current_timestamp()
|
||||||
|
)
|
||||||
@ -1,6 +1,8 @@
|
|||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
from app.api.routes import router
|
from app.api.routes import router
|
||||||
|
from app.api.tool_routes import router as tool_router
|
||||||
|
|
||||||
app = FastAPI(title="AI Orquestrador")
|
app = FastAPI(title="AI Orquestrador")
|
||||||
|
|
||||||
app.include_router(router)
|
app.include_router(router)
|
||||||
|
app.include_router(tool_router)
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
from sqlalchemy.orm import Session
|
||||||
|
from app.db.models import Tool
|
||||||
|
|
||||||
|
|
||||||
|
class ToolRepository:
|
||||||
|
|
||||||
|
def __init__(self, db: Session):
|
||||||
|
self.db = db
|
||||||
|
|
||||||
|
def get_all(self):
|
||||||
|
return self.db.query(Tool).all()
|
||||||
|
|
||||||
|
def get_by_id(self, tool_id: int):
|
||||||
|
return self.db.query(Tool).filter(Tool.id == tool_id).first()
|
||||||
|
|
||||||
|
def create(self, name: str, description: str, parameters: dict):
|
||||||
|
tool = Tool(
|
||||||
|
name=name,
|
||||||
|
description=description,
|
||||||
|
parameters=parameters
|
||||||
|
)
|
||||||
|
self.db.add(tool)
|
||||||
|
self.db.commit()
|
||||||
|
self.db.refresh(tool)
|
||||||
|
return tool
|
||||||
|
|
||||||
|
def delete(self, tool_id: int):
|
||||||
|
tool = self.get_by_id(tool_id)
|
||||||
|
if tool:
|
||||||
|
self.db.delete(tool)
|
||||||
|
self.db.commit()
|
||||||
|
return tool
|
||||||
Loading…
Reference in New Issue