package db import ( "path" "gorm.io/gorm" // "gorm.io/gorm/logger" "gorm.io/driver/sqlite" log "github.com/sirupsen/logrus" "reichard.io/imagini/internal/config" "reichard.io/imagini/internal/models" ) type DBManager struct { db *gorm.DB } func NewMgr(c *config.Config) *DBManager { gormConfig := &gorm.Config{ PrepareStmt: true, // Logger: logger.Default.LogMode(logger.Silent), } // Create manager dbm := &DBManager{} if c.DBType == "SQLite" { dbLocation := path.Join(c.ConfigPath, "imagini.db") dbm.db, _ = gorm.Open(sqlite.Open(dbLocation), gormConfig) } else { log.Fatal("Unsupported Database") } // Initialize database dbm.db.AutoMigrate(&models.ServerSetting{}) dbm.db.AutoMigrate(&models.Device{}) dbm.db.AutoMigrate(&models.User{}) dbm.db.AutoMigrate(&models.MediaItem{}) dbm.db.AutoMigrate(&models.Tag{}) dbm.db.AutoMigrate(&models.Album{}) // Determine whether to bootstrap var count int64 dbm.db.Model(&models.User{}).Count(&count) if count == 0 { dbm.bootstrapDatabase() } return dbm } func (dbm *DBManager) bootstrapDatabase() { log.Info("[query] Bootstrapping database.") _, err := dbm.CreateUser(models.User{ Username: "admin", Password: "admin", AuthType: "Local", }) if err != nil { log.Fatal("[query] Unable to bootstrap database.") } }