Skip to main content

Module serial_plugin

Module serial_plugin 

Source
Expand description

单号生成器插件:遵循 TaskPlugin 模式的薄封装

插件本身不持有任何数据库连接或 SQL 语句。 所有持久化逻辑通过 SerialGenerator trait 委托给业务方实现。

§使用方式

§方式一:内存后端(零配置)

plugins.enabled = ["serial"]

[plugins.serial]
backend = "memory"

[[plugins.serial.rules]]
key = "order"
format = "ORD{YYYY}{MM}{DD}{SEQ:8}"
cycle = "daily"

§方式二:自定义后端(参考 TaskPlugin)

// 业务方实现 SerialGenerator trait
let my_backend = Arc::new(MyDbSerialBackend::new(db_pool));
let plugin = SerialPlugin::new(cfg.plugins.serial, my_backend);
app.plugin(plugin).scan().start().await;

§在 Handler 中使用

#[alun::get("/api/serial/next/{rule_key}")]
async fn next_serial(
    Extension(plugin): Extension<SerialPlugin>,
    Path(rule_key): Path<String>,
) -> Result<Res<String>, ApiError> {
    let no = plugin.generator().generate(&rule_key).await
        .map_err(|e| ApiError::internal(e.to_string()))?;
    Ok(Res::ok(no))
}

Structs§

SerialPlugin
单号生成器插件