feat: implement new structure
This commit is contained in:
@@ -28,9 +28,9 @@ func newOrder(db *gorm.DB, opts ...gen.DOOption) orderQuery {
|
||||
_orderQuery.ID = field.NewInt64(tableName, "id")
|
||||
_orderQuery.TenantID = field.NewInt64(tableName, "tenant_id")
|
||||
_orderQuery.UserID = field.NewInt64(tableName, "user_id")
|
||||
_orderQuery.Type = field.NewField(tableName, "type")
|
||||
_orderQuery.Status = field.NewField(tableName, "status")
|
||||
_orderQuery.Currency = field.NewField(tableName, "currency")
|
||||
_orderQuery.Type = field.NewString(tableName, "type")
|
||||
_orderQuery.Status = field.NewString(tableName, "status")
|
||||
_orderQuery.Currency = field.NewString(tableName, "currency")
|
||||
_orderQuery.AmountOriginal = field.NewInt64(tableName, "amount_original")
|
||||
_orderQuery.AmountDiscount = field.NewInt64(tableName, "amount_discount")
|
||||
_orderQuery.AmountPaid = field.NewInt64(tableName, "amount_paid")
|
||||
@@ -43,11 +43,6 @@ func newOrder(db *gorm.DB, opts ...gen.DOOption) orderQuery {
|
||||
_orderQuery.RefundReason = field.NewString(tableName, "refund_reason")
|
||||
_orderQuery.CreatedAt = field.NewTime(tableName, "created_at")
|
||||
_orderQuery.UpdatedAt = field.NewTime(tableName, "updated_at")
|
||||
_orderQuery.Items = orderQueryHasManyItems{
|
||||
db: db.Session(&gorm.Session{}),
|
||||
|
||||
RelationField: field.NewRelation("Items", "OrderItem"),
|
||||
}
|
||||
|
||||
_orderQuery.fillFieldMap()
|
||||
|
||||
@@ -58,25 +53,24 @@ type orderQuery struct {
|
||||
orderQueryDo orderQueryDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Int64 // 主键ID:自增;用于关联订单明细、账本流水、权益等
|
||||
TenantID field.Int64 // 租户ID:多租户隔离关键字段;所有查询/写入必须限定 tenant_id
|
||||
UserID field.Int64 // 用户ID:下单用户(buyer);余额扣款与权益归属以该 user_id 为准
|
||||
Type field.Field // 订单类型:content_purchase(购买内容)等;当前默认 content_purchase
|
||||
Status field.Field // 订单状态:created/paid/refunding/refunded/canceled/failed;状态变更需与账本/权益保持一致
|
||||
Currency field.Field // 币种:当前固定 CNY;金额单位为分
|
||||
AmountOriginal field.Int64 // 原价金额:分;未折扣前金额(用于展示与对账)
|
||||
AmountDiscount field.Int64 // 优惠金额:分;amount_paid = amount_original - amount_discount(下单时快照)
|
||||
AmountPaid field.Int64 // 实付金额:分;从租户内余额扣款的金额(下单时快照)
|
||||
Snapshot field.JSONB // 订单快照:JSON;建议包含 content 标题/定价/折扣、请求来源等,避免改价影响历史展示
|
||||
IdempotencyKey field.String // 幂等键:同一租户同一用户同一业务请求可用;用于防重复下单/重复扣款(建议由客户端生成)
|
||||
PaidAt field.Time // 支付/扣款完成时间:余额支付在 debit_purchase 成功后写入
|
||||
RefundedAt field.Time // 退款完成时间:退款落账成功后写入
|
||||
RefundForced field.Bool // 是否强制退款:true 表示租户管理侧绕过时间窗执行退款(需审计)
|
||||
RefundOperatorUserID field.Int64 // 退款操作人用户ID:租户管理员/系统;用于审计与追责
|
||||
RefundReason field.String // 退款原因:后台/用户发起退款的原因说明;用于审计
|
||||
CreatedAt field.Time // 创建时间:默认 now();用于审计与排序
|
||||
UpdatedAt field.Time // 更新时间:默认 now();状态变更/退款写入时更新
|
||||
Items orderQueryHasManyItems
|
||||
ID field.Int64
|
||||
TenantID field.Int64
|
||||
UserID field.Int64
|
||||
Type field.String
|
||||
Status field.String
|
||||
Currency field.String
|
||||
AmountOriginal field.Int64
|
||||
AmountDiscount field.Int64
|
||||
AmountPaid field.Int64
|
||||
Snapshot field.JSONB
|
||||
IdempotencyKey field.String
|
||||
PaidAt field.Time
|
||||
RefundedAt field.Time
|
||||
RefundForced field.Bool
|
||||
RefundOperatorUserID field.Int64
|
||||
RefundReason field.String
|
||||
CreatedAt field.Time
|
||||
UpdatedAt field.Time
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
@@ -96,9 +90,9 @@ func (o *orderQuery) updateTableName(table string) *orderQuery {
|
||||
o.ID = field.NewInt64(table, "id")
|
||||
o.TenantID = field.NewInt64(table, "tenant_id")
|
||||
o.UserID = field.NewInt64(table, "user_id")
|
||||
o.Type = field.NewField(table, "type")
|
||||
o.Status = field.NewField(table, "status")
|
||||
o.Currency = field.NewField(table, "currency")
|
||||
o.Type = field.NewString(table, "type")
|
||||
o.Status = field.NewString(table, "status")
|
||||
o.Currency = field.NewString(table, "currency")
|
||||
o.AmountOriginal = field.NewInt64(table, "amount_original")
|
||||
o.AmountDiscount = field.NewInt64(table, "amount_discount")
|
||||
o.AmountPaid = field.NewInt64(table, "amount_paid")
|
||||
@@ -141,7 +135,7 @@ func (o *orderQuery) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
}
|
||||
|
||||
func (o *orderQuery) fillFieldMap() {
|
||||
o.fieldMap = make(map[string]field.Expr, 19)
|
||||
o.fieldMap = make(map[string]field.Expr, 18)
|
||||
o.fieldMap["id"] = o.ID
|
||||
o.fieldMap["tenant_id"] = o.TenantID
|
||||
o.fieldMap["user_id"] = o.UserID
|
||||
@@ -160,103 +154,18 @@ func (o *orderQuery) fillFieldMap() {
|
||||
o.fieldMap["refund_reason"] = o.RefundReason
|
||||
o.fieldMap["created_at"] = o.CreatedAt
|
||||
o.fieldMap["updated_at"] = o.UpdatedAt
|
||||
|
||||
}
|
||||
|
||||
func (o orderQuery) clone(db *gorm.DB) orderQuery {
|
||||
o.orderQueryDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
o.Items.db = db.Session(&gorm.Session{Initialized: true})
|
||||
o.Items.db.Statement.ConnPool = db.Statement.ConnPool
|
||||
return o
|
||||
}
|
||||
|
||||
func (o orderQuery) replaceDB(db *gorm.DB) orderQuery {
|
||||
o.orderQueryDo.ReplaceDB(db)
|
||||
o.Items.db = db.Session(&gorm.Session{})
|
||||
return o
|
||||
}
|
||||
|
||||
type orderQueryHasManyItems struct {
|
||||
db *gorm.DB
|
||||
|
||||
field.RelationField
|
||||
}
|
||||
|
||||
func (a orderQueryHasManyItems) Where(conds ...field.Expr) *orderQueryHasManyItems {
|
||||
if len(conds) == 0 {
|
||||
return &a
|
||||
}
|
||||
|
||||
exprs := make([]clause.Expression, 0, len(conds))
|
||||
for _, cond := range conds {
|
||||
exprs = append(exprs, cond.BeCond().(clause.Expression))
|
||||
}
|
||||
a.db = a.db.Clauses(clause.Where{Exprs: exprs})
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a orderQueryHasManyItems) WithContext(ctx context.Context) *orderQueryHasManyItems {
|
||||
a.db = a.db.WithContext(ctx)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a orderQueryHasManyItems) Session(session *gorm.Session) *orderQueryHasManyItems {
|
||||
a.db = a.db.Session(session)
|
||||
return &a
|
||||
}
|
||||
|
||||
func (a orderQueryHasManyItems) Model(m *Order) *orderQueryHasManyItemsTx {
|
||||
return &orderQueryHasManyItemsTx{a.db.Model(m).Association(a.Name())}
|
||||
}
|
||||
|
||||
func (a orderQueryHasManyItems) Unscoped() *orderQueryHasManyItems {
|
||||
a.db = a.db.Unscoped()
|
||||
return &a
|
||||
}
|
||||
|
||||
type orderQueryHasManyItemsTx struct{ tx *gorm.Association }
|
||||
|
||||
func (a orderQueryHasManyItemsTx) Find() (result []*OrderItem, err error) {
|
||||
return result, a.tx.Find(&result)
|
||||
}
|
||||
|
||||
func (a orderQueryHasManyItemsTx) Append(values ...*OrderItem) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Append(targetValues...)
|
||||
}
|
||||
|
||||
func (a orderQueryHasManyItemsTx) Replace(values ...*OrderItem) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Replace(targetValues...)
|
||||
}
|
||||
|
||||
func (a orderQueryHasManyItemsTx) Delete(values ...*OrderItem) (err error) {
|
||||
targetValues := make([]interface{}, len(values))
|
||||
for i, v := range values {
|
||||
targetValues[i] = v
|
||||
}
|
||||
return a.tx.Delete(targetValues...)
|
||||
}
|
||||
|
||||
func (a orderQueryHasManyItemsTx) Clear() error {
|
||||
return a.tx.Clear()
|
||||
}
|
||||
|
||||
func (a orderQueryHasManyItemsTx) Count() int64 {
|
||||
return a.tx.Count()
|
||||
}
|
||||
|
||||
func (a orderQueryHasManyItemsTx) Unscoped() *orderQueryHasManyItemsTx {
|
||||
a.tx = a.tx.Unscoped()
|
||||
return &a
|
||||
}
|
||||
|
||||
type orderQueryDo struct{ gen.DO }
|
||||
|
||||
func (o orderQueryDo) Debug() *orderQueryDo {
|
||||
|
||||
Reference in New Issue
Block a user