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 ]