Пейволл раньше (предпроверка без загрузки) + пакетная обработка по подписке
- /api/paywall/check: решение сервера до загрузки файла → пейволл показывается сразу для больших файлов (не грузим тяжёлый файл впустую) - Загрузка файла — только при клике оплатить (upload-on-pay) - Пакетная обработка (2+ файла, папка, ZIP) — только по активной подписке Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
27
app/main.py
27
app/main.py
@@ -1806,6 +1806,33 @@ async def pay_status(payment_id: str):
|
||||
return {"status": db_status, "purpose": purpose}
|
||||
|
||||
|
||||
@app.post("/api/paywall/check")
|
||||
async def paywall_check(payload: dict, request: Request):
|
||||
"""Предпроверка пейволла БЕЗ загрузки файла. body: {size_mb?, pages?, user_id?}.
|
||||
Возвращает решение сервера, чтобы фронт показал пейволл сразу."""
|
||||
if not isinstance(payload, dict):
|
||||
payload = {}
|
||||
try:
|
||||
size_mb = float(payload.get("size_mb") or 0)
|
||||
except (TypeError, ValueError):
|
||||
size_mb = 0.0
|
||||
try:
|
||||
pages = int(payload.get("pages") or 0)
|
||||
except (TypeError, ValueError):
|
||||
pages = 0
|
||||
account = _resolve_account(request, payload.get("user_id"))
|
||||
sub_active = _db_sub_active(account)
|
||||
over = size_mb > AUTH_REQUIRED_MB or pages > AUTH_REQUIRED_PAGES
|
||||
requires_payment = bool(PAYWALL_ENABLED and over and not sub_active)
|
||||
return {
|
||||
"paywall_enabled": bool(PAYWALL_ENABLED),
|
||||
"sub_active": sub_active,
|
||||
"requires_payment": requires_payment,
|
||||
"file_price": FILE_PRICE_RUB,
|
||||
"sub_price": SUB_PRICE_RUB,
|
||||
}
|
||||
|
||||
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
# Аккаунты, сессии, OAuth-вход (Yandex ID)
|
||||
# ══════════════════════════════════════════════════════════════════════════════
|
||||
|
||||
Reference in New Issue
Block a user