Files
ginimageApi/configs/db.go
Beyhan Oğur e04ba85564 first commit
2026-04-26 21:40:14 +03:00

102 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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
}