feat: add fission package download

This commit is contained in:
yangqianqian
2026-07-01 14:22:54 +08:00
parent 0894bba54e
commit 8c863efb7d
3 changed files with 227 additions and 4 deletions

View File

@@ -11,11 +11,12 @@ import logging
from typing import Annotated
from fastapi import APIRouter, Depends
from fastapi.responses import FileResponse
from pydantic import BaseModel, Field
from sqlalchemy.orm import Session
from app.core.database import get_db
from app.core.response import ok, raise_not_found
from app.core.response import ok, raise_business, raise_not_found
from app.middleware.workspace_guard import CurrentUser, require_write_permission
from app.models.fission import FissionTask, FissionNote
@@ -117,6 +118,40 @@ def get_fission_notes(
"fanout_count": ft.fanout_count, "notes": notes})
@router.get("/fission/{fission_id}/download")
def download_fission_package(
fission_id: int,
current_user: Annotated[CurrentUser, Depends(require_write_permission)] = None,
db: Session = Depends(get_db),
):
"""下载裂变结果:把 N 套裂变笔记打成 zip文案+图片+发布清单)。"""
ft = db.query(FissionTask).filter(
FissionTask.id == fission_id,
FissionTask.workspace_id == current_user.workspace_id,
).first()
if not ft:
raise_not_found("裂变任务不存在")
rows = db.query(FissionNote).filter(
FissionNote.fission_id == fission_id,
FissionNote.workspace_id == current_user.workspace_id,
).order_by(FissionNote.seq.asc()).all()
if not rows:
raise_business("裂变结果为空,暂不能下载")
from app.services.fission_package_exporter import build_fission_package
try:
zip_path = build_fission_package(ft, rows)
except ValueError as exc:
raise_business(str(exc))
return FileResponse(
path=zip_path,
media_type="application/zip",
filename=f"fission-{fission_id}.zip",
)
@router.post("/fission/{fission_id}/notes/{seq}/retry-images")
def retry_fission_note_images_endpoint(
fission_id: int,