39 lines
1.2 KiB
Go
39 lines
1.2 KiB
Go
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{})
|
|
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
|
|
}
|