fix(admin/skills): 支持删除从市场导入的 MarketApp 技能
This commit is contained in:
1 parent
cc35c61fbd
commit
7fb7c07f57
1 file changed
+67
-30
@@ -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="技能不存在")
|
||||||
|
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
|
|||||||
Reference in new issue
Block a user