重构 orm 代码生成逻辑,实现 bill 接口,优化请求字段检查与 list total 查询逻辑
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
m "platform/web/models"
|
||||
|
||||
"gorm.io/driver/postgres"
|
||||
"gorm.io/gen"
|
||||
"gorm.io/gen/field"
|
||||
@@ -10,7 +8,12 @@ import (
|
||||
"gorm.io/gorm/schema"
|
||||
)
|
||||
|
||||
var g *gen.Generator
|
||||
|
||||
func main() {
|
||||
|
||||
// 初始化
|
||||
|
||||
db, _ := gorm.Open(
|
||||
postgres.Open("host=localhost user=test password=test dbname=app port=5432 sslmode=disable TimeZone=Asia/Shanghai"),
|
||||
&gorm.Config{
|
||||
@@ -20,32 +23,87 @@ func main() {
|
||||
},
|
||||
)
|
||||
|
||||
g := gen.NewGenerator(gen.Config{
|
||||
g = gen.NewGenerator(gen.Config{
|
||||
OutPath: "web/queries",
|
||||
ModelPkgPath: "models",
|
||||
Mode: gen.WithDefaultQuery | gen.WithoutContext,
|
||||
})
|
||||
g.UseDB(db)
|
||||
|
||||
models := g.GenerateAllTable(
|
||||
gen.FieldType("created_at", "common.LocalDateTime"),
|
||||
gen.FieldType("updated_at", "common.LocalDateTime"),
|
||||
gen.FieldType("deleted_at", "common.LocalDateTime"),
|
||||
)
|
||||
// 生成模型
|
||||
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
|
||||
|
||||
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{
|
||||
RelatePointer: true,
|
||||
GORMTag: field.GormTag{
|
||||
"foreignKey": []string{"TradeID"},
|
||||
},
|
||||
}),
|
||||
gen.FieldRelate(field.BelongsTo, "Refund", refund, &field.RelateConfig{
|
||||
RelatePointer: true,
|
||||
GORMTag: field.GormTag{
|
||||
"foreignKey": []string{"RefundID"},
|
||||
},
|
||||
}),
|
||||
gen.FieldRelate(field.BelongsTo, "Resource", resource, &field.RelateConfig{
|
||||
RelatePointer: true,
|
||||
GORMTag: field.GormTag{
|
||||
"foreignKey": []string{"ResourceID"},
|
||||
},
|
||||
}),
|
||||
)...)
|
||||
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...)
|
||||
|
||||
modelChannel := g.GenerateModel("channel",
|
||||
gen.FieldRelateModel(field.BelongsTo, "Node", &m.Node{}, &field.RelateConfig{
|
||||
RelatePointer: true,
|
||||
}),
|
||||
gen.FieldRelateModel(field.BelongsTo, "User", &m.User{}, &field.RelateConfig{
|
||||
RelatePointer: true,
|
||||
}),
|
||||
gen.FieldRelateModel(field.BelongsTo, "Proxy", &m.Proxy{}, &field.RelateConfig{
|
||||
RelatePointer: true,
|
||||
}),
|
||||
)
|
||||
g.ApplyBasic(modelChannel)
|
||||
// 生成查询
|
||||
|
||||
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"),
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user