Files
platform/cmd/gen/main.go

110 lines
2.4 KiB
Go
Raw Normal View History

2025-03-18 10:13:57 +08:00
package main
import (
"gorm.io/driver/postgres"
"gorm.io/gen"
2025-04-03 13:30:57 +08:00
"gorm.io/gen/field"
2025-03-18 10:13:57 +08:00
"gorm.io/gorm"
"gorm.io/gorm/schema"
)
var g *gen.Generator
2025-03-18 10:13:57 +08:00
func main() {
// 初始化
2025-03-18 10:13:57 +08:00
db, _ := gorm.Open(
postgres.Open("host=localhost user=test password=test dbname=app port=5432 sslmode=disable TimeZone=Asia/Shanghai"),
&gorm.Config{
NamingStrategy: schema.NamingStrategy{
SingularTable: true,
},
},
)
2025-03-18 17:57:07 +08:00
g = gen.NewGenerator(gen.Config{
2025-03-18 17:57:07 +08:00
OutPath: "web/queries",
ModelPkgPath: "models",
Mode: gen.WithDefaultQuery | gen.WithoutContext,
})
2025-03-18 10:13:57 +08:00
g.UseDB(db)
// 生成模型
common := []gen.ModelOpt{
gen.FieldModify(func(field gen.Field) gen.Field {
if field.Type == "time.Time" {
field.Type = "common.LocalDateTime"
}
return field
}),
}
customs := make(map[string]any)
resourcePss := g.GenerateModel("resource_pss", common...)
customs["resource_pss"] = resourcePss
resource := g.GenerateModel("resource", append(common,
gen.FieldRelate(field.HasOne, "Pss", resourcePss, &field.RelateConfig{
RelatePointer: true,
GORMTag: field.GormTag{
"foreignKey": []string{"ResourceID"},
"references": []string{"ID"},
},
}),
)...)
customs["resource"] = resource
2025-04-03 13:30:57 +08:00
trade := g.GenerateModel("trade", common...)
customs["trade"] = trade
refund := g.GenerateModel("refund", common...)
customs["refund"] = refund
bill := g.GenerateModel("bill", append(common,
gen.FieldRelate(field.BelongsTo, "Trade", trade, &field.RelateConfig{
2025-04-03 13:30:57 +08:00
RelatePointer: true,
GORMTag: field.GormTag{
"foreignKey": []string{"TradeID"},
},
2025-04-03 13:30:57 +08:00
}),
gen.FieldRelate(field.BelongsTo, "Refund", refund, &field.RelateConfig{
2025-04-03 13:30:57 +08:00
RelatePointer: true,
GORMTag: field.GormTag{
"foreignKey": []string{"RefundID"},
},
2025-04-03 13:30:57 +08:00
}),
gen.FieldRelate(field.BelongsTo, "Resource", resource, &field.RelateConfig{
2025-04-03 13:30:57 +08:00
RelatePointer: true,
GORMTag: field.GormTag{
"foreignKey": []string{"ResourceID"},
},
2025-04-03 13:30:57 +08:00
}),
)...)
customs["bill"] = bill
tables, _ := db.Migrator().GetTables()
models := make([]interface{}, len(tables))
for i, name := range tables {
if customs[name] != nil {
models[i] = customs[name]
continue
}
models[i] = genBasic(name, common...)
}
g.ApplyBasic(models...)
// 生成查询
2025-04-03 13:30:57 +08:00
2025-03-18 10:13:57 +08:00
g.Execute()
}
func genBasic(name string, opts ...gen.ModelOpt) any {
return g.GenerateModel(name,
gen.FieldType("created_at", "common.LocalDateTime"),
gen.FieldType("updated_at", "common.LocalDateTime"),
)
}