"""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}