Files

58 lines
2.0 KiB
Go

package recharge
import (
"time"
"gorm.io/gorm"
"kra/internal/data/ledger"
"kra/pkg/database/migration"
)
// rechargeOrderV1 freezes the original schema owned by the first migration.
type rechargeOrderV1 struct {
ID uint `gorm:"primaryKey"`
OrderNo string `gorm:"size:80;uniqueIndex"`
UserID uint `gorm:"index"`
Diamonds int64
AmountCents int64
RateCents int64
PaymentMethod string `gorm:"size:40;index"`
Status string `gorm:"size:30;index"`
CreatedAt time.Time `gorm:"index"`
UpdatedAt time.Time
CompletedAt *time.Time
}
func (rechargeOrderV1) TableName() string { return "live_recharge_orders" }
func Migrations() []migration.Step {
return []migration.Step{{ID: "202609190003_recharge_schema", Migrate: func(db *gorm.DB) error {
if err := migration.CreateMissingTables(db, &ledger.RechargePlanPO{}, &rechargeOrderV1{}); err != nil {
return err
}
var n int64
if err := db.Model(&ledger.RechargePlanPO{}).Count(&n).Error; err != nil {
return err
}
if n > 0 {
return nil
}
return db.Create(&[]ledger.RechargePlanPO{{Sort: 1, Diamonds: 60, AmountCents: 600, Enabled: true}, {Sort: 2, Diamonds: 300, AmountCents: 3000, Enabled: true}, {Sort: 3, Diamonds: 980, AmountCents: 9800, Enabled: true}, {Sort: 4, Diamonds: 1980, AmountCents: 19800, Enabled: true}, {Sort: 5, Diamonds: 3280, AmountCents: 32800, Enabled: true}, {Sort: 6, Diamonds: 6980, AmountCents: 69800, Enabled: true}}).Error
}}, {ID: "202609190007_recharge_payment_unification", Migrate: func(db *gorm.DB) error {
migrator := db.Migrator()
if !migrator.HasColumn(&ledger.RechargeOrderPO{}, "CreditedAt") {
if err := migrator.AddColumn(&ledger.RechargeOrderPO{}, "CreditedAt"); err != nil {
return err
}
}
for _, column := range []string{"payment_method", "status", "completed_at"} {
if migrator.HasColumn(&rechargeOrderV1{}, column) {
if err := migrator.DropColumn(&rechargeOrderV1{}, column); err != nil {
return err
}
}
}
return nil
}}}
}