Files
verify/backend/cmd/scripts/migrate_to_balance.go
T
2026-04-27 17:22:56 +08:00

88 lines
2.6 KiB
Go

package main
import (
"fmt"
"log"
"verification-platform-backend/internal/database"
"gorm.io/gorm"
)
func main() {
database.Init()
db := database.DB
log.Println("开始迁移:统一收费模式为余额")
if err := addColumnsSQLite(db); err != nil {
log.Fatalf("添加列失败: %v", err)
}
if err := updateBillingType(db); err != nil {
log.Fatalf("更新billing_type失败: %v", err)
}
log.Println("迁移完成!")
}
func columnExists(db *gorm.DB, table, column string) bool {
var count int64
db.Raw("SELECT COUNT(*) FROM pragma_table_info(?) WHERE name = ?", table, column).Scan(&count)
return count > 0
}
func addColumnsSQLite(db *gorm.DB) error {
log.Println("添加新列...")
if !columnExists(db, "app_users", "balance") {
if err := db.Exec("ALTER TABLE app_users ADD COLUMN balance DECIMAL(10,2) DEFAULT 0").Error; err != nil {
return fmt.Errorf("添加app_users.balance列失败: %w", err)
}
log.Println("添加app_users.balance列成功")
} else {
log.Println("app_users.balance列已存在")
}
if !columnExists(db, "applications", "deduction_cycle") {
if err := db.Exec("ALTER TABLE applications ADD COLUMN deduction_cycle VARCHAR(20) DEFAULT 'per_use'").Error; err != nil {
return fmt.Errorf("添加applications.deduction_cycle列失败: %w", err)
}
log.Println("添加applications.deduction_cycle列成功")
} else {
log.Println("applications.deduction_cycle列已存在")
}
if !columnExists(db, "applications", "deduction_amount") {
if err := db.Exec("ALTER TABLE applications ADD COLUMN deduction_amount DECIMAL(10,2) DEFAULT 1").Error; err != nil {
return fmt.Errorf("添加applications.deduction_amount列失败: %w", err)
}
log.Println("添加applications.deduction_amount列成功")
} else {
log.Println("applications.deduction_amount列已存在")
}
if !columnExists(db, "applications", "trial_balance") {
if err := db.Exec("ALTER TABLE applications ADD COLUMN trial_balance DECIMAL(10,2) DEFAULT 0").Error; err != nil {
return fmt.Errorf("添加applications.trial_balance列失败: %w", err)
}
log.Println("添加applications.trial_balance列成功")
} else {
log.Println("applications.trial_balance列已存在")
}
return nil
}
func updateBillingType(db *gorm.DB) error {
log.Println("更新billing_type...")
result := db.Exec("UPDATE applications SET billing_type = 'count' WHERE billing_type = 'point'")
if result.Error != nil {
return fmt.Errorf("更新billing_type失败: %w", result.Error)
}
log.Printf("更新了 %d 个应用的billing_type从point到count", result.RowsAffected)
return nil
}