baoxiang/backend/app/routers/streamer.py
2025-12-16 18:06:50 +08:00

65 lines
2.0 KiB
Python

"""
主播管理相关路由
"""
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List
from ..core.database import get_db
from ..schemas.user import UserResponse
from ..schemas.game import ChestResponse, BetResponse
from ..services.user_service import UserService
from ..services.game_service import GameService
from ..utils.deps import get_current_admin
router = APIRouter(prefix="/api/streamers", tags=["streamers"])
@router.get("/", response_model=List[UserResponse])
def get_streamers(
skip: int = 0,
limit: int = 100,
db: Session = Depends(get_db),
current_user = Depends(get_current_admin)
):
"""
获取主播列表(仅管理员)
"""
from ..models.user import User, UserRole
return db.query(User).filter(User.role == UserRole.STREAMER).offset(skip).limit(limit).all()
@router.get("/{streamer_id}/chests", response_model=List[ChestResponse])
def get_streamer_chests(
streamer_id: int,
skip: int = 0,
limit: int = 100,
db: Session = Depends(get_db),
current_user = Depends(get_current_admin)
):
"""
获取主播的宝箱列表(仅管理员)
"""
chests = db.query(GameService.Chest).filter(GameService.Chest.streamer_id == streamer_id).offset(skip).limit(limit).all()
return chests
@router.get("/{streamer_id}/bets", response_model=List[BetResponse])
def get_streamer_bets(
streamer_id: int,
skip: int = 0,
limit: int = 100,
db: Session = Depends(get_db),
current_user = Depends(get_current_admin)
):
"""
获取主播相关的下注列表(仅管理员)
"""
# 获取该主播的所有宝箱ID
chest_ids = db.query(GameService.Chest.id).filter(GameService.Chest.streamer_id == streamer_id).all()
chest_ids = [cid[0] for cid in chest_ids]
if not chest_ids:
return []
bets = db.query(GameService.Bet).filter(GameService.Bet.chest_id.in_(chest_ids)).offset(skip).limit(limit).all()
return bets