优化表结构,重构模型,重新实现基于白银网关的提取节点流程

This commit is contained in:
2025-11-24 18:44:06 +08:00
parent 9a574f55cb
commit cb2a963a37
142 changed files with 6528 additions and 5808 deletions

View File

@@ -1,11 +1,10 @@
package main
import (
"strings"
m "platform/web/models"
"gorm.io/driver/postgres"
"gorm.io/gen"
"gorm.io/gen/field"
"gorm.io/gorm"
"gorm.io/gorm/schema"
)
@@ -26,149 +25,42 @@ func main() {
g = gen.NewGenerator(gen.Config{
OutPath: "web/queries",
ModelPkgPath: "models",
FieldNullable: true,
FieldSignable: true,
FieldWithTypeTag: true,
Mode: gen.WithDefaultQuery | gen.WithoutContext,
})
g.UseDB(db)
// 公共参数
common := []gen.ModelOpt{
gen.FieldModify(func(field gen.Field) gen.Field {
switch {
case field.Type == "*time.Time":
field.Type = "*orm.LocalDateTime"
case field.Type == "time.Time":
field.Type = "orm.LocalDateTime"
case strings.Contains(field.Tags(), "numeric"):
field.Type = "decimal.Decimal"
}
return field
}),
gen.FieldRename("contact_qq", "ContactQQ"),
gen.FieldRename("ua", "UA"),
}
// 生成模型
customs := make(map[string]any)
// resource
resourceShort := g.GenerateModel("resource_short", common...)
customs["resource_short"] = resourceShort
resourceLong := g.GenerateModel("resource_long", common...)
customs["resource_long"] = resourceLong
resource := g.GenerateModel("resource", append(common,
gen.FieldRelate(field.HasOne, "Short", resourceShort, &field.RelateConfig{
RelatePointer: true,
GORMTag: field.GormTag{
"foreignKey": []string{"ResourceID"},
"references": []string{"ID"},
},
}),
gen.FieldRelate(field.HasOne, "Long", resourceLong, &field.RelateConfig{
RelatePointer: true,
GORMTag: field.GormTag{
"foreignKey": []string{"ResourceID"},
"references": []string{"ID"},
},
}),
)...)
customs["resource"] = resource
// trade
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
// proxy
edge := g.GenerateModel("edge", common...)
customs["edge"] = edge
proxy := g.GenerateModel("proxy", append(common,
gen.FieldRelate(field.HasMany, "Edges", edge, &field.RelateConfig{
GORMTag: field.GormTag{
"foreignKey": []string{"ProxyID"},
"references": []string{"ID"},
},
}),
)...)
customs["proxy"] = proxy
// session
user := g.GenerateModel("user", common...)
customs["user"] = user
admin := g.GenerateModel("admin", common...)
customs["admin"] = admin
client := g.GenerateModel("client", common...)
customs["client"] = client
session := g.GenerateModel("session", append(common,
gen.FieldRelate(field.BelongsTo, "User", user, &field.RelateConfig{
RelatePointer: true,
GORMTag: field.GormTag{
"foreignKey": []string{"UserID"},
},
}),
gen.FieldRelate(field.BelongsTo, "Admin", admin, &field.RelateConfig{
RelatePointer: true,
GORMTag: field.GormTag{
"foreignKey": []string{"AdminID"},
},
}),
gen.FieldRelate(field.BelongsTo, "Client", client, &field.RelateConfig{
RelatePointer: true,
GORMTag: field.GormTag{
"foreignKey": []string{"ClientID"},
"belongsTo": []string{"ID"},
},
}),
)...)
customs["session"] = session
// 生成表结构
tables, _ := db.Migrator().GetTables()
models := make([]any, len(tables))
for i, name := range tables {
if customs[name] != nil {
models[i] = customs[name]
} else {
models[i] = g.GenerateModel(name, common...)
}
}
g.ApplyBasic(models...)
// 生成查询
g.ApplyBasic(
m.Admin{},
m.AdminRole{},
m.Announcement{},
m.Bill{},
m.Channel{},
m.Client{},
m.Coupon{},
m.Edge{},
m.LinkAdminRole{},
m.LinkAdminRolePermission{},
m.LinkClientPermission{},
m.LinkUserRole{},
m.LinkUserRolePermission{},
m.LogsLogin{},
m.LogsRequest{},
m.LogsUserBandwidth{},
m.LogsUserUsage{},
m.Permission{},
m.Product{},
m.Proxy{},
m.Refund{},
m.Resource{},
m.ResourceLong{},
m.ResourceShort{},
m.Session{},
m.Trade{},
m.User{},
m.UserRole{},
m.Whitelist{},
)
g.Execute()
}