feat: integrate unified payment and wallet refunds

This commit is contained in:
2026-08-02 23:24:32 +08:00
parent f0b8af0bc8
commit 82a2106a97
64 changed files with 1519 additions and 254 deletions

View File

@@ -153,7 +153,7 @@ func writeDeliveryResourceContract(output io.Writer) error {
}
func writeMockData() error {
config.New("platform")
config.New("heqi")
if config.Spec.Databases == nil {
return fmt.Errorf("database configuration is required")
}
@@ -175,7 +175,7 @@ func writeMockData() error {
}
func migrateDatabase() error {
config.New("platform")
config.New("heqi")
if config.Spec.Databases == nil {
return fmt.Errorf("database configuration is required")
}
@@ -196,6 +196,9 @@ func migrateDatabase() error {
if err := prepareAdditiveMigrations(migrationDatabase, driver); err != nil {
return err
}
if err := resetLegacyPaymentSchema(migrationDatabase, driver); err != nil {
return err
}
const legacyPhoneIndex = "idx_platform_account_phone"
if migrationDatabase.Migrator().HasIndex(&models.PlatformAccount{}, legacyPhoneIndex) {
if err := migrationDatabase.Migrator().DropIndex(&models.PlatformAccount{}, legacyPhoneIndex); err != nil {
@@ -213,6 +216,30 @@ func migrateDatabase() error {
return initdb.New(databaseService)
}
// resetLegacyPaymentSchema 执行经业务明确授权的开发期破坏性支付模型重置,不迁移旧支付或退款历史。
func resetLegacyPaymentSchema(databaseService *gorm.DB, driver string) error {
statements := []string{}
if driver == "postgres" {
statements = append(statements,
`DROP TABLE IF EXISTS "wallet_refund" CASCADE`,
`DROP TABLE IF EXISTS "wallet_payment" CASCADE`,
`DROP TABLE IF EXISTS "gasorder_payment" CASCADE`,
)
} else {
statements = append(statements,
`DROP TABLE IF EXISTS wallet_refund`,
`DROP TABLE IF EXISTS wallet_payment`,
`DROP TABLE IF EXISTS gasorder_payment`,
)
}
for _, statement := range statements {
if err := databaseService.Exec(statement).Error; err != nil {
return fmt.Errorf("reset legacy payment schema: %w", err)
}
}
return nil
}
// prepareAdditiveMigrations 先处理无法由 GORM AutoMigrate 安全完成的新增非空字段。
// 旧轨迹没有服务端接收时间时,以定位发生时间(再退化到创建时间)回填,
// 避免直接 ADD NOT NULL 因历史行存在而中断整库迁移。

View File

@@ -1,4 +1,4 @@
// 平台 HTTP API 进程入口,沿用 sample/server 的 BSM 启动规范。
// 平台 HTTP API 进程入口,沿用仓库统一的 BSM 启动规范。
package main
import (