adição do metodo DELETE, correções adicionais

This commit is contained in:
2026-05-19 10:13:06 -05:00
parent 5dec27a887
commit f148d430b3
6 changed files with 26 additions and 9 deletions

View File

@@ -33,7 +33,7 @@ def read_games(skip: int = 0, limit: int = 100, genre: Optional[str] = None, pla
query = query.filter(Game.platforms.contains([platform]))
games = query.offset(skip).limit(limit).all()
data = [GameResponse.model_validate(g).model_dump() for g in games]
data = [GameResponse.model_validate(g).model_dump(mode='json') for g in games]
return {"success": True, "message": "Lista de jogos", "data": data}
@@ -59,16 +59,19 @@ def create_game(game: GameCreate, db: Session = Depends(get_db)):
@router.get("/{id_ou_slug}", response_model=StandardResponse)
def read_game(id_ou_slug: str, db: Session = Depends(get_db)):
db_game = db.query(Game).filter(or_(Game.id == id_ou_slug, Game.slug == id_ou_slug)).first()
if id_ou_slug.isdigit():
db_game = db.query(Game).filter(Game.id == int(id_ou_slug)).first()
else:
db_game = db.query(Game).filter(Game.slug == id_ou_slug).first()
if not db_game:
raise HTTPException(status_code=404, detail="Jogo não encontrado.")
data = GameResponse.model_validate(db_game).model_dump()
data = GameResponse.model_validate(db_game).model_dump(mode='json')
return {"success": True, "message": "Detalhes do jogo", "data": data}
@router.patch("/{id}", response_model=StandardResponse)
def update_game(id: str, game: GameUpdate, db: Session = Depends(get_db)):
def update_game(id: int, game: GameUpdate, db: Session = Depends(get_db)):
db_game = db.query(Game).filter(Game.id == id).first()
if not db_game:
@@ -91,5 +94,20 @@ def update_game(id: str, game: GameUpdate, db: Session = Depends(get_db)):
db.commit()
db.refresh(db_game)
data = GameResponse.model_validate(db_game).model_dump()
data = GameResponse.model_validate(db_game).model_dump(mode='json')
return {"success": True, "message": "Jogo atualizado com sucesso", "data": data}
@router.delete("/{id_ou_slug}", response_model=StandardResponse)
def delete_game(id_ou_slug: str, db: Session = Depends(get_db)):
if id_ou_slug.isdigit():
db_game = db.query(Game).filter(Game.id == int(id_ou_slug)).first()
else:
db_game = db.query(Game).filter(Game.slug == id_ou_slug).first()
if not db_game:
raise HTTPException(status_code=404, detail="Jogo não encontrado.")
db.delete(db_game)
db.commit()
return {"success": True, "message": "Jogo removido com sucesso", "data": None}

View File

@@ -1,12 +1,11 @@
from sqlalchemy import Column, String, Boolean
from sqlalchemy import Column, String, Boolean, Integer
from sqlalchemy.dialects.postgresql import JSONB
from app.db.database import Base
import uuid
class Game(Base):
__tablename__ = "games"
id = Column(String, primary_key=True, default=lambda: f"gv-{uuid.uuid4().hex[:8]}")
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(String, index=True, nullable=False)
slug = Column(String, unique=True, index=True, nullable=False)
description = Column(String)

View File

@@ -34,7 +34,7 @@ class GameUpdate(BaseModel):
active: Optional[bool] = None
class GameResponse(GameBase):
id: str
id: int
slug: str
class Config: