fix: harden platform runtime and menu navigation

This commit is contained in:
david
2026-07-29 18:38:01 +08:00
parent fa21507a68
commit 5af729326c
7 changed files with 131 additions and 12 deletions

View File

@@ -12,9 +12,11 @@ import (
"git.apinb.com/heqiapp/platforms/backend/api/internal/config"
"git.apinb.com/heqiapp/platforms/backend/api/internal/initdb"
"git.apinb.com/heqiapp/platforms/backend/api/internal/logic/platform"
"git.apinb.com/heqiapp/platforms/backend/api/internal/models"
"git.apinb.com/heqiapp/platforms/backend/api/internal/routers"
"git.apinb.com/heqiapp/platforms/backend/api/internal/seed"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
const serviceKey = "heqi"
@@ -38,6 +40,12 @@ func main() {
os.Exit(1)
}
fmt.Println("mock data written successfully")
case "migrate":
if err := migrateDatabase(); err != nil {
fmt.Fprintln(os.Stderr, err)
os.Exit(1)
}
fmt.Println("database migrated successfully")
default:
fmt.Fprintf(os.Stderr, "unknown command: %s\n", os.Args[1])
printUsage()
@@ -46,7 +54,7 @@ func main() {
}
func printUsage() {
fmt.Fprintln(os.Stderr, "usage: platform-cli <version|resource-contract|mock-data>")
fmt.Fprintln(os.Stderr, "usage: platform-cli <version|resource-contract|migrate|mock-data>")
}
type route struct {
@@ -110,3 +118,40 @@ func writeMockData() error {
}
return nil
}
func migrateDatabase() error {
config.New("platform")
if config.Spec.Databases == nil {
return fmt.Errorf("database configuration is required")
}
var migrationDatabase interface {
Migrator() gorm.Migrator
}
var err error
switch strings.ToLower(config.Spec.Databases.Driver) {
case "postgres":
migrationDatabase, err = database.NewPostgres(config.Spec.Databases.Source, nil)
case "mysql":
migrationDatabase, err = database.NewMysql(config.Spec.Databases.Source, nil)
default:
return fmt.Errorf("unsupported database driver: %s", config.Spec.Databases.Driver)
}
if err != nil {
return fmt.Errorf("connect database before migration: %w", err)
}
const legacyPhoneIndex = "idx_platform_account_phone"
if migrationDatabase.Migrator().HasIndex(&models.PlatformAccount{}, legacyPhoneIndex) {
if err := migrationDatabase.Migrator().DropIndex(&models.PlatformAccount{}, legacyPhoneIndex); err != nil {
return fmt.Errorf("drop legacy platform account phone index: %w", err)
}
}
databaseService, err := database.NewDatabase(
config.Spec.Databases.Driver,
config.Spec.Databases.Source,
nil,
)
if err != nil {
return fmt.Errorf("migrate database: %w", err)
}
return initdb.New(databaseService)
}

View File

@@ -11,10 +11,11 @@ import (
"time"
"git.apinb.com/bsm-sdk/core/infra"
"git.apinb.com/bsm-sdk/core/middleware"
sdkmiddleware "git.apinb.com/bsm-sdk/core/middleware"
"git.apinb.com/bsm-sdk/core/printer"
"git.apinb.com/heqiapp/platforms/backend/api/internal/config"
"git.apinb.com/heqiapp/platforms/backend/api/internal/impl"
appmiddleware "git.apinb.com/heqiapp/platforms/backend/api/internal/middleware"
"git.apinb.com/heqiapp/platforms/backend/api/internal/routers"
"github.com/gin-gonic/gin"
)
@@ -31,8 +32,8 @@ func main() {
// }
app := gin.Default()
middleware.Mode(app)
app.Use(middleware.Cors())
sdkmiddleware.Mode(app)
app.Use(appmiddleware.Cors())
app.Use(gin.Recovery())
app.HEAD("/", infra.Health)
routers.Register(serviceKey, app)