package config import ( "log" "os" "strconv" "github.com/joho/godotenv" ) type Config struct { DatabaseURL string TripayMerchantCode string TripayAPIKey string TripayPrivateKey string TripayIsProduction bool TripayProxyURL string AppPort int Port string // Hugging Face Spaces port (default 7860) AppBaseURL string JWTSecretKey string JWTExpiryHours int FonnteToken string StoreName string CloudinaryCloudName string CloudinaryAPIKey string CloudinaryAPISecret string } var GlobalConfig *Config func LoadConfig() { // Muat file .env jika ada (terutama untuk dev lokal) if err := godotenv.Load(); err != nil { log.Println("Info: File .env tidak ditemukan, menggunakan variable OS") } GlobalConfig = &Config{ DatabaseURL: getEnv("DATABASE_URL", "postgresql://warungpos:warungpos123@db:5432/warungpos_db"), TripayMerchantCode: getEnv("TRIPAY_MERCHANT_CODE", ""), TripayAPIKey: getEnv("TRIPAY_API_KEY", ""), TripayPrivateKey: getEnv("TRIPAY_PRIVATE_KEY", ""), TripayIsProduction: getEnvBool("TRIPAY_IS_PRODUCTION", true), TripayProxyURL: getEnv("TRIPAY_PROXY_URL", ""), AppPort: getEnvInt("APP_PORT", 8003), Port: getEnv("PORT", "7860"), // Default port Hugging Face Spaces AppBaseURL: getEnv("APP_BASE_URL", "http://localhost:8003"), JWTSecretKey: getEnv("JWT_SECRET_KEY", "default-secret-key-change-me"), JWTExpiryHours: getEnvInt("JWT_EXPIRY_HOURS", 24), FonnteToken: getEnv("FONNTE_TOKEN", ""), StoreName: "XOGM Go", // Hardcoded to override old env variables CloudinaryCloudName: getEnv("CLOUDINARY_CLOUD_NAME", ""), CloudinaryAPIKey: getEnv("CLOUDINARY_API_KEY", ""), CloudinaryAPISecret: getEnv("CLOUDINARY_API_SECRET", ""), } } func getEnv(key, fallback string) string { if value, exists := os.LookupEnv(key); exists { return value } return fallback } func getEnvInt(key string, fallback int) int { str := getEnv(key, "") if str == "" { return fallback } val, err := strconv.Atoi(str) if err != nil { return fallback } return val } func getEnvBool(key string, fallback bool) bool { str := getEnv(key, "") if str == "" { return fallback } val, err := strconv.ParseBool(str) if err != nil { return fallback } return val }