use async_trait::async_trait; use axum::Router; use axum::routing::{get, post, put}; use erp_core::module::ErpModule; pub struct PluginModule; #[async_trait] impl ErpModule for PluginModule { fn name(&self) -> &str { "plugin" } fn dependencies(&self) -> Vec<&str> { vec!["auth", "config"] } fn as_any(&self) -> &dyn std::any::Any { self } } impl PluginModule { /// 插件管理路由(需要 JWT 认证) pub fn protected_routes() -> Router where crate::state::PluginState: axum::extract::FromRef, S: Clone + Send + Sync + 'static, { let admin_routes = Router::new() .route("/admin/plugins/upload", post(crate::handler::plugin_handler::upload_plugin::)) .route("/admin/plugins", get(crate::handler::plugin_handler::list_plugins::)) .route( "/admin/plugins/{id}", get(crate::handler::plugin_handler::get_plugin::) .delete(crate::handler::plugin_handler::purge_plugin::), ) .route( "/admin/plugins/{id}/schema", get(crate::handler::plugin_handler::get_plugin_schema::), ) .route( "/admin/plugins/{id}/install", post(crate::handler::plugin_handler::install_plugin::), ) .route( "/admin/plugins/{id}/enable", post(crate::handler::plugin_handler::enable_plugin::), ) .route( "/admin/plugins/{id}/disable", post(crate::handler::plugin_handler::disable_plugin::), ) .route( "/admin/plugins/{id}/uninstall", post(crate::handler::plugin_handler::uninstall_plugin::), ) .route( "/admin/plugins/{id}/health", get(crate::handler::plugin_handler::health_check_plugin::), ) .route( "/admin/plugins/{id}/config", put(crate::handler::plugin_handler::update_plugin_config::), ); // 插件数据 CRUD 路由 let data_routes = Router::new() .route( "/plugins/{plugin_id}/{entity}", get(crate::handler::data_handler::list_plugin_data::) .post(crate::handler::data_handler::create_plugin_data::), ) .route( "/plugins/{plugin_id}/{entity}/{id}", get(crate::handler::data_handler::get_plugin_data::) .put(crate::handler::data_handler::update_plugin_data::) .patch(crate::handler::data_handler::patch_plugin_data::) .delete(crate::handler::data_handler::delete_plugin_data::), ) // 数据统计路由 .route( "/plugins/{plugin_id}/{entity}/count", get(crate::handler::data_handler::count_plugin_data::), ) .route( "/plugins/{plugin_id}/{entity}/aggregate", get(crate::handler::data_handler::aggregate_plugin_data::), ) // 批量操作路由 .route( "/plugins/{plugin_id}/{entity}/batch", post(crate::handler::data_handler::batch_plugin_data::), ) // 时间序列路由 .route( "/plugins/{plugin_id}/{entity}/timeseries", get(crate::handler::data_handler::get_plugin_timeseries::), ); admin_routes.merge(data_routes) } }