104 lines
3.6 KiB
Rust
104 lines
3.6 KiB
Rust
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<S>() -> Router<S>
|
|
where
|
|
crate::state::PluginState: axum::extract::FromRef<S>,
|
|
S: Clone + Send + Sync + 'static,
|
|
{
|
|
let admin_routes = Router::new()
|
|
.route("/admin/plugins/upload", post(crate::handler::plugin_handler::upload_plugin::<S>))
|
|
.route("/admin/plugins", get(crate::handler::plugin_handler::list_plugins::<S>))
|
|
.route(
|
|
"/admin/plugins/{id}",
|
|
get(crate::handler::plugin_handler::get_plugin::<S>)
|
|
.delete(crate::handler::plugin_handler::purge_plugin::<S>),
|
|
)
|
|
.route(
|
|
"/admin/plugins/{id}/schema",
|
|
get(crate::handler::plugin_handler::get_plugin_schema::<S>),
|
|
)
|
|
.route(
|
|
"/admin/plugins/{id}/install",
|
|
post(crate::handler::plugin_handler::install_plugin::<S>),
|
|
)
|
|
.route(
|
|
"/admin/plugins/{id}/enable",
|
|
post(crate::handler::plugin_handler::enable_plugin::<S>),
|
|
)
|
|
.route(
|
|
"/admin/plugins/{id}/disable",
|
|
post(crate::handler::plugin_handler::disable_plugin::<S>),
|
|
)
|
|
.route(
|
|
"/admin/plugins/{id}/uninstall",
|
|
post(crate::handler::plugin_handler::uninstall_plugin::<S>),
|
|
)
|
|
.route(
|
|
"/admin/plugins/{id}/health",
|
|
get(crate::handler::plugin_handler::health_check_plugin::<S>),
|
|
)
|
|
.route(
|
|
"/admin/plugins/{id}/config",
|
|
put(crate::handler::plugin_handler::update_plugin_config::<S>),
|
|
);
|
|
|
|
// 插件数据 CRUD 路由
|
|
let data_routes = Router::new()
|
|
.route(
|
|
"/plugins/{plugin_id}/{entity}",
|
|
get(crate::handler::data_handler::list_plugin_data::<S>)
|
|
.post(crate::handler::data_handler::create_plugin_data::<S>),
|
|
)
|
|
.route(
|
|
"/plugins/{plugin_id}/{entity}/{id}",
|
|
get(crate::handler::data_handler::get_plugin_data::<S>)
|
|
.put(crate::handler::data_handler::update_plugin_data::<S>)
|
|
.patch(crate::handler::data_handler::patch_plugin_data::<S>)
|
|
.delete(crate::handler::data_handler::delete_plugin_data::<S>),
|
|
)
|
|
// 数据统计路由
|
|
.route(
|
|
"/plugins/{plugin_id}/{entity}/count",
|
|
get(crate::handler::data_handler::count_plugin_data::<S>),
|
|
)
|
|
.route(
|
|
"/plugins/{plugin_id}/{entity}/aggregate",
|
|
get(crate::handler::data_handler::aggregate_plugin_data::<S>),
|
|
)
|
|
// 批量操作路由
|
|
.route(
|
|
"/plugins/{plugin_id}/{entity}/batch",
|
|
post(crate::handler::data_handler::batch_plugin_data::<S>),
|
|
)
|
|
// 时间序列路由
|
|
.route(
|
|
"/plugins/{plugin_id}/{entity}/timeseries",
|
|
get(crate::handler::data_handler::get_plugin_timeseries::<S>),
|
|
);
|
|
|
|
admin_routes.merge(data_routes)
|
|
}
|
|
}
|