diff --git a/internal/bootstrap/db.go b/internal/bootstrap/db.go index a12f300..533d529 100644 --- a/internal/bootstrap/db.go +++ b/internal/bootstrap/db.go @@ -24,7 +24,9 @@ func InitDatabase(ctx context.Context) error { switch conf.Conf.Database.Type { case conf.DatabaseTypeMysql: var dsn string - if conf.Conf.Database.Port == 0 { + if conf.Conf.Database.CustomDSN != "" { + dsn = conf.Conf.Database.CustomDSN + } else if conf.Conf.Database.Port == 0 { dsn = fmt.Sprintf("%s:%s@unix(%s)/%s?charset=utf8mb4&parseTime=True&loc=Local&tls=%s", conf.Conf.Database.User, conf.Conf.Database.Password, @@ -55,7 +57,9 @@ func InitDatabase(ctx context.Context) error { // opts = append(opts, &gorm.Config{}) case conf.DatabaseTypeSqlite3: var dsn string - if conf.Conf.Database.DBName == "memory" || strings.HasPrefix(conf.Conf.Database.DBName, ":memory:") { + if conf.Conf.Database.CustomDSN != "" { + dsn = conf.Conf.Database.CustomDSN + } else if conf.Conf.Database.DBName == "memory" || strings.HasPrefix(conf.Conf.Database.DBName, ":memory:") { dsn = "file::memory:?cache=shared&_journal_mode=WAL&_vacuum=incremental&_pragma=foreign_keys(1)" log.Infof("sqlite3 database memory") } else { @@ -72,7 +76,9 @@ func InitDatabase(ctx context.Context) error { // opts = append(opts, &gorm.Config{}) case conf.DatabaseTypePostgres: var dsn string - if conf.Conf.Database.Port == 0 { + if conf.Conf.Database.CustomDSN != "" { + dsn = conf.Conf.Database.CustomDSN + } else if conf.Conf.Database.Port == 0 { dsn = fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=%s", conf.Conf.Database.Host, conf.Conf.Database.User, diff --git a/internal/conf/db.go b/internal/conf/db.go index 7785c59..453df75 100644 --- a/internal/conf/db.go +++ b/internal/conf/db.go @@ -16,6 +16,8 @@ type DatabaseConfig struct { Password string `yaml:"password" lc:"database password" env:"DATABASE_PASSWORD"` DBName string `yaml:"db_name" lc:"database name, when type is sqlite3, it will use sqlite db file or memory" env:"DATABASE_DB_NAME"` SslMode string `yaml:"ssl_mode" lc:"database ssl mode, default disable" env:"DATABASE_SSL_MODE"` + + CustomDSN string `yaml:"custom_dsn" lc:"custom dsn, when not empty, it will ignore other config" env:"DATABASE_CUSTOM_DSN"` } func DefaultDatabaseConfig() DatabaseConfig {