58 lines
2.0 KiB
Go
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
|
|
}}}
|
|
}
|