package database import ( "RenewCMS/internal/infrastructure/persistence/models" "gorm.io/gorm" ) func Migrate(db *gorm.DB, publicURL string) error { err := tableOptionsFor(db).AutoMigrate(&models.Article{}, &models.Image{}, &models.User{}, &models.Invite{}, &models.APIKey{}, &models.PurgeSettings{}, &models.AuditEvent{}, &models.AuditSettings{}, &models.ImageVariant{}, &models.ImageVariantFile{}, &models.ImageVariantRejectionDay{}, &models.Site{}, &models.Author{}, &models.ArticleAuthor{}) if err != nil { return err } if err := ensureImagePathIndex(db); err != nil { return err } if err := BackfillUserRoles(db); err != nil { return err } return SeedDefaultSite(db, publicURL) } const ( imagePathIndexName = "idx_images_path" mysqlDialectorName = "mysql" imagePathIndexStatement = "CREATE INDEX " + imagePathIndexName + " ON images (path)" mysqlImagePathStatement = "CREATE INDEX " + imagePathIndexName + " ON images (path(191))" ) func ensureImagePathIndex(db *gorm.DB) error { if db.Migrator().HasIndex(&models.Image{}, imagePathIndexName) { return nil } if db.Dialector.Name() == mysqlDialectorName { return db.Exec(mysqlImagePathStatement).Error } return db.Exec(imagePathIndexStatement).Error }