88 lines
2.6 KiB
Go
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
|
|
}
|