package db import ( "canguidev/shelfy/internal/client" runner "canguidev/shelfy/internal/job" "canguidev/shelfy/internal/models" "fmt" "log" "os" "path/filepath" "golang.org/x/crypto/bcrypt" "gorm.io/driver/sqlite" "gorm.io/gorm" ) func InitDB() *gorm.DB { dbPath := "data/shelfly_db.db" // Crée le dossier parent s'il n'existe pas if err := os.MkdirAll(filepath.Dir(dbPath), os.ModePerm); err != nil { panic(fmt.Sprintf("Erreur lors de la création du dossier : %v", err)) } // Connexion à SQLite db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{}) if err != nil { panic(fmt.Sprintf("Échec de connexion à SQLite : %v", err)) } // Auto migration if err := db.AutoMigrate(&models.User{},&models.PathDownload{},&client.DebridAccount{},&runner.DownloadJob{}); err != nil { panic(fmt.Sprintf("Erreur d'auto-migration : %v", err)) } InitDefaultAdmin(db) fmt.Println("✅ SQLite initialisé correctement.") return db } func InitDefaultAdmin(db *gorm.DB) { const email = "canguijc@gmail.com" const username = "admin" const name = "Admin" const password = "GHT30k7!" var user models.User result := db.Where("email = ?", email).First(&user) if result.Error == gorm.ErrRecordNotFound { hashedPassword, err := bcrypt.GenerateFromPassword([]byte(password), bcrypt.DefaultCost) if err != nil { log.Fatalf("Erreur lors du hash du mot de passe: %v", err) } newUser := models.User{ Email: email, Username: username, Name: name, Password: string(hashedPassword), } if err := db.Create(&newUser).Error; err != nil { log.Fatalf("Erreur lors de la création de l'utilisateur admin: %v", err) } log.Println("✅ Utilisateur administrateur créé avec succès") } else if result.Error != nil { log.Fatalf("Erreur lors de la vérification de l'utilisateur admin: %v", result.Error) } else { log.Println("ℹ️ L'utilisateur administrateur existe déjà") } }