fix(smoke): 修复首页 AI 建议降级与节点索引

This commit is contained in:
root
2026-03-14 00:22:28 +08:00
parent 4b52b6eefe
commit 6b5ce40140
5 changed files with 147 additions and 3 deletions
@@ -0,0 +1,58 @@
package database
import (
"fmt"
"slices"
"gorm.io/gorm"
)
type mysqlIndexColumn struct {
KeyName string `gorm:"column:Key_name"`
SeqInIndex int `gorm:"column:Seq_in_index"`
ColumnName string `gorm:"column:Column_name"`
}
func repairSmokeAINextSmokeIndexes(db *gorm.DB) error {
if db == nil {
return nil
}
const (
tableName = "fa_smoke_ai_next_smoke"
indexName = "uniq_smoke_ai_next_node"
)
var rows []mysqlIndexColumn
if err := db.Raw(fmt.Sprintf("SHOW INDEX FROM `%s` WHERE Key_name = ?", tableName), indexName).Scan(&rows).Error; err != nil {
return fmt.Errorf("inspect %s: %w", indexName, err)
}
expected := []string{"ai_advice_id", "node_type", "node_at"}
actual := make([]string, 0, len(rows))
for _, row := range rows {
actual = append(actual, row.ColumnName)
}
if slices.Equal(actual, expected) {
return nil
}
if len(rows) > 0 {
if err := db.Exec(fmt.Sprintf("ALTER TABLE `%s` DROP INDEX `%s`", tableName, indexName)).Error; err != nil {
return fmt.Errorf("drop %s: %w", indexName, err)
}
}
if err := db.Exec(
fmt.Sprintf(
"ALTER TABLE `%s` ADD UNIQUE KEY `%s` (`ai_advice_id`,`node_type`,`node_at`)",
tableName,
indexName,
),
).Error; err != nil {
return fmt.Errorf("create %s: %w", indexName, err)
}
return nil
}