mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-09-21 18:20:50 +00:00
sys_app is one row per installed application. It is physically deleted on uninstall rather than following the millisecond soft-delete marker the other sys_ tables use: an installed-app registry has no "deleted by accident, needs recovering" case, and a physical delete is what lets the same code be installed again afterwards. status is installing/installed/failed rather than a boolean, because an install spanning several migration files is not atomic on MySQL - DDL commits implicitly, so a run can stop in the middle. failed_version and last_error are diagnostic snapshots for a person to read; nothing may decide anything from them, and the field comments say so. Where to resume is answered by sys_migration, which cannot drift from what was actually applied. sys_app_casbin_grant records which casbin_rule rows an install created, keyed by casbin_rule's own natural key. That table is not extended instead: gorm-adapter's SavePolicy truncates and reloads it from an in-memory model, which would drop any column added here without a word. Built against SQLite, MySQL 8.0 and PostgreSQL 15.
43 lines
1.5 KiB
Go
43 lines
1.5 KiB
Go
package version
|
|
|
|
import (
|
|
"runtime"
|
|
|
|
"gorm.io/gorm"
|
|
|
|
adminmodels "go-admin/app/admin/models"
|
|
"go-admin/cmd/migrate/migration"
|
|
common "go-admin/common/models"
|
|
)
|
|
|
|
// Create sys_app (PRD 008 F2) and sys_app_casbin_grant (F4/F6's casbin
|
|
// attribution ledger - see the design doc's (docs-prd/008-应用清单与安装器/
|
|
// 数据库变更.md) §2.2/§3 for why casbin_rule itself is not touched:
|
|
// gorm-adapter's SavePolicyCtx truncates and reloads that table from its
|
|
// in-memory model, and any column this migration added to it would be
|
|
// silently zeroed the first time anything calls SavePolicy.
|
|
//
|
|
// Ordered after 1786700003000 (the soft-delete conversion), so importing
|
|
// cmd/migrate/migration/models is banned here - see
|
|
// schema_coverage_test.go's TestPostConversionMigrationsAvoidFrozenSeedModels.
|
|
// Both new tables are AutoMigrate'd from their runtime model shape under
|
|
// app/admin/models directly, which is also why neither one is added to
|
|
// 1786700003000's frozen softDeleteTables list: neither embeds
|
|
// common.ModelTime in the first place (see design doc §1.1).
|
|
func init() {
|
|
_, fileName, _, _ := runtime.Caller(0)
|
|
migration.Migrate.SetVersion(migration.GetFilename(fileName), _1786700007000AppRegistryTables)
|
|
}
|
|
|
|
func _1786700007000AppRegistryTables(db *gorm.DB, version string) error {
|
|
return db.Transaction(func(tx *gorm.DB) error {
|
|
if err := tx.Migrator().AutoMigrate(
|
|
new(adminmodels.SysApp),
|
|
new(adminmodels.SysAppCasbinGrant),
|
|
); err != nil {
|
|
return err
|
|
}
|
|
return tx.Create(&common.Migration{Version: version}).Error
|
|
})
|
|
}
|