107 lines
3.4 KiB
Go
107 lines
3.4 KiB
Go
package config
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"hyapp/pkg/configx"
|
|
"hyapp/pkg/logx"
|
|
)
|
|
|
|
// Config 描述 wallet-service 启动配置。
|
|
type Config struct {
|
|
ServiceName string `yaml:"service_name"`
|
|
NodeID string `yaml:"node_id"`
|
|
Environment string `yaml:"environment"`
|
|
GRPCAddr string `yaml:"grpc_addr"`
|
|
// HealthHTTPAddr 是给 CLB/发布脚本探活使用的 HTTP 监听地址,不承载业务流量。
|
|
HealthHTTPAddr string `yaml:"health_http_addr"`
|
|
// MySQLDSN 是账户、交易、分录和 outbox 的必需存储连接串。
|
|
MySQLDSN string `yaml:"mysql_dsn"`
|
|
// ActivityServiceAddr 用于把 wallet 资源赠送 outbox 投影到 activity badge 展示读模型。
|
|
ActivityServiceAddr string `yaml:"activity_service_addr"`
|
|
// RedPacketExpiryWorker 控制红包过期退款扫描。
|
|
RedPacketExpiryWorker RedPacketExpiryWorkerConfig `yaml:"red_packet_expiry_worker"`
|
|
// MySQLAutoMigrate 保留给显式本地迁移;线上 schema 由发布流程或 initdb 管理。
|
|
MySQLAutoMigrate bool `yaml:"mysql_auto_migrate"`
|
|
Log logx.Config `yaml:"log"`
|
|
}
|
|
|
|
// RedPacketExpiryWorkerConfig 保存红包过期退款 worker 策略。
|
|
type RedPacketExpiryWorkerConfig struct {
|
|
Enabled bool `yaml:"enabled"`
|
|
AppCode string `yaml:"app_code"`
|
|
PollInterval time.Duration `yaml:"poll_interval"`
|
|
BatchSize int32 `yaml:"batch_size"`
|
|
}
|
|
|
|
// Default 返回本地开发默认配置。
|
|
func Default() Config {
|
|
return Config{
|
|
ServiceName: "wallet-service",
|
|
NodeID: "wallet-local",
|
|
Environment: "local",
|
|
GRPCAddr: ":13004",
|
|
HealthHTTPAddr: ":13104",
|
|
MySQLDSN: "hyapp:hyapp@tcp(127.0.0.1:23306)/hyapp_wallet?parseTime=true&charset=utf8mb4&loc=UTC",
|
|
ActivityServiceAddr: "127.0.0.1:13006",
|
|
RedPacketExpiryWorker: RedPacketExpiryWorkerConfig{
|
|
Enabled: true,
|
|
AppCode: "lalu",
|
|
PollInterval: 5 * time.Second,
|
|
BatchSize: 50,
|
|
},
|
|
MySQLAutoMigrate: false,
|
|
Log: logx.Config{
|
|
Level: "info",
|
|
Format: "json",
|
|
MaxPayloadBytes: 2048,
|
|
},
|
|
}
|
|
}
|
|
|
|
// Load 从独立 config.yaml 读取 wallet-service 配置。
|
|
func Load(path string) (Config, error) {
|
|
cfg := Default()
|
|
if path == "" {
|
|
return cfg, nil
|
|
}
|
|
|
|
if err := configx.LoadYAML(path, &cfg); err != nil {
|
|
return Config{}, err
|
|
}
|
|
|
|
cfg.ServiceName = strings.TrimSpace(cfg.ServiceName)
|
|
if cfg.ServiceName == "" {
|
|
cfg.ServiceName = "wallet-service"
|
|
}
|
|
cfg.NodeID = strings.TrimSpace(cfg.NodeID)
|
|
if cfg.NodeID == "" {
|
|
cfg.NodeID = cfg.ServiceName
|
|
}
|
|
cfg.Environment = strings.ToLower(strings.TrimSpace(cfg.Environment))
|
|
if cfg.Environment == "" {
|
|
cfg.Environment = "local"
|
|
}
|
|
cfg.HealthHTTPAddr = strings.TrimSpace(cfg.HealthHTTPAddr)
|
|
if cfg.HealthHTTPAddr == "" {
|
|
cfg.HealthHTTPAddr = ":13104"
|
|
}
|
|
cfg.ActivityServiceAddr = strings.TrimSpace(cfg.ActivityServiceAddr)
|
|
if cfg.ActivityServiceAddr == "" {
|
|
cfg.ActivityServiceAddr = "127.0.0.1:13006"
|
|
}
|
|
cfg.RedPacketExpiryWorker.AppCode = strings.TrimSpace(cfg.RedPacketExpiryWorker.AppCode)
|
|
if cfg.RedPacketExpiryWorker.AppCode == "" {
|
|
cfg.RedPacketExpiryWorker.AppCode = Default().RedPacketExpiryWorker.AppCode
|
|
}
|
|
if cfg.RedPacketExpiryWorker.PollInterval <= 0 {
|
|
cfg.RedPacketExpiryWorker.PollInterval = Default().RedPacketExpiryWorker.PollInterval
|
|
}
|
|
if cfg.RedPacketExpiryWorker.BatchSize <= 0 {
|
|
cfg.RedPacketExpiryWorker.BatchSize = Default().RedPacketExpiryWorker.BatchSize
|
|
}
|
|
|
|
return cfg, nil
|
|
}
|