Perbaikan pembacaan data base

This commit is contained in:
2025-08-18 08:45:49 +07:00
parent a7d6005649
commit 6192a64f0a
23 changed files with 1833 additions and 743 deletions

View File

@@ -70,6 +70,42 @@ func LoadConfig() *Config {
}
func (c *Config) loadDatabaseConfigs() {
// Simplified approach: Directly load from environment variables
// This ensures we get the exact values specified in .env
// Primary database configuration
c.Databases["primary"] = DatabaseConfig{
Name: "primary",
Type: getEnv("DB_CONNECTION", "postgres"),
Host: getEnv("DB_HOST", "localhost"),
Port: getEnvAsInt("DB_PORT", 5432),
Username: getEnv("DB_USERNAME", ""),
Password: getEnv("DB_PASSWORD", ""),
Database: getEnv("DB_DATABASE", "satu_db"),
Schema: getEnv("DB_SCHEMA", "public"),
SSLMode: getEnv("DB_SSLMODE", "disable"),
MaxOpenConns: getEnvAsInt("DB_MAX_OPEN_CONNS", 25),
MaxIdleConns: getEnvAsInt("DB_MAX_IDLE_CONNS", 25),
ConnMaxLifetime: parseDuration(getEnv("DB_CONN_MAX_LIFETIME", "5m")),
}
// SATUDATA database configuration
c.Databases["satudata"] = DatabaseConfig{
Name: "satudata",
Type: getEnv("SATUDATA_CONNECTION", "postgres"),
Host: getEnv("SATUDATA_HOST", "localhost"),
Port: getEnvAsInt("SATUDATA_PORT", 5432),
Username: getEnv("SATUDATA_USERNAME", ""),
Password: getEnv("SATUDATA_PASSWORD", ""),
Database: getEnv("SATUDATA_DATABASE", "satu_db"),
Schema: getEnv("SATUDATA_SCHEMA", "public"),
SSLMode: getEnv("SATUDATA_SSLMODE", "disable"),
MaxOpenConns: getEnvAsInt("SATUDATA_MAX_OPEN_CONNS", 25),
MaxIdleConns: getEnvAsInt("SATUDATA_MAX_IDLE_CONNS", 25),
ConnMaxLifetime: parseDuration(getEnv("SATUDATA_CONN_MAX_LIFETIME", "5m")),
}
// Legacy support for backward compatibility
envVars := os.Environ()
dbConfigs := make(map[string]map[string]string)
@@ -100,35 +136,12 @@ func (c *Config) loadDatabaseConfigs() {
dbConfigs[dbName][property] = value
}
}
// Parse DB_ prefixed variables
if strings.HasPrefix(key, "DB_") && !strings.Contains(key, "_REPLICA_") {
segments := strings.Split(key, "_")
if len(segments) >= 3 {
dbName := strings.ToLower(segments[1])
property := strings.ToLower(strings.Join(segments[2:], "_"))
if dbConfigs[dbName] == nil {
dbConfigs[dbName] = make(map[string]string)
}
dbConfigs[dbName][property] = value
}
}
// Parse legacy format (for backward compatibility)
if strings.HasPrefix(key, "BLUEPRINT_DB_") {
if dbConfigs["primary"] == nil {
dbConfigs["primary"] = make(map[string]string)
}
property := strings.ToLower(strings.TrimPrefix(key, "BLUEPRINT_DB_"))
dbConfigs["primary"][property] = value
}
}
// Create DatabaseConfig from parsed configurations
// Create DatabaseConfig from parsed configurations for additional databases
for name, config := range dbConfigs {
// Skip empty configurations or system configurations
if name == "" || strings.Contains(name, "chrome_crashpad_pipe") {
if name == "" || strings.Contains(name, "chrome_crashpad_pipe") || name == "primary" || name == "satudata" {
continue
}
@@ -154,25 +167,8 @@ func (c *Config) loadDatabaseConfigs() {
continue
}
// Handle legacy format
if name == "primary" && dbConfig.Type == "postgres" && dbConfig.Host == "localhost" {
dbConfig.Host = getEnv("BLUEPRINT_DB_HOST", "localhost")
dbConfig.Port = getEnvAsInt("BLUEPRINT_DB_PORT", 5432)
dbConfig.Username = getEnv("BLUEPRINT_DB_USERNAME", "postgres")
dbConfig.Password = getEnv("BLUEPRINT_DB_PASSWORD", "postgres")
dbConfig.Database = getEnv("BLUEPRINT_DB_DATABASE", "api_service")
dbConfig.Schema = getEnv("BLUEPRINT_DB_SCHEMA", "public")
}
c.Databases[name] = dbConfig
}
// Add specific databases from .env if not already parsed
c.addSpecificDatabase("db", "postgres")
c.addSpecificDatabase("simrs", "postgres")
c.addSpecificDatabase("antrian", "mysql")
c.addSpecificDatabase("satudata", "postgres")
c.addSpecificDatabase("mongodb_dev", "mongodb")
}
func (c *Config) loadReadReplicaConfigs() {