43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
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)}
|