102 lines
2.4 KiB
Go
102 lines
2.4 KiB
Go
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
|
||
}
|