From 8ab924ad9b6503368b4cc3689a714ce902a5ef61 Mon Sep 17 00:00:00 2001 From: yangjianbo Date: Mon, 29 Dec 2025 11:18:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=9E=84=E5=BB=BA):=20=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E9=81=97=E7=95=99=E7=9A=84=20GORM=20auto=5Fmigrate.go=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 该文件是 GORM 迁移到 Ent ORM 过程中遗留的,仍然导入了 gorm.io/gorm,导致 Docker 构建失败。 文件中的功能已被迁移到 SQL 迁移文件中: - fixInvalidExpiresAt → 006_fix_invalid_subscription_expires_at.sql - ensureDefaultGroups → 001_init.sql 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- backend/internal/repository/auto_migrate.go | 106 -------------------- 1 file changed, 106 deletions(-) delete mode 100644 backend/internal/repository/auto_migrate.go diff --git a/backend/internal/repository/auto_migrate.go b/backend/internal/repository/auto_migrate.go deleted file mode 100644 index f76e3719..00000000 --- a/backend/internal/repository/auto_migrate.go +++ /dev/null @@ -1,106 +0,0 @@ -package repository - -import ( - "log" - "time" - - "gorm.io/gorm" -) - -// MaxExpiresAt is the maximum allowed expiration date for subscriptions (year 2099) -// This prevents time.Time JSON serialization errors (RFC 3339 requires year <= 9999) -var maxExpiresAt = time.Date(2099, 12, 31, 23, 59, 59, 0, time.UTC) - -// AutoMigrate runs schema migrations for all repository persistence models. -// Persistence models are defined within individual `*_repo.go` files. -func AutoMigrate(db *gorm.DB) error { - err := db.AutoMigrate( - &userModel{}, - &apiKeyModel{}, - &groupModel{}, - &accountModel{}, - &accountGroupModel{}, - &proxyModel{}, - &redeemCodeModel{}, - &usageLogModel{}, - &settingModel{}, - &userSubscriptionModel{}, - ) - if err != nil { - return err - } - - // 创建默认分组(简易模式支持) - if err := ensureDefaultGroups(db); err != nil { - return err - } - - // 修复无效的过期时间(年份超过 2099 会导致 JSON 序列化失败) - return fixInvalidExpiresAt(db) -} - -// fixInvalidExpiresAt 修复 user_subscriptions 表中无效的过期时间 -func fixInvalidExpiresAt(db *gorm.DB) error { - result := db.Model(&userSubscriptionModel{}). - Where("expires_at > ?", maxExpiresAt). - Update("expires_at", maxExpiresAt) - if result.Error != nil { - return result.Error - } - if result.RowsAffected > 0 { - log.Printf("[AutoMigrate] Fixed %d subscriptions with invalid expires_at (year > 2099)", result.RowsAffected) - } - return nil -} - -// ensureDefaultGroups 确保默认分组存在(简易模式支持) -// 为每个平台创建一个默认分组,配置最大权限以确保简易模式下不受限制 -func ensureDefaultGroups(db *gorm.DB) error { - defaultGroups := []struct { - name string - platform string - description string - }{ - { - name: "anthropic-default", - platform: "anthropic", - description: "Default group for Anthropic accounts (Simple Mode)", - }, - { - name: "openai-default", - platform: "openai", - description: "Default group for OpenAI accounts (Simple Mode)", - }, - { - name: "gemini-default", - platform: "gemini", - description: "Default group for Gemini accounts (Simple Mode)", - }, - } - - for _, dg := range defaultGroups { - var count int64 - if err := db.Model(&groupModel{}).Where("name = ?", dg.name).Count(&count).Error; err != nil { - return err - } - - if count == 0 { - group := &groupModel{ - Name: dg.name, - Description: dg.description, - Platform: dg.platform, - RateMultiplier: 1.0, - IsExclusive: false, - Status: "active", - SubscriptionType: "standard", - } - if err := db.Create(group).Error; err != nil { - log.Printf("[AutoMigrate] Failed to create default group %s: %v", dg.name, err) - return err - } - log.Printf("[AutoMigrate] Created default group: %s (platform: %s)", dg.name, dg.platform) - } - } - - return nil -}