mirror of
https://github.com/truewhile/MeBox.git
synced 2026-10-01 03:56:38 +08:00
优化
This commit is contained in:
@@ -20,6 +20,9 @@ func AutoMigrate(db *gorm.DB) error {
|
||||
if err := ensureLibraryRootsCompatibility(db); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := ensureEmbyMountsCompatibility(db); err != nil {
|
||||
return err
|
||||
}
|
||||
if isSQLite(db) {
|
||||
return ensureMediaSearchIndex(db)
|
||||
}
|
||||
@@ -77,3 +80,25 @@ func ensurePerformanceIndexes(db *gorm.DB) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func ensureEmbyMountsCompatibility(db *gorm.DB) error {
|
||||
if !db.Migrator().HasTable(&model.EmbyMount{}) {
|
||||
return nil
|
||||
}
|
||||
if !db.Migrator().HasColumn(&model.EmbyMount{}, "sort_order") {
|
||||
if err := db.Migrator().AddColumn(&model.EmbyMount{}, "sort_order"); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
// 针对已有数据:如果存在多个 sort_order=0/NULL 的记录,按创建时间顺序赋予稳定递增的序号
|
||||
var zeroCount int64
|
||||
if err := db.Model(&model.EmbyMount{}).Where("sort_order = 0 OR sort_order IS NULL").Count(&zeroCount).Error; err == nil && zeroCount > 1 {
|
||||
var mounts []model.EmbyMount
|
||||
if err := db.Order("created_at asc, id asc").Find(&mounts).Error; err == nil {
|
||||
for i, m := range mounts {
|
||||
_ = db.Exec("UPDATE emby_mounts SET sort_order = ? WHERE id = ?", i, m.ID).Error
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
package database
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/glebarez/sqlite"
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/ShukeBta/MMTL/internal/model"
|
||||
)
|
||||
|
||||
func TestEnsureEmbyMountsCompatibility(t *testing.T) {
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Create a table without sort_order simulating an older schema
|
||||
if err := db.Exec(`CREATE TABLE emby_mounts (
|
||||
id varchar(36) PRIMARY KEY,
|
||||
created_at datetime,
|
||||
updated_at datetime,
|
||||
deleted_at datetime,
|
||||
account_id text,
|
||||
remote_view_id text,
|
||||
remote_view_name text,
|
||||
collection_type text,
|
||||
name text,
|
||||
proxy_play numeric DEFAULT false,
|
||||
enabled numeric DEFAULT true
|
||||
)`).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Insert older rows
|
||||
now := time.Now()
|
||||
_ = db.Exec("INSERT INTO emby_mounts (id, name, created_at) VALUES (?, ?, ?)", "m1", "Mount 1", now.Add(-2*time.Hour)).Error
|
||||
_ = db.Exec("INSERT INTO emby_mounts (id, name, created_at) VALUES (?, ?, ?)", "m2", "Mount 2", now.Add(-1*time.Hour)).Error
|
||||
|
||||
// Run compatibility migration
|
||||
if err := ensureEmbyMountsCompatibility(db); err != nil {
|
||||
t.Fatalf("ensureEmbyMountsCompatibility failed: %v", err)
|
||||
}
|
||||
|
||||
// Verify column sort_order exists and values are initialized sequentially
|
||||
if !db.Migrator().HasColumn(&model.EmbyMount{}, "sort_order") {
|
||||
t.Fatal("expected sort_order column to be added")
|
||||
}
|
||||
|
||||
var m1, m2 model.EmbyMount
|
||||
if err := db.Where("id = ?", "m1").First(&m1).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := db.Where("id = ?", "m2").First(&m2).Error; err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if m1.SortOrder != 0 || m2.SortOrder != 1 {
|
||||
t.Fatalf("unexpected sort orders: m1=%d, m2=%d", m1.SortOrder, m2.SortOrder)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user