feat: add dynamic hospital database registry
This commit is contained in:
@@ -3,7 +3,6 @@ package config
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -11,17 +10,26 @@ import (
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
AppHost string
|
||||
AppPort string
|
||||
DBHost string
|
||||
DBPort string
|
||||
DBDatabase string
|
||||
DBUsername string
|
||||
DBPassword string
|
||||
BearerToken string
|
||||
DBMaxOpenConns int
|
||||
DBMaxIdleConns int
|
||||
DBConnMaxLifetime time.Duration
|
||||
AppHost string
|
||||
AppPort string
|
||||
DBHost string
|
||||
DBPort string
|
||||
DBDatabase string
|
||||
DBUsername string
|
||||
DBPassword string
|
||||
BearerToken string
|
||||
DBSettingsToken string
|
||||
DBMaxOpenConns int
|
||||
DBMaxIdleConns int
|
||||
DBConnMaxLifetime time.Duration
|
||||
DBDefaultRSCode string
|
||||
DBDefaultRSName string
|
||||
ManagementDBHost string
|
||||
ManagementDBPort string
|
||||
ManagementDBDatabase string
|
||||
ManagementDBUsername string
|
||||
ManagementDBPassword string
|
||||
DBCredentialSecret string
|
||||
}
|
||||
|
||||
func Load(path string) (Config, error) {
|
||||
@@ -30,17 +38,26 @@ func Load(path string) (Config, error) {
|
||||
}
|
||||
|
||||
cfg := Config{
|
||||
AppHost: env("APP_HOST", "0.0.0.0"),
|
||||
AppPort: env("APP_PORT", "8080"),
|
||||
DBHost: env("DB_HOST", "127.0.0.1"),
|
||||
DBPort: env("DB_PORT", "3306"),
|
||||
DBDatabase: env("DB_DATABASE", ""),
|
||||
DBUsername: env("DB_USERNAME", "root"),
|
||||
DBPassword: env("DB_PASSWORD", ""),
|
||||
BearerToken: env("CPONE_BEARER_TOKEN", ""),
|
||||
DBMaxOpenConns: envInt("DB_MAX_OPEN_CONNS", 25),
|
||||
DBMaxIdleConns: envInt("DB_MAX_IDLE_CONNS", 25),
|
||||
DBConnMaxLifetime: time.Duration(envInt("DB_CONN_MAX_LIFETIME_MINUTES", 5)) * time.Minute,
|
||||
AppHost: env("APP_HOST", "0.0.0.0"),
|
||||
AppPort: env("APP_PORT", "8080"),
|
||||
DBHost: env("DB_HOST", "127.0.0.1"),
|
||||
DBPort: env("DB_PORT", "3306"),
|
||||
DBDatabase: env("DB_DATABASE", ""),
|
||||
DBUsername: env("DB_USERNAME", "root"),
|
||||
DBPassword: env("DB_PASSWORD", ""),
|
||||
BearerToken: env("CPONE_BEARER_TOKEN", ""),
|
||||
DBSettingsToken: env("CPONE_DATABASE_SETTINGS_TOKEN", env("CPONE_BEARER_TOKEN", "")),
|
||||
DBMaxOpenConns: envInt("DB_MAX_OPEN_CONNS", 25),
|
||||
DBMaxIdleConns: envInt("DB_MAX_IDLE_CONNS", 25),
|
||||
DBConnMaxLifetime: time.Duration(envInt("DB_CONN_MAX_LIFETIME_MINUTES", 5)) * time.Minute,
|
||||
DBDefaultRSCode: strings.ToUpper(strings.TrimSpace(env("DB_DEFAULT_RS_CODE", "AWALBROS_DEV"))),
|
||||
DBDefaultRSName: env("DB_DEFAULT_RS_NAME", "RS Dev Awalbros"),
|
||||
ManagementDBHost: env("CPONE_DB_HOST", env("DB_HOST", "127.0.0.1")),
|
||||
ManagementDBPort: env("CPONE_DB_PORT", env("DB_PORT", "3306")),
|
||||
ManagementDBDatabase: env("CPONE_DB_DATABASE", "cpone_middleware"),
|
||||
ManagementDBUsername: env("CPONE_DB_USERNAME", env("DB_USERNAME", "root")),
|
||||
ManagementDBPassword: env("CPONE_DB_PASSWORD", env("DB_PASSWORD", "")),
|
||||
DBCredentialSecret: env("CPONE_DATABASE_CREDENTIAL_KEY", env("CPONE_DATABASE_SETTINGS_TOKEN", env("CPONE_BEARER_TOKEN", ""))),
|
||||
}
|
||||
|
||||
if cfg.DBDatabase == "" {
|
||||
@@ -49,6 +66,12 @@ func Load(path string) (Config, error) {
|
||||
if cfg.BearerToken == "" {
|
||||
return Config{}, fmt.Errorf("CPONE_BEARER_TOKEN wajib diisi")
|
||||
}
|
||||
if cfg.DBDefaultRSCode == "" {
|
||||
return Config{}, fmt.Errorf("DB_DEFAULT_RS_CODE wajib diisi")
|
||||
}
|
||||
if cfg.ManagementDBDatabase == "" {
|
||||
return Config{}, fmt.Errorf("CPONE_DB_DATABASE wajib diisi")
|
||||
}
|
||||
|
||||
return cfg, nil
|
||||
}
|
||||
@@ -57,23 +80,6 @@ func (c Config) Addr() string {
|
||||
return c.AppHost + ":" + c.AppPort
|
||||
}
|
||||
|
||||
func (c Config) MySQLDSN() string {
|
||||
values := url.Values{}
|
||||
values.Set("charset", "utf8mb4")
|
||||
values.Set("parseTime", "true")
|
||||
values.Set("loc", "Local")
|
||||
|
||||
return fmt.Sprintf(
|
||||
"%s:%s@tcp(%s:%s)/%s?%s",
|
||||
c.DBUsername,
|
||||
c.DBPassword,
|
||||
c.DBHost,
|
||||
c.DBPort,
|
||||
c.DBDatabase,
|
||||
values.Encode(),
|
||||
)
|
||||
}
|
||||
|
||||
func loadDotEnv(path string) error {
|
||||
file, err := os.Open(path)
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user