Files
ristek-task-be/internal/config/config.go
T
bagas 8ae0c2ef8e
Docker Build and Push / Build and Push Docker Image (push) Successful in 17m11s
feat: add custom jwt secret
2026-02-26 10:35:54 +07:00

81 lines
1.3 KiB
Go

package config
import (
"fmt"
"os"
"github.com/joho/godotenv"
)
type Config interface {
Addr() string
Port() string
DatabaseURL() string
JwtSecret() string
}
type config struct {
addr string
port string
databaseURL string
jwtSecret string
}
func (c *config) Addr() string {
return c.addr
}
func (c *config) Port() string {
return c.port
}
func (c *config) DatabaseURL() string {
return c.databaseURL
}
func (c *config) JwtSecret() string { return c.jwtSecret }
func parse() (*config, error) {
domain := getenv("ADDRESS", "0.0.0.0")
sshPort := getenv("PORT", "8080")
databaseURL := getenv("DATABASE_URL", "")
jwtSecret := getenv("JWT_SECRET", "yomama")
if databaseURL == "" {
return nil, fmt.Errorf("DATABASE_URL environment variable not set")
}
return &config{
addr: domain,
port: sshPort,
databaseURL: databaseURL,
jwtSecret: jwtSecret,
}, nil
}
func loadEnvFile() error {
if _, err := os.Stat(".env"); err == nil {
return godotenv.Load(".env")
}
return nil
}
func getenv(key, def string) string {
if v := os.Getenv(key); v != "" {
return v
}
return def
}
func MustLoad() (Config, error) {
if err := loadEnvFile(); err != nil {
return nil, err
}
cfg, err := parse()
if err != nil {
return nil, err
}
return cfg, nil
}