diff --git a/app/api/endpoints/plugin.py b/app/api/endpoints/plugin.py index 36b0fccb..5af5195c 100644 --- a/app/api/endpoints/plugin.py +++ b/app/api/endpoints/plugin.py @@ -176,13 +176,15 @@ def plugin_dashboard(plugin_id: str, key: str, user_agent: Annotated[str | None, return PluginManager().get_plugin_dashboard(plugin_id, key=key, user_agent=user_agent) -@router.get("/reset/{plugin_id}", summary="重置插件配置", response_model=schemas.Response) +@router.get("/reset/{plugin_id}", summary="重置插件配置及数据", response_model=schemas.Response) def reset_plugin(plugin_id: str, _: schemas.TokenPayload = Depends(verify_token)) -> Any: """ - 根据插件ID重置插件配置 + 根据插件ID重置插件配置及数据 """ # 删除配置 PluginManager().delete_plugin_config(plugin_id) + # 删除插件所有数据 + PluginManager().delete_plugin_data(plugin_id) # 重新生效插件 PluginManager().init_plugin(plugin_id, { "enabled": False, diff --git a/app/core/plugin.py b/app/core/plugin.py index 533b98b2..72f4990d 100644 --- a/app/core/plugin.py +++ b/app/core/plugin.py @@ -14,6 +14,7 @@ from app import schemas from app.core.config import settings from app.core.event import eventmanager from app.db.systemconfig_oper import SystemConfigOper +from app.db.plugindata_oper import PluginDataOper from app.helper.module import ModuleHelper from app.helper.plugin import PluginHelper from app.helper.sites import SitesHelper @@ -96,6 +97,7 @@ class PluginManager(metaclass=Singleton): self.siteshelper = SitesHelper() self.pluginhelper = PluginHelper() self.systemconfig = SystemConfigOper() + self.plugindata = PluginDataOper() # 开发者模式监测插件修改 if settings.DEV or settings.PLUGIN_AUTO_RELOAD: self.__start_monitor() @@ -319,6 +321,16 @@ class PluginManager(metaclass=Singleton): return False return self.systemconfig.delete(self._config_key % pid) + def delete_plugin_data(self, pid: str) -> bool: + """ + 删除插件数据 + :param pid: 插件ID + """ + if not self._plugins.get(pid): + return False + self.plugindata.del_data(pid) + return True + def get_plugin_form(self, pid: str) -> Tuple[List[dict], Dict[str, Any]]: """ 获取插件表单 diff --git a/app/db/models/plugindata.py b/app/db/models/plugindata.py index d10ee14c..0dc01ffc 100644 --- a/app/db/models/plugindata.py +++ b/app/db/models/plugindata.py @@ -29,6 +29,11 @@ class PluginData(Base): def del_plugin_data_by_key(db: Session, plugin_id: str, key: str): db.query(PluginData).filter(PluginData.plugin_id == plugin_id, PluginData.key == key).delete() + @staticmethod + @db_update + def del_plugin_data(db: Session, plugin_id: str): + db.query(PluginData).filter(PluginData.plugin_id == plugin_id).delete() + @staticmethod @db_query def get_plugin_data_by_plugin_id(db: Session, plugin_id: str): diff --git a/app/db/plugindata_oper.py b/app/db/plugindata_oper.py index 0c5ae785..4469cfa0 100644 --- a/app/db/plugindata_oper.py +++ b/app/db/plugindata_oper.py @@ -44,13 +44,16 @@ class PluginDataOper(DbOper): else: return PluginData.get_plugin_data(self._db, plugin_id) - def del_data(self, plugin_id: str, key: str) -> Any: + def del_data(self, plugin_id: str, key: str = None) -> Any: """ 删除插件数据 :param plugin_id: 插件id :param key: 数据key """ - PluginData.del_plugin_data_by_key(self._db, plugin_id, key) + if key: + PluginData.del_plugin_data_by_key(self._db, plugin_id, key) + else: + PluginData.del_plugin_data(self._db, plugin_id) def truncate(self): """