46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
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...)
|
|
}
|