package configs import ( "fmt" "log" "os" "time" accountModels "ginimageApi/app/accounts/models" blogModels "ginimageApi/app/blogs/models" imageModels "ginimageApi/app/images/models" mcpModels "ginimageApi/app/mcp/models" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/logger" ) // DB global GORM veritabanı bağlantısı var DB *gorm.DB // ConnectDB .env dosyasındaki ayarlarla MySQL bağlantısını kurar func ConnectDB() error { host := os.Getenv("DB_HOST") port := os.Getenv("DB_PORT") user := os.Getenv("DB_USER") password := os.Getenv("DB_PASSWORD") dbName := os.Getenv("DB_NAME") // DSN (Data Source Name) oluştur dsn := fmt.Sprintf( "%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local", user, password, host, port, dbName, ) // GORM logger ayarları gormLogger := logger.New( log.New(os.Stdout, "\r\n", log.LstdFlags), logger.Config{ SlowThreshold: 200 * time.Millisecond, LogLevel: logger.Warn, IgnoreRecordNotFoundError: true, Colorful: true, }, ) var err error DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: gormLogger, }) if err != nil { return fmt.Errorf("veritabanına bağlanılamadı: %w", err) } // Bağlantı havuzu ayarları sqlDB, err := DB.DB() if err != nil { return fmt.Errorf("sql.DB alınamadı: %w", err) } sqlDB.SetMaxIdleConns(10) sqlDB.SetMaxOpenConns(100) sqlDB.SetConnMaxLifetime(time.Hour) log.Printf("✅ Veritabanı bağlantısı kuruldu: %s:%s/%s", host, port, dbName) return nil } // RunAutoMigrate tanımlanan modelleri otomatik olarak migrate eder func RunAutoMigrate() error { if DB == nil { return fmt.Errorf("migration icin veritabani baglantisi yok") } err := DB.AutoMigrate( &accountModels.User{}, &accountModels.SocialAccount{}, &accountModels.Profile{}, &accountModels.RefreshToken{}, &blogModels.Category{}, &blogModels.Tag{}, &blogModels.Post{}, &blogModels.CategoryView{}, &blogModels.Comment{}, &imageModels.Image{}, &mcpModels.ToolRun{}, ) if err != nil { return fmt.Errorf("auto migrate basarisiz: %w", err) } log.Println("✅ AutoMigrate tamamlandı") return nil } // SeedSecurityDefaults dinamik guvenlik ayarlari icin baslangic adimini temsil eder. // Bu projede kalici ayar tablolari henuz olmadigi icin no-op tutulur. func SeedSecurityDefaults() error { log.Println("✅ SeedSecurityDefaults tamamlandı") return nil }