fix(admin/skills): 支持删除从市场导入的 MarketApp 技能

This commit is contained in:
QihuAI Design committed 2026-07-17 22:25:47 +08:00
1 parent cc35c61fbd
commit 7fb7c07f57
1 file changed
+67 -30
+67 -30
View File
@@ -534,45 +534,82 @@ async def delete_skill(
admin_user=Depends(get_current_admin), admin_user=Depends(get_current_admin),
db: Session = Depends(get_db), db: Session = Depends(get_db),
): ):
"""删除技能""" """删除技能(支持 EvolutionSkill 和 MarketApp 两种来源)"""
# 1) 先尝试 EvolutionSkill
skill = db.query(EvolutionSkill).filter(EvolutionSkill.id == skill_id).first() skill = db.query(EvolutionSkill).filter(EvolutionSkill.id == skill_id).first()
if not skill: if skill:
raise HTTPException(status_code=404, detail="技能不存在") skill_name = skill.skill_name
user_id = skill.user_id
skill_name = skill.skill_name # 记录事件
user_id = skill.user_id ev = EvolutionEvent(
id=str(uuid.uuid4()),
user_id=user_id,
skill_name=skill_name,
event_type="deleted",
description=f"管理员 {admin_user.username} 删除技能 {skill_name}",
)
db.add(ev)
# 记录事件 # 删除版本历史
ev = EvolutionEvent( db.query(SkillVersion).filter(SkillVersion.skill_name == skill_name).delete()
id=str(uuid.uuid4()),
user_id=user_id,
skill_name=skill_name,
event_type="deleted",
description=f"管理员 {admin_user.username} 删除技能 {skill_name}",
)
db.add(ev)
# 删除版本历史 # 删除发布记录
db.query(SkillVersion).filter(SkillVersion.skill_name == skill_name).delete() db.query(SkillPublishRecord).filter(SkillPublishRecord.skill_id == skill_id).delete()
# 删除发布记录 # 删除团队共享记录
db.query(SkillPublishRecord).filter(SkillPublishRecord.skill_id == skill_id).delete() db.query(TeamSharedSkill).filter(TeamSharedSkill.skill_id == skill_id).delete()
# 删除团队共享记录 # 同步清理市场应用表中的同名技能
db.query(TeamSharedSkill).filter(TeamSharedSkill.skill_id == skill_id).delete() market_app = db.query(MarketApp).filter(
MarketApp.type == "skill",
MarketApp.name == skill_name,
).first()
if market_app:
db.query(AppInstallation).filter(AppInstallation.app_id == market_app.id).delete()
db.query(AppPurchase).filter(AppPurchase.app_id == market_app.id).delete()
db.query(AppReview).filter(AppReview.app_id == market_app.id).delete()
db.delete(market_app)
db.delete(skill) db.delete(skill)
db.commit() db.commit()
LogService.log_operation( LogService.log_operation(
user_id=admin_user.id, user_id=admin_user.id,
username=admin_user.username, username=admin_user.username,
action="delete_skill", action="delete_skill",
target="evolution_skills", target="evolution_skills",
detail=f"删除技能 {skill_name}", detail=f"删除技能 {skill_name}",
) )
return {"code": 0, "message": f"技能 {skill_name} 已删除"} return {"code": 0, "message": f"技能 {skill_name} 已删除"}
# 2) 再尝试 MarketApp 中导入的技能(type=skill)
market_app = db.query(MarketApp).filter(
MarketApp.type == "skill",
MarketApp.id == skill_id,
).first()
if market_app:
skill_name = market_app.name
# 清理关联记录
db.query(AppInstallation).filter(AppInstallation.app_id == market_app.id).delete()
db.query(AppPurchase).filter(AppPurchase.app_id == market_app.id).delete()
db.query(AppReview).filter(AppReview.app_id == market_app.id).delete()
db.delete(market_app)
db.commit()
LogService.log_operation(
user_id=admin_user.id,
username=admin_user.username,
action="delete_skill",
target="market_apps",
detail=f"删除市场技能 {skill_name}",
)
return {"code": 0, "message": f"技能 {skill_name} 已删除"}
# 3) 都未找到
raise HTTPException(status_code=404, detail="技能不存在")
# ============================================================ # ============================================================