first commit
This commit is contained in:
101
configs/db.go
Normal file
101
configs/db.go
Normal file
@@ -0,0 +1,101 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user