package utils import ( "os" "strings" "cardverse/config" ) // getBaseURL mengambil Base URL dari config (APP_BASE_URL) atau environment variable dengan fallback ke http://localhost:PORT func getBaseURL() string { if config.Cfg != nil && config.Cfg.AppBaseURL != "" { return strings.TrimRight(config.Cfg.AppBaseURL, "/") } if envURL := os.Getenv("APP_BASE_URL"); envURL != "" { return strings.TrimRight(envURL, "/") } port := os.Getenv("APP_PORT") if port == "" { port = "8080" } return "http://localhost:" + port } // FormatMediaURL mengubah path relatif gambar (seperti /images/...) menjadi URL lengkap menggunakan APP_BASE_URL func FormatMediaURL(urlStr string) string { if urlStr == "" { return "" } // Jika sudah berupa URL lengkap (http:// atau https://), kembalikan langsung if strings.HasPrefix(urlStr, "http://") || strings.HasPrefix(urlStr, "https://") { return urlStr } baseURL := getBaseURL() if !strings.HasPrefix(urlStr, "/") { urlStr = "/" + urlStr } return baseURL + urlStr } // FormatMediaURLPtr mengubah pointer path relatif gambar menjadi pointer URL lengkap func FormatMediaURLPtr(urlPtr *string) *string { if urlPtr == nil || *urlPtr == "" { return urlPtr } formatted := FormatMediaURL(*urlPtr) return &formatted } // FormatJSONBMediaURLs mengubah seluruh path relatif gambar (/images/... atau /public/...) di dalam data byte JSONB menjadi URL lengkap func FormatJSONBMediaURLs(data []byte) []byte { if len(data) == 0 { return data } baseURL := getBaseURL() s := string(data) // Replace "/images/" dengan "APP_BASE_URL/images/" targetImages := `"/images/` replaceImages := `"` + baseURL + `/images/` s = strings.ReplaceAll(s, targetImages, replaceImages) // Replace "/public/" dengan "APP_BASE_URL/public/" targetPublic := `"/public/` replacePublic := `"` + baseURL + `/public/` s = strings.ReplaceAll(s, targetPublic, replacePublic) return []byte(s) }