2025-06-06 07:42:55 +00:00
|
|
|
|
package db
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2025-06-09 14:13:32 +00:00
|
|
|
|
"app/shelfly/internal/debridlink"
|
2025-06-12 08:57:10 +00:00
|
|
|
|
"app/shelfly/internal/download"
|
2025-06-06 07:42:55 +00:00
|
|
|
|
"app/shelfly/internal/models"
|
2025-06-09 14:13:32 +00:00
|
|
|
|
"fmt"
|
2025-06-19 15:30:31 +00:00
|
|
|
|
"golang.org/x/crypto/bcrypt"
|
2025-06-06 07:42:55 +00:00
|
|
|
|
"gorm.io/driver/sqlite"
|
|
|
|
|
|
"gorm.io/gorm"
|
2025-06-19 15:30:31 +00:00
|
|
|
|
"log"
|
2025-06-06 07:42:55 +00:00
|
|
|
|
)
|
|
|
|
|
|
|
2025-06-19 15:20:58 +00:00
|
|
|
|
func InitDB() *gorm.DB {
|
|
|
|
|
|
dbName := "/app/shelfly_db/shelfly_db.db"
|
|
|
|
|
|
db, err := gorm.Open(sqlite.Open(dbName), &gorm.Config{})
|
2025-06-06 07:42:55 +00:00
|
|
|
|
if err != nil {
|
2025-06-19 15:20:58 +00:00
|
|
|
|
panic("failed to connect database")
|
2025-06-06 07:42:55 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-06-09 14:13:32 +00:00
|
|
|
|
db.AutoMigrate(
|
|
|
|
|
|
&models.User{},
|
|
|
|
|
|
&models.Files{},
|
|
|
|
|
|
&models.LibrarySection{},
|
|
|
|
|
|
&models.MediaItem{},
|
|
|
|
|
|
&models.MediaPart{},
|
|
|
|
|
|
&models.MetadataItem{},
|
|
|
|
|
|
&models.SectionLocation{},
|
|
|
|
|
|
&models.Tag{},
|
|
|
|
|
|
&models.Tagging{},
|
|
|
|
|
|
&models.PathDownload{},
|
|
|
|
|
|
&debridlink.File{},
|
|
|
|
|
|
&debridlink.Link{},
|
|
|
|
|
|
&debridlink.RSSFeed{},
|
|
|
|
|
|
&debridlink.RSSItem{},
|
|
|
|
|
|
&debridlink.Torrent{},
|
|
|
|
|
|
&debridlink.DebridAccount{},
|
2025-06-12 08:57:10 +00:00
|
|
|
|
&download.DownloadJob{},
|
2025-06-09 14:13:32 +00:00
|
|
|
|
)
|
2025-06-19 15:29:49 +00:00
|
|
|
|
InitDefaultAdmin(db)
|
2025-06-19 15:20:58 +00:00
|
|
|
|
fmt.Println("Connexion réussie à SQLite !")
|
|
|
|
|
|
fmt.Println("Auto migration terminée")
|
2025-06-06 07:42:55 +00:00
|
|
|
|
return db
|
|
|
|
|
|
}
|
2025-06-19 15:29:49 +00:00
|
|
|
|
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à")
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-06-06 07:42:55 +00:00
|
|
|
|
|
|
|
|
|
|
|
2025-06-19 15:20:58 +00:00
|
|
|
|
|