nomadweb/backend/app/routers/ebook.py
eric 8b80d18006 Add avatar upload, harden payments, and ebook checkout.
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-30 19:55:05 -05:00

46 lines
1.5 KiB
Python

"""Ebook purchase entitlements + download links (FastAPI only)."""
from __future__ import annotations
from fastapi import APIRouter, Header, HTTPException
from app.services.auth import get_user_by_token
from app.services import social_store
from app.services.payment_service import EBOOK_EPUB_URL, EBOOK_PDF_URL, PAYMENT_EBOOK_AMOUNT
router = APIRouter(prefix="/ebook", tags=["ebook"])
def _user(authorization: str | None) -> dict:
if not authorization or not authorization.startswith("Bearer "):
raise HTTPException(401, "请先登录")
user = get_user_by_token(authorization[7:])
if not user:
raise HTTPException(401, "请先登录")
return user
@router.get("/status")
async def ebook_status(authorization: str | None = Header(None)):
user = _user(authorization)
owned = social_store.has_ebook(user["id"])
return {
"owned": owned,
"amount_fen": PAYMENT_EBOOK_AMOUNT,
"amount_yuan": f"{PAYMENT_EBOOK_AMOUNT / 100:.2f}",
}
@router.get("/downloads")
async def ebook_downloads(authorization: str | None = Header(None)):
user = _user(authorization)
if not social_store.has_ebook(user["id"]):
raise HTTPException(403, "尚未购买电子书下载版")
files = []
if EBOOK_PDF_URL:
files.append({"format": "pdf", "label": "PDF", "url": EBOOK_PDF_URL})
if EBOOK_EPUB_URL:
files.append({"format": "epub", "label": "EPUB", "url": EBOOK_EPUB_URL})
if not files:
files.append({"format": "online", "label": "在线阅读", "url": "/book/read"})
return {"owned": True, "files": files}