feat: add fission package download
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user