chore: apply cargo fmt across workspace and update docs
- Run cargo fmt on all Rust crates for consistent formatting - Update CLAUDE.md with WASM plugin commands and dev.ps1 instructions - Update wiki: add WASM plugin architecture, rewrite dev environment docs - Minor frontend cleanup (unused imports)
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
use axum::Router;
|
||||
use axum::extract::{Extension, FromRef, Query, State};
|
||||
use axum::response::Json;
|
||||
use axum::routing::get;
|
||||
use axum::Router;
|
||||
use sea_orm::{ColumnTrait, EntityTrait, PaginatorTrait, QueryFilter, QueryOrder};
|
||||
use serde::Deserialize;
|
||||
|
||||
@@ -35,8 +35,7 @@ where
|
||||
let page_size = params.page_size.unwrap_or(20).min(100);
|
||||
let tenant_id = ctx.tenant_id;
|
||||
|
||||
let mut q = audit_log::Entity::find()
|
||||
.filter(audit_log::Column::TenantId.eq(tenant_id));
|
||||
let mut q = audit_log::Entity::find().filter(audit_log::Column::TenantId.eq(tenant_id));
|
||||
|
||||
if let Some(rt) = ¶ms.resource_type {
|
||||
q = q.filter(audit_log::Column::ResourceType.eq(rt.clone()));
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
use axum::Router;
|
||||
use axum::extract::State;
|
||||
use axum::response::Json;
|
||||
use axum::routing::get;
|
||||
use axum::Router;
|
||||
use serde::Serialize;
|
||||
|
||||
use crate::state::AppState;
|
||||
|
||||
@@ -6,14 +6,9 @@ use utoipa::openapi::OpenApiBuilder;
|
||||
///
|
||||
/// 返回 OpenAPI 3.0 规范 JSON 文档
|
||||
pub async fn openapi_spec() -> Json<Value> {
|
||||
let mut info = utoipa::openapi::Info::new(
|
||||
"ERP Platform API",
|
||||
env!("CARGO_PKG_VERSION"),
|
||||
);
|
||||
let mut info = utoipa::openapi::Info::new("ERP Platform API", env!("CARGO_PKG_VERSION"));
|
||||
info.description = Some("ERP 平台底座 REST API 文档".to_string());
|
||||
|
||||
let spec = OpenApiBuilder::new()
|
||||
.info(info)
|
||||
.build();
|
||||
let spec = OpenApiBuilder::new().info(info).build();
|
||||
Json(serde_json::to_value(spec).unwrap_or_default())
|
||||
}
|
||||
|
||||
@@ -7,13 +7,11 @@ mod state;
|
||||
|
||||
/// OpenAPI 规范定义(预留,未来可通过 utoipa derive 合并各模块 schema)。
|
||||
#[derive(OpenApi)]
|
||||
#[openapi(
|
||||
info(
|
||||
title = "ERP Platform API",
|
||||
version = "0.1.0",
|
||||
description = "ERP 平台底座 REST API 文档"
|
||||
)
|
||||
)]
|
||||
#[openapi(info(
|
||||
title = "ERP Platform API",
|
||||
version = "0.1.0",
|
||||
description = "ERP 平台底座 REST API 文档"
|
||||
))]
|
||||
#[allow(dead_code)]
|
||||
struct ApiDoc;
|
||||
|
||||
@@ -38,13 +36,15 @@ async fn main() -> anyhow::Result<()> {
|
||||
// Initialize tracing
|
||||
tracing_subscriber::fmt()
|
||||
.with_env_filter(
|
||||
EnvFilter::try_from_default_env()
|
||||
.unwrap_or_else(|_| EnvFilter::new(&config.log.level)),
|
||||
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new(&config.log.level)),
|
||||
)
|
||||
.json()
|
||||
.init();
|
||||
|
||||
tracing::info!(version = env!("CARGO_PKG_VERSION"), "ERP Server starting...");
|
||||
tracing::info!(
|
||||
version = env!("CARGO_PKG_VERSION"),
|
||||
"ERP Server starting..."
|
||||
);
|
||||
|
||||
// Connect to database
|
||||
let db = db::connect(&config.database).await?;
|
||||
@@ -116,19 +116,35 @@ async fn main() -> anyhow::Result<()> {
|
||||
|
||||
// Initialize auth module
|
||||
let auth_module = erp_auth::AuthModule::new();
|
||||
tracing::info!(module = auth_module.name(), version = auth_module.version(), "Auth module initialized");
|
||||
tracing::info!(
|
||||
module = auth_module.name(),
|
||||
version = auth_module.version(),
|
||||
"Auth module initialized"
|
||||
);
|
||||
|
||||
// Initialize config module
|
||||
let config_module = erp_config::ConfigModule::new();
|
||||
tracing::info!(module = config_module.name(), version = config_module.version(), "Config module initialized");
|
||||
tracing::info!(
|
||||
module = config_module.name(),
|
||||
version = config_module.version(),
|
||||
"Config module initialized"
|
||||
);
|
||||
|
||||
// Initialize workflow module
|
||||
let workflow_module = erp_workflow::WorkflowModule::new();
|
||||
tracing::info!(module = workflow_module.name(), version = workflow_module.version(), "Workflow module initialized");
|
||||
tracing::info!(
|
||||
module = workflow_module.name(),
|
||||
version = workflow_module.version(),
|
||||
"Workflow module initialized"
|
||||
);
|
||||
|
||||
// Initialize message module
|
||||
let message_module = erp_message::MessageModule::new();
|
||||
tracing::info!(module = message_module.name(), version = message_module.version(), "Message module initialized");
|
||||
tracing::info!(
|
||||
module = message_module.name(),
|
||||
version = message_module.version(),
|
||||
"Message module initialized"
|
||||
);
|
||||
|
||||
// Initialize module registry and register modules
|
||||
let registry = ModuleRegistry::new()
|
||||
@@ -136,7 +152,10 @@ async fn main() -> anyhow::Result<()> {
|
||||
.register(config_module)
|
||||
.register(workflow_module)
|
||||
.register(message_module);
|
||||
tracing::info!(module_count = registry.modules().len(), "Modules registered");
|
||||
tracing::info!(
|
||||
module_count = registry.modules().len(),
|
||||
"Modules registered"
|
||||
);
|
||||
|
||||
// Register event handlers
|
||||
registry.register_handlers(&event_bus);
|
||||
@@ -182,7 +201,10 @@ async fn main() -> anyhow::Result<()> {
|
||||
let public_routes = Router::new()
|
||||
.merge(handlers::health::health_check_router())
|
||||
.merge(erp_auth::AuthModule::public_routes())
|
||||
.route("/docs/openapi.json", axum::routing::get(handlers::openapi::openapi_spec))
|
||||
.route(
|
||||
"/docs/openapi.json",
|
||||
axum::routing::get(handlers::openapi::openapi_spec),
|
||||
)
|
||||
.layer(axum::middleware::from_fn_with_state(
|
||||
state.clone(),
|
||||
middleware::rate_limit::rate_limit_by_ip,
|
||||
|
||||
@@ -15,7 +15,8 @@ struct RateLimitResponse {
|
||||
message: String,
|
||||
}
|
||||
|
||||
/// 限流参数。
|
||||
/// 限流参数(预留配置化扩展)。
|
||||
#[allow(dead_code)]
|
||||
pub struct RateLimitConfig {
|
||||
/// 窗口内最大请求数。
|
||||
pub max_requests: u64,
|
||||
@@ -74,11 +75,7 @@ async fn apply_rate_limit(
|
||||
}
|
||||
};
|
||||
|
||||
let count: i64 = match redis::cmd("INCR")
|
||||
.arg(&key)
|
||||
.query_async(&mut conn)
|
||||
.await
|
||||
{
|
||||
let count: i64 = match redis::cmd("INCR").arg(&key).query_async(&mut conn).await {
|
||||
Ok(n) => n,
|
||||
Err(e) => {
|
||||
tracing::warn!(error = %e, "Redis INCR 失败,跳过限流");
|
||||
|
||||
Reference in New Issue
Block a user