package svc import ( "blockchain/internal/config" "blockchain/internal/lib/cassandra" ) // NewDB 傳入 config 返回 CassandraDB func NewDB(cfg config.Config) (*cassandra.CassandraDB, error) { var opts []cassandra.Option // 必填欄位 opts = append(opts, cassandra.WithPort(cfg.Cassandra.Port)) opts = append(opts, cassandra.WithKeyspace(cfg.Cassandra.Keyspace)) // 其他選填值,僅在不為零時加入 if cfg.Cassandra.ConnectTimeoutSec > 0 { opts = append(opts, cassandra.WithConnectTimeoutSec(cfg.Cassandra.ConnectTimeoutSec)) } if cfg.Cassandra.NumConns > 0 { opts = append(opts, cassandra.WithNumConns(cfg.Cassandra.NumConns)) } if cfg.Cassandra.MaxRetries > 0 { opts = append(opts, cassandra.WithMaxRetries(cfg.Cassandra.MaxRetries)) } if cfg.Cassandra.RetryMin > 0 { opts = append(opts, cassandra.WithRetryMin(cfg.Cassandra.RetryMin)) } if cfg.Cassandra.RetryMax > 0 { opts = append(opts, cassandra.WithRetryMax(cfg.Cassandra.RetryMax)) } if cfg.Cassandra.ReconnectInitial > 0 { opts = append(opts, cassandra.WithReconnectInitial(cfg.Cassandra.ReconnectInitial)) } if cfg.Cassandra.ReconnectMax > 0 { opts = append(opts, cassandra.WithReconnectMax(cfg.Cassandra.ReconnectMax)) } // 使用驗證時才加入帳號密碼 if cfg.Cassandra.UseAuth { opts = append(opts, cassandra.WithAuth(cfg.Cassandra.Username, cfg.Cassandra.Password)) } return cassandra.NewCassandraDB(cfg.Cassandra.Hosts, opts...) }