功能:支持动态配置每日比价次数上限

This commit is contained in:
unknown
2026-07-28 21:49:24 +08:00
parent 90c6fe599a
commit 252a2fdc5d
6 changed files with 74 additions and 13 deletions
+7 -5
View File
@@ -38,13 +38,14 @@ router = APIRouter(prefix="/api/v1/compare", tags=["compare-record"])
@router.post(
"/start",
response_model=CompareStartReserveOut,
summary="预占一次当日比价发起次数(每人每天最多100次",
summary="预占一次当日比价发起次数(上限由风控监控配置",
)
def reserve_compare_start(
payload: CompareStartReserveIn,
user: CurrentUser,
db: DbSession,
) -> CompareStartReserveOut:
daily_limit = risk_repo.get_rule_threshold(db, risk_repo.RULE_COMPARE_DAILY)
if risk_repo.is_restricted(
db,
subject_type="user",
@@ -57,25 +58,26 @@ def reserve_compare_start(
db,
user_id=user.id,
trace_id=payload.trace_id,
daily_limit=daily_limit,
business_type=payload.business_type,
device_id=payload.device_id,
)
except crud_compare.DailyCompareStartLimitExceeded:
raise HTTPException(
status_code=status.HTTP_429_TOO_MANY_REQUESTS,
detail="今日已比价超过100次,请明天再试",
detail=f"今日已比价超过{daily_limit}次,请明天再试",
) from None
except crud_compare.ComparisonTraceOwnershipError:
raise HTTPException(
status_code=status.HTTP_409_CONFLICT,
detail="比价任务标识冲突,请重新发起",
) from None
# 风控阈值由后台动态配置,不能再只在固定 100 次业务上限处同步
# 告警和业务限流共用同一动态阈值,避免后台已修改但用户侧仍固定 100 次。
risk_repo.sync_compare_incident(db, user_id=user.id, at=rec.created_at)
return CompareStartReserveOut(
limit=crud_compare.DAILY_COMPARE_START_LIMIT,
limit=daily_limit,
used=used,
remaining=max(crud_compare.DAILY_COMPARE_START_LIMIT - used, 0),
remaining=max(daily_limit - used, 0),
)