diff --git a/internal/db/migrations/migration.go b/internal/db/migrations/migration.go index fac2eb6..e4c0b13 100644 --- a/internal/db/migrations/migration.go +++ b/internal/db/migrations/migration.go @@ -6,5 +6,12 @@ import ( func MigrateDatabase(db *gorm.DB) error { // v1.0.13 修复请求日志数据 - return V1_0_13_FixRequestLogs(db) + if err := V1_0_13_FixRequestLogs(db); err != nil { + return err + } + // v1.0.16 增加 key_value 字段长度 + if err := V1_0_16_IncreaseKeyValueLength(db); err != nil { + return err + } + return nil } diff --git a/internal/db/migrations/v1.0.16_increase_key_value_length.go b/internal/db/migrations/v1.0.16_increase_key_value_length.go new file mode 100644 index 0000000..0c232c1 --- /dev/null +++ b/internal/db/migrations/v1.0.16_increase_key_value_length.go @@ -0,0 +1,47 @@ +package db + +import ( + "fmt" + + "gorm.io/gorm" +) + +// V1_0_16_IncreaseKeyValueLength migrates the key_value column length. +func V1_0_16_IncreaseKeyValueLength(db *gorm.DB) error { + if err := alterColumnType(db, "api_keys", "key_value", "varchar(1024)"); err != nil { + return fmt.Errorf("failed to migrate api_keys table: %w", err) + } + + if err := alterColumnType(db, "request_logs", "key_value", "varchar(1024)"); err != nil { + return fmt.Errorf("failed to migrate request_logs table: %w", err) + } + + return nil +} + +func alterColumnType(db *gorm.DB, tableName, columnName, newType string) error { + var currentType string + switch db.Dialector.Name() { + case "sqlite": + return nil + case "mysql": + err := db.Raw("SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? AND COLUMN_NAME = ?", + db.Migrator().CurrentDatabase(), tableName, columnName).Scan(¤tType).Error + if err != nil { + return err + } + if currentType == newType { + return nil + } + return db.Exec(fmt.Sprintf("ALTER TABLE %s MODIFY COLUMN %s %s", tableName, columnName, newType)).Error + case "postgres": + err := db.Raw("SELECT data_type FROM information_schema.columns WHERE table_name = ? AND column_name = ?", + tableName, columnName).Scan(¤tType).Error + if err != nil { + return err + } + return db.Exec(fmt.Sprintf("ALTER TABLE %s ALTER COLUMN %s TYPE %s", tableName, columnName, newType)).Error + default: + return nil + } +}