from fastapi import APIRouter, Depends, HTTPException, status from pydantic import BaseModel from sqlalchemy.orm import Session from app.core.deps import require_staff from app.db import get_db from app.models.legal import LEGAL_PAGE_KEYS, LEGAL_PAGE_TITLES, admin_legal_page, save_legal_page router = APIRouter(dependencies=[Depends(require_staff)]) class LegalPageWrite(BaseModel): published: bool = False bodyHtml: str = "" @router.get("/legal") def list_legal_pages(db: Session = Depends(get_db)) -> dict: items = [] for key in LEGAL_PAGE_KEYS: body = admin_legal_page(db, key) if body is not None: items.append(body) return {"items": items} @router.get("/legal/{page_key}") def read_legal_page(page_key: str, db: Session = Depends(get_db)) -> dict: body = admin_legal_page(db, page_key) if body is None: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="合规页键不正确") return body @router.put("/legal/{page_key}") def write_legal_page(page_key: str, body: LegalPageWrite, db: Session = Depends(get_db)) -> dict: try: save_legal_page(db, page_key, body.model_dump()) except ValueError as exc: code = status.HTTP_404_NOT_FOUND if "不正确" in str(exc) else status.HTTP_400_BAD_REQUEST raise HTTPException(status_code=code, detail=str(exc)) from exc return {"ok": True, "title": LEGAL_PAGE_TITLES.get(page_key, page_key)}