package config import ( "fmt" "os" "strconv" ) type DatabaseConfig struct { Host string Port int Name string User string Password string } func loadDatabase(env string) (DatabaseConfig, error) { switch env { case "production": if os.Getenv("DATABASE_HOST") != "" { return databaseFromEnv() } return DatabaseConfig{ Host: "database-1.chmuueamo72p.eu-central-1.rds.amazonaws.com", Port: 3306, Name: "audio", User: "root", Password: os.Getenv("DATABASE_PASSWORD"), }, nil default: port, err := strconv.Atoi(getEnv("DATABASE_PORT", "3306")) if err != nil { return DatabaseConfig{}, fmt.Errorf("invalid DATABASE_PORT: %w", err) } return DatabaseConfig{ Host: getEnv("DATABASE_HOST", "192.168.9.127"), Port: port, Name: getEnv("DATABASE_NAME", "audio"), User: getEnv("DATABASE_USER", "root"), Password: getEnv("DATABASE_PASSWORD", "root123"), }, nil } } func databaseFromEnv() (DatabaseConfig, error) { port, err := strconv.Atoi(getEnv("DATABASE_PORT", "3306")) if err != nil { return DatabaseConfig{}, fmt.Errorf("invalid DATABASE_PORT: %w", err) } return DatabaseConfig{ Host: os.Getenv("DATABASE_HOST"), Port: port, Name: getEnv("DATABASE_NAME", "audio"), User: getEnv("DATABASE_USER", "root"), Password: os.Getenv("DATABASE_PASSWORD"), }, nil } func (d DatabaseConfig) validate(env string) error { if d.Host == "" { return fmt.Errorf("database host is required") } if d.Name == "" { return fmt.Errorf("database name is required") } if d.User == "" { return fmt.Errorf("database user is required") } if env == "production" && d.Password == "" { return fmt.Errorf("DATABASE_PASSWORD is required in production") } return nil }