from datetime import datetime from typing import List, Optional from sqlalchemy.orm import Session from app.models.bet import Bet from app.schemas.bet import BetCreate, BetUpdate def get_bet(db: Session, bet_id: int) -> Optional[Bet]: """Get a single bet by ID""" return db.query(Bet).filter(Bet.id == bet_id).first() def get_bets( db: Session, skip: int = 0, limit: int = 100, user_id: Optional[str] = None ) -> List[Bet]: """Get multiple bets with optional filtering by user_id""" query = db.query(Bet) if user_id: query = query.filter(Bet.user_id == user_id) return query.offset(skip).limit(limit).all() def create_bet(db: Session, bet: BetCreate) -> Bet: """Create a new bet""" db_bet = Bet( user_id=bet.user_id, event_id=bet.event_id, amount=bet.amount, odds=bet.odds, prediction=bet.prediction, ) db.add(db_bet) db.commit() db.refresh(db_bet) return db_bet def update_bet(db: Session, bet_id: int, bet: BetUpdate) -> Optional[Bet]: """Update an existing bet""" db_bet = get_bet(db=db, bet_id=bet_id) if db_bet: update_data = bet.dict(exclude_unset=True) # If we're setting is_verified to True, also set the verified_at timestamp if update_data.get("is_verified"): update_data["verified_at"] = datetime.utcnow() for field, value in update_data.items(): setattr(db_bet, field, value) db.commit() db.refresh(db_bet) return db_bet def delete_bet(db: Session, bet_id: int) -> bool: """Delete a bet""" db_bet = get_bet(db=db, bet_id=bet_id) if db_bet: db.delete(db_bet) db.commit() return True return False