blockchain/internal/svc/cassandra.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...)
}