66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
package database
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
)
|
|
|
|
var DB *gorm.DB
|
|
|
|
type DBConfig struct {
|
|
Driver string // "sqlite", "postgres", "mysql"
|
|
DSN string // Data Source Name
|
|
}
|
|
|
|
// Initialize initialise la connexion à la base de données
|
|
func Initialize(config DBConfig) error {
|
|
var err error
|
|
var dialector gorm.Dialector
|
|
|
|
// Sélection du driver approprié
|
|
switch config.Driver {
|
|
case "sqlite":
|
|
dialector = sqlite.Open(config.DSN)
|
|
case "postgres":
|
|
dialector = postgres.Open(config.DSN)
|
|
case "mysql":
|
|
dialector = mysql.Open(config.DSN)
|
|
default:
|
|
return fmt.Errorf("driver non supporté: %s", config.Driver)
|
|
}
|
|
|
|
// Configuration de GORM
|
|
gormConfig := &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Info),
|
|
}
|
|
|
|
// Connexion à la base de données
|
|
DB, err = gorm.Open(dialector, gormConfig)
|
|
if err != nil {
|
|
return fmt.Errorf("erreur lors de la connexion à la base de données: %w", err)
|
|
}
|
|
|
|
log.Printf("Connexion à la base de données (%s) établie avec succès", config.Driver)
|
|
return nil
|
|
}
|
|
|
|
// AutoMigrate effectue les migrations automatiques pour les modèles
|
|
func AutoMigrate(models ...interface{}) error {
|
|
return DB.AutoMigrate(models...)
|
|
}
|
|
|
|
// Close ferme la connexion à la base de données
|
|
func Close() error {
|
|
sqlDB, err := DB.DB()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return sqlDB.Close()
|
|
}
|