From ae3a569f034a984e7109752aebf3ba7e56fea243 Mon Sep 17 00:00:00 2001 From: lan Date: Tue, 7 Jul 2026 15:00:44 +0800 Subject: [PATCH] refactor(app): provide sub-config structures from main config Extract DatabaseConfig, RedisConfig, RustFSConfig, LogConfig, and EmailConfig from the main Config to enable pkg/* package constructors to receive specific config types by value, supporting the fx.Lifecycle OnStop hooks pattern. --- cmd/genhash/main.go | 21 +++++++++++++++++++++ internal/app/infra_module.go | 7 +++++++ 2 files changed, 28 insertions(+) create mode 100644 cmd/genhash/main.go diff --git a/cmd/genhash/main.go b/cmd/genhash/main.go new file mode 100644 index 0000000..a340957 --- /dev/null +++ b/cmd/genhash/main.go @@ -0,0 +1,21 @@ +package main + +import ( + "fmt" + "os" + + "carrotskin/pkg/auth" +) + +func main() { + if len(os.Args) < 2 { + fmt.Fprintln(os.Stderr, "usage: genhash ") + os.Exit(2) + } + h, err := auth.HashPassword(os.Args[1]) + if err != nil { + fmt.Fprintln(os.Stderr, "err:", err) + os.Exit(1) + } + fmt.Print(h) +} diff --git a/internal/app/infra_module.go b/internal/app/infra_module.go index 0f02bd4..091c2b9 100644 --- a/internal/app/infra_module.go +++ b/internal/app/infra_module.go @@ -20,6 +20,13 @@ import ( // 每个需要资源释放的组件都通过 fx.Lifecycle 注册 OnStop 钩子, // 彻底替代 main.go 里分散的 defer xxx.Close()。 var InfraModule = fx.Options( + // 顶层 Config 子结构 Provider:让 pkg/* 包的构造函数按值接收细分 Config + fx.Provide(func(c *config.Config) config.DatabaseConfig { return c.Database }), + fx.Provide(func(c *config.Config) config.RedisConfig { return c.Redis }), + fx.Provide(func(c *config.Config) config.RustFSConfig { return c.RustFS }), + fx.Provide(func(c *config.Config) config.LogConfig { return c.Log }), + fx.Provide(func(c *config.Config) config.EmailConfig { return c.Email }), + // Logger fx.Provide(logger.New),