Files
app-api/internal/config/database.go
T

72 lines
1.5 KiB
Go
Raw Normal View History

2026-05-21 15:20:12 +08:00
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
}