refactor(server): 移除已放弃的 Ozon API 直传模块,新增素材删除接口
- 删除 shops/publish/categories/ozon 相关路由、模型、schema 与客户端服务(V2.1 决策放弃 API 直传,改人工上传)
- materials 新增 DELETE /assets/{id}:删除素材记录与本地文件,并同步修正 asset_counts
- 试算页支持单张素材删除,生图弹窗交互微调
- 新增 docs/v2.1/HANDOFF.md 工作交接说明,README 补充索引
This commit is contained in:
@@ -265,3 +265,36 @@ async def is_collected(
|
||||
)
|
||||
)).scalars().all()
|
||||
return {"collected": len(rows) > 0, "count": len(rows)}
|
||||
|
||||
|
||||
@router.delete("/assets/{asset_id}")
|
||||
async def delete_asset(asset_id: str, db: AsyncSession = Depends(get_db)):
|
||||
"""删除一条素材记录(DB 行 + 本地文件;七牛等远程存储仅删引用)。"""
|
||||
from services.storage import local_path
|
||||
|
||||
asset = await db.get(ProductAsset, UUID(asset_id))
|
||||
if asset is None:
|
||||
raise HTTPException(status_code=404, detail="素材不存在")
|
||||
|
||||
if asset.stored_url:
|
||||
path = local_path(asset.stored_url)
|
||||
if path is not None and path.is_file():
|
||||
try:
|
||||
path.unlink()
|
||||
except OSError: # noqa: BLE001
|
||||
pass # 文件删除失败不阻断记录删除
|
||||
|
||||
product_id = asset.product_id
|
||||
group_key = asset.group_key
|
||||
await db.delete(asset)
|
||||
|
||||
# 同步修正 asset_counts(generated 计数由生图回写时累加)
|
||||
product = await db.get(Product, product_id)
|
||||
if product is not None:
|
||||
counts = dict(product.asset_counts or {})
|
||||
if group_key in counts:
|
||||
counts[group_key] = max(0, int(counts.get(group_key) or 0) - 1)
|
||||
product.asset_counts = counts
|
||||
|
||||
await db.commit()
|
||||
return {"deleted": True}
|
||||
|
||||
Reference in New Issue
Block a user