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) { if os.Getenv("DATABASE_HOST") != "" { return databaseFromEnv() } switch env { case "production": 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: return DatabaseConfig{ Host: "localhost", Port: 3306, Name: "audio", User: "root", 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 }