first commit

This commit is contained in:
Beyhan Oğur
2026-04-26 21:46:42 +03:00
commit 2a5b661443
202 changed files with 49770 additions and 0 deletions

243
config/config.go Normal file
View File

@@ -0,0 +1,243 @@
package configs
import (
"log"
"os"
"strconv"
"strings"
"github.com/joho/godotenv"
)
type Config struct {
Env string // örn. development, production
Port string
DBUrl string
JWTSecret string
AppURL string
ApiAppURL string // örn. https://api.example.com - e-posta doğrulama linkleri için kullanılır
GoogleClientID string
GoogleClientSecret string
GithubClientID string
GithubClientSecret string
GoogleRedirectURL string
GithubRedirectURL string
ClientCallbackURL string
OAuthRedirectURL string
RedisUrl string
AccessTokenExpireMinutes int
RefreshTokenExpireDays int
// Avatar Ayarları
AvatarHeight int
AvatarWidth int
AvatarQuality int
AvatarFormat string
AvatarMode string // cover, contain, resize
// Ana Sayfa Resim Ayarları
HomeImageHeight int
HomeImageWidth int
HomeImageQuality int
HomeImageFormat string
HomeImageMode string // cover, contain, resize
// Hakkında Resim Ayarları
AboutImageHeight int
AboutImageWidth int
AboutImageQuality int
AboutImageFormat string
AboutImageMode string // cover, contain, resize
// Servis Resim Ayarları
ServiceImageHeight int
ServiceImageWidth int
ServiceImageQuality int
ServiceImageFormat string
ServiceImageMode string // cover, contain, resize
// Gönderi Resim Ayarları
PostImageHeight int
PostImageWidth int
PostImageQuality int
PostImageFormat string
PostImageMode string // cover, contain, resize
// Gönderi Kategori Resim Ayarları
PostCategoryImageHeight int
PostCategoryImageWidth int
PostCategoryImageQuality int
PostCategoryImageFormat string
PostCategoryImageMode string // cover, contain, resize
// Site Logo Ayarları
SettingsLogoHeight int
SettingsLogoWidth int
SettingsLogoQuality int
SettingsLogoFormat string
SettingsLogoMode string // cover, contain, resize
// Afiş Resim Ayarları
BannerImageHeight int
BannerImageWidth int
BannerImageQuality int
BannerImageFormat string
BannerImageMode string // cover, contain, resize
// Afiş Küçük Resim (Thumb) Ayarları
BannerThumbHeight int
BannerThumbWidth int
BannerThumbQuality int
BannerThumbFormat string
BannerThumbMode string // cover, contain, resize
// E-posta Ayarları
EmailHost string
EmailPort string
EmailHostUser string
EmailHostPassword string
EmailFrom string
// Debug / Logging
Debug bool // SET_DEBUG=true ise middleware ve diğer debug loglarıılır
CorsDebug bool
}
var AppConfig *Config
func LoadConfig() {
err := godotenv.Load()
if err != nil {
// Eğer proje kök dizininden çalıştırılmıyorsa (örn: cmd/app içinden), üst dizinleri kontrol et
err = godotenv.Load(".env")
//err = godotenv.Load("../../.env")
}
if err != nil {
log.Printf("Uyarı: .env dosyası yüklenirken hata oluştu: %v — sistem ortam değişkenleriyle devam ediliyor", err)
}
log.Printf(".env ENV YUKLENDI")
AppConfig = &Config{
Env: getEnv("APP_ENV", "development"),
Port: getEnv("PORT", "8080"),
DBUrl: getEnv("DB_URL", ""),
JWTSecret: getEnv("JWT_SECRET", "go-gin-mTFY2jAOMWWxadVIWjRoPG9aOM3z9srCVoU35Gs1VZaRKgXet26cztUE8LLpwok9"),
AppURL: getEnv("APP_URL", "http://localhost:8080"),
ApiAppURL: getEnv("BASE_SITE_URL", "http://localhost:3000"),
GoogleClientID: getEnv("GOOGLE_CLIENT_ID", ""),
GoogleClientSecret: getEnv("GOOGLE_CLIENT_SECRET", ""),
GithubClientID: getEnv("GITHUB_CLIENT_ID", ""),
GithubClientSecret: getEnv("GITHUB_CLIENT_SECRET", ""),
GoogleRedirectURL: getEnv("GOOGLE_REDIRECT_URL", "http://localhost:8080/api/v1/auth/google/callback"),
GithubRedirectURL: getEnv("GITHUB_REDIRECT_URL", "http://localhost:8080/api/v1/auth/github/callback"),
ClientCallbackURL: getEnv("CLIENT_CALLBACK_URL", ""),
OAuthRedirectURL: getEnv("OAUTH_REDIRECT_URL", ""),
RedisUrl: getEnv("REDIS_URL", ""),
AccessTokenExpireMinutes: getEnvAsInt("ACCESS_TOKEN_EXPIRE_MINUTES", 120), // Varsayılan 120 dakika
RefreshTokenExpireDays: getEnvAsInt("REFRESH_TOKEN_EXPIRE_DAYS", 30), // Varsayılan 30 gün
// Avatar Varsayılanları
AvatarHeight: getEnvAsInt("AVATAR_H", 0), // Varsayılan 0 (otomatik)
AvatarWidth: getEnvAsInt("AVATAR_W", 800), // Varsayılan 800
AvatarQuality: getEnvAsInt("AVATAR_Q", 80), // Varsayılan 80
AvatarFormat: getEnv("AVATAR_F", "webp"), // Varsayılan webp
AvatarMode: getEnv("AVATAR_B", "contain"), // Varsayılan contain (Fit)
// Ana Sayfa Resim Varsayılanları
HomeImageHeight: getEnvAsInt("HOME_IMAGE_H", 0), // Varsayılan 0 (otomatik)
HomeImageWidth: getEnvAsInt("HOME_IMAGE_W", 800), // Varsayılan 800
HomeImageQuality: getEnvAsInt("HOME_IMAGE_Q", 80), // Varsayılan 80
HomeImageFormat: getEnv("HOME_IMAGE_F", "webp"), // Varsayılan webp
HomeImageMode: getEnv("HOME_IMAGE_B", "contain"), // Varsayılan contain (Fit)
// Hakkında Resim Varsayılanları
AboutImageHeight: getEnvAsInt("ABOUTME_IMAGE_H", getEnvAsInt("ABOUT_IMAGE_H", 0)),
AboutImageWidth: getEnvAsInt("ABOUTME_IMAGE_W", getEnvAsInt("ABOUT_IMAGE_W", 800)),
AboutImageQuality: getEnvAsInt("ABOUTME_IMAGE_Q", getEnvAsInt("ABOUT_IMAGE_Q", 80)),
AboutImageFormat: getEnv("ABOUTME_IMAGE_F", getEnv("ABOUT_IMAGE_F", "webp")),
AboutImageMode: getEnv("ABOUTME_IMAGE_B", getEnv("ABOUT_IMAGE_B", "contain")),
// Servis Resim Varsayılanları
ServiceImageHeight: getEnvAsInt("SERVICE_IMAGE_H", 256),
ServiceImageWidth: getEnvAsInt("SERVICE_IMAGE_W", 256),
ServiceImageQuality: getEnvAsInt("SERVICE_IMAGE_Q", 90),
ServiceImageFormat: getEnv("SERVICE_IMAGE_F", "png"),
ServiceImageMode: getEnv("SERVICE_IMAGE_B", "cover"),
// Gönderi Resim Varsayılanları
PostImageHeight: getEnvAsInt("POST_IMAGE_H", 450),
PostImageWidth: getEnvAsInt("POST_IMAGE_W", 700),
PostImageQuality: getEnvAsInt("POST_IMAGE_Q", 90),
PostImageFormat: getEnv("POST_IMAGE_F", "webp"),
PostImageMode: getEnv("POST_IMAGE_B", "cover"),
// Gönderi Kategori Resim Varsayılanları
PostCategoryImageHeight: getEnvAsInt("POST_CATEGORY_IMAGE_H", 300),
PostCategoryImageWidth: getEnvAsInt("POST_CATEGORY_IMAGE_W", 300),
PostCategoryImageQuality: getEnvAsInt("POST_CATEGORY_IMAGE_Q", 85),
PostCategoryImageFormat: getEnv("POST_CATEGORY_IMAGE_F", "png"),
PostCategoryImageMode: getEnv("POST_CATEGORY_IMAGE_B", "cover"),
// Site Logo Varsayılanları
SettingsLogoHeight: getEnvAsInt("SETTINGS_LOGO_H", 54),
SettingsLogoWidth: getEnvAsInt("SETTINGS_LOGO_W", 165),
SettingsLogoQuality: getEnvAsInt("SETTINGS_LOGO_Q", 85),
SettingsLogoFormat: getEnv("SETTINGS_LOGO_F", "png"),
SettingsLogoMode: getEnv("SETTINGS_LOGO_B", "cover"),
// Afiş Resim Varsayılanları
BannerImageHeight: getEnvAsInt("BANNER_IMAGE_H", 700),
BannerImageWidth: getEnvAsInt("BANNER_IMAGE_W", 1920),
BannerImageQuality: getEnvAsInt("BANNER_IMAGE_Q", 85),
BannerImageFormat: getEnv("BANNER_IMAGE_F", "webp"),
BannerImageMode: getEnv("BANNER_IMAGE_B", "cover"),
// Afiş Küçük Resim (Thumb) Varsayılanları
BannerThumbHeight: getEnvAsInt("BANNER_THUMB_H", 48),
BannerThumbWidth: getEnvAsInt("BANNER_THUMB_W", 48),
BannerThumbQuality: getEnvAsInt("BANNER_THUMB_Q", 90),
BannerThumbFormat: getEnv("BANNER_THUMB_F", "png"),
BannerThumbMode: getEnv("BANNER_THUMB_B", "cover"),
// E-posta Varsayılanları
EmailHost: getEnv("EMAIL_HOST", "localhost"),
EmailPort: getEnv("EMAIL_PORT", "1025"),
EmailHostUser: getEnv("EMAIL_HOST_USER", ""),
EmailHostPassword: getEnv("EMAIL_HOST_PASSWORD", ""),
EmailFrom: getEnv("EMAIL_FROM", "noreply@gauth.local"),
// Debug / Logging
Debug: getEnvAsBool("SET_DEBUG", false),
CorsDebug: getEnvAsBool("CORS_DEBUG", false),
}
}
func getEnv(key, fallback string) string {
if value, exists := os.LookupEnv(key); exists {
return value
}
return fallback
}
func getEnvAsInt(key string, fallback int) int {
valueStr := getEnv(key, "")
if valueStr == "" {
return fallback
}
value, err := strconv.Atoi(valueStr)
if err != nil {
return fallback
}
return value
}
func getEnvAsBool(key string, fallback bool) bool {
valueStr := strings.TrimSpace(getEnv(key, ""))
if valueStr == "" {
return fallback
}
value, err := strconv.ParseBool(valueStr)
if err != nil {
return fallback
}
return value
}