mottery/backend/app/api/endpoints/bet_history.py

72 lines
2.2 KiB
Python

from update_lottery import LotteryUpdater
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from ...core.database import get_db
from ...models.lottery import SSQLotteryBetRecord, DLTLotteryBetRecord
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(
os.path.dirname(os.path.abspath(__file__)))))
router = APIRouter()
@router.get("/{lottery_type}")
def get_bet_history(
lottery_type: str,
page: int = 1,
size: int = 20,
db: Session = Depends(get_db)
):
"""获取投注历史记录"""
if lottery_type not in ['ssq', 'dlt']:
raise HTTPException(status_code=400, detail="Invalid lottery type")
# 选择对应的模型
BetModel = SSQLotteryBetRecord if lottery_type == 'ssq' else DLTLotteryBetRecord
# 计算偏移量
offset = (page - 1) * size
# 查询记录
records = db.query(BetModel).order_by(
BetModel.created_at.desc()
).offset(offset).limit(size).all()
# 查询总数
total = db.query(BetModel).count()
# 格式化返回数据
formatted_records = []
for record in records:
formatted_records.append({
'id': record.id,
'batch_id': record.batch_id,
'issue': record.issue,
'numbers': record.numbers,
'recommend_type': record.recommend_type,
'created_at': record.created_at.isoformat() if record.created_at else None,
'is_winner': record.is_winner,
'win_level': record.win_level,
'win_amount': record.win_amount
})
return {
'success': True,
'records': formatted_records,
'total': total,
'page': page,
'size': size,
'pages': (total + size - 1) // size
}
@router.post("/check-win/{lottery_type}")
def check_win(lottery_type: str, db: Session = Depends(get_db)):
"""手动触发比对并更新中奖信息"""
if lottery_type not in ['ssq', 'dlt']:
raise HTTPException(status_code=400, detail="Invalid lottery type")
updater = LotteryUpdater()
updater.check_and_update_bet_wins(lottery_type, db)
return {"success": True, "message": f"{lottery_type}投注中奖比对已完成"}