Refine seller store implementation

This commit is contained in:
R524809
2026-08-31 14:37:28 +08:00
parent 957289f717
commit 2a667b4f3b
27 changed files with 1650 additions and 624 deletions
+37
View File
@@ -310,6 +310,21 @@ async def cancel_job(job_id: str) -> BackgroundJob | None:
return job
async def delete_job(job_id: str) -> bool:
"""硬删除一个后台任务及其子项;调用方须先处理对应的存储对象。"""
try:
parsed = uuid.UUID(job_id)
except ValueError:
return False
async with get_session_factory()() as db:
job = await db.get(BackgroundJob, parsed)
if job is None:
return False
await db.delete(job)
await db.commit()
return True
async def cancel_product_jobs(product_id: str) -> int:
"""硬删除商品前取消其未完成任务,Worker 随后只会丢弃结果而不会回写素材。"""
try:
@@ -468,3 +483,25 @@ def suite_view(job: BackgroundJob, items: list[BackgroundJobItem]) -> dict[str,
for item in items
],
}
def video_job_view(job: BackgroundJob, items: list[BackgroundJobItem]) -> dict[str, Any]:
"""轮播视频的轻量任务视图;仍复用 BackgroundJob 的恢复/取消/重试状态机。"""
payload = dict(job.request_payload or {})
item = items[0] if items else None
item_payload = dict(item.payload or {}) if item else {}
return {
"id": str(job.id), "kind": job.kind, "status": job.status,
"total": job.total, "completed": job.completed, "failed": job.failed,
"cancel_requested": job.cancel_requested, "preset": payload.get("preset", "wb_ozon"),
"source_asset_ids": [str(source.get("asset_id")) for source in payload.get("sources", [])],
"slide_seconds": payload.get("slide_seconds", 0),
"duration_seconds": item_payload.get("duration_seconds"),
"width": item_payload.get("width", 810), "height": item_payload.get("height", 1080),
"file_size_bytes": item_payload.get("file_size_bytes"),
"created_at": job.created_at, "started_at": job.started_at, "completed_at": job.completed_at,
"result": None if item is None else {
"item_id": str(item.id), "status": item.status, "url": item.result_url, "error": item.error,
},
"error": job.error,
}