✨ 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 app.api.routes import router
|
||||
from app.api.tool_routes import router as tool_router
|
||||
|
||||
app = FastAPI(title="AI Orquestrador")
|
||||
|
||||
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