刘涛 8c0a5f489d Initial commit: hulai admin API backend
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 22:01:23 +08:00

61 行
2.0 KiB
Python

from __future__ import annotations
import subprocess
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app.database import get_db
from app.auth import get_current_user
from app.config import settings
from app.models.user import AdminUser
from app.models.export_log import ExportLog
from app.schemas.export import ExportRequest, ExportLogResponse
from app.services.export_service import export_modules
router = APIRouter(prefix="/api/export", tags=["导出"], dependencies=[Depends(get_current_user)])
@router.post("/")
def do_export(req: ExportRequest, db: Session = Depends(get_db), current_user: AdminUser = Depends(get_current_user)):
results = export_modules(db, req.modules)
all_success = all(v == "success" for v in results.values())
# Optionally trigger rebuild
rebuild_msg = ""
if req.trigger_rebuild and all_success:
try:
subprocess.run(
["npx", "nuxi", "generate"],
cwd=settings.NUXT_PROJECT_PATH,
timeout=300,
capture_output=True,
)
rebuild_msg = " | 静态站已重新构建"
except Exception as e:
rebuild_msg = f" | 构建失败: {str(e)}"
# Log
log = ExportLog(
exported_by=current_user.username,
modules=req.modules if "all" not in req.modules else ["all"],
status="success" if all_success else "failed",
message=str(results) + rebuild_msg,
)
db.add(log)
db.commit()
return {"results": results, "rebuild": rebuild_msg}
@router.get("/log", response_model=list[ExportLogResponse])
def get_export_log(db: Session = Depends(get_db)):
logs = db.query(ExportLog).order_by(ExportLog.created_at.desc()).limit(50).all()
return [
ExportLogResponse(
id=l.id, exported_by=l.exported_by, modules=l.modules,
status=l.status, message=l.message,
created_at=l.created_at.isoformat() if l.created_at else None,
)
for l in logs
]