feat: add coupon support to orders and create user_coupons model
- Added CouponID field to Order model to track used coupons. - Updated order query generation to include CouponID. - Introduced UserCoupon model to manage user coupon associations. - Implemented query methods for UserCoupon to facilitate CRUD operations. - Updated query context and default query setup to include UserCoupon.
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
-- +goose Up
|
||||
-- +goose StatementBegin
|
||||
CREATE TABLE "coupons" (
|
||||
"id" BIGSERIAL PRIMARY KEY,
|
||||
"tenant_id" BIGINT NOT NULL DEFAULT 0, -- 租户ID
|
||||
"title" VARCHAR(255) NOT NULL, -- 优惠券标题
|
||||
"description" TEXT, -- 优惠券描述
|
||||
"type" VARCHAR(32) NOT NULL, -- 优惠券类型: fix_amount(固定金额), discount(折扣比率)
|
||||
"value" BIGINT NOT NULL, -- 优惠券面值 (固定金额为分,折扣比率为0-100)
|
||||
"min_order_amount" BIGINT NOT NULL DEFAULT 0, -- 最低订单金额门槛 (分)
|
||||
"max_discount" BIGINT, -- 最高抵扣金额 (分,针对折扣券)
|
||||
"total_quantity" INTEGER NOT NULL DEFAULT 0, -- 发行总量
|
||||
"used_quantity" INTEGER NOT NULL DEFAULT 0, -- 已使用数量
|
||||
"start_at" TIMESTAMPTZ, -- 开始生效时间
|
||||
"end_at" TIMESTAMPTZ, -- 过期失效时间
|
||||
"created_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX "idx_coupons_tenant_id" ON "coupons" ("tenant_id");
|
||||
|
||||
CREATE TABLE "user_coupons" (
|
||||
"id" BIGSERIAL PRIMARY KEY,
|
||||
"user_id" BIGINT NOT NULL, -- 用户ID
|
||||
"coupon_id" BIGINT NOT NULL, -- 优惠券ID
|
||||
"order_id" BIGINT, -- 使用该优惠券的订单ID
|
||||
"status" VARCHAR(32) NOT NULL DEFAULT 'unused', -- 状态: unused(未使用), used(已使用), expired(已过期)
|
||||
"used_at" TIMESTAMPTZ, -- 使用时间
|
||||
"created_at" TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX "idx_user_coupons_user_id" ON "user_coupons" ("user_id");
|
||||
CREATE INDEX "idx_user_coupons_coupon_id" ON "user_coupons" ("coupon_id");
|
||||
|
||||
-- Add CouponID to Orders table
|
||||
ALTER TABLE "orders" ADD COLUMN "coupon_id" BIGINT DEFAULT 0; -- 关联优惠券ID (0表示未使用)
|
||||
COMMENT ON COLUMN "orders"."coupon_id" IS '使用的优惠券ID (0表示未使用)';
|
||||
|
||||
-- +goose StatementEnd
|
||||
|
||||
-- +goose Down
|
||||
-- +goose StatementBegin
|
||||
ALTER TABLE "orders" DROP COLUMN IF EXISTS "coupon_id";
|
||||
DROP TABLE IF EXISTS "user_coupons";
|
||||
DROP TABLE IF EXISTS "coupons";
|
||||
-- +goose StatementEnd
|
||||
64
backend/database/models/coupons.gen.go
Normal file
64
backend/database/models/coupons.gen.go
Normal file
@@ -0,0 +1,64 @@
|
||||
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
|
||||
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
|
||||
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
|
||||
|
||||
package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"go.ipao.vip/gen"
|
||||
)
|
||||
|
||||
const TableNameCoupon = "coupons"
|
||||
|
||||
// Coupon mapped from table <coupons>
|
||||
type Coupon struct {
|
||||
ID int64 `gorm:"column:id;type:bigint;primaryKey;autoIncrement:true" json:"id"`
|
||||
TenantID int64 `gorm:"column:tenant_id;type:bigint;not null" json:"tenant_id"`
|
||||
Title string `gorm:"column:title;type:character varying(255);not null" json:"title"`
|
||||
Description string `gorm:"column:description;type:text" json:"description"`
|
||||
Type string `gorm:"column:type;type:character varying(32);not null" json:"type"`
|
||||
Value int64 `gorm:"column:value;type:bigint;not null" json:"value"`
|
||||
MinOrderAmount int64 `gorm:"column:min_order_amount;type:bigint;not null" json:"min_order_amount"`
|
||||
MaxDiscount int64 `gorm:"column:max_discount;type:bigint" json:"max_discount"`
|
||||
TotalQuantity int32 `gorm:"column:total_quantity;type:integer;not null" json:"total_quantity"`
|
||||
UsedQuantity int32 `gorm:"column:used_quantity;type:integer;not null" json:"used_quantity"`
|
||||
StartAt time.Time `gorm:"column:start_at;type:timestamp with time zone" json:"start_at"`
|
||||
EndAt time.Time `gorm:"column:end_at;type:timestamp with time zone" json:"end_at"`
|
||||
CreatedAt time.Time `gorm:"column:created_at;type:timestamp with time zone;not null;default:now()" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at;type:timestamp with time zone;not null;default:now()" json:"updated_at"`
|
||||
}
|
||||
|
||||
// Quick operations without importing query package
|
||||
// Update applies changed fields to the database using the default DB.
|
||||
func (m *Coupon) Update(ctx context.Context) (gen.ResultInfo, error) {
|
||||
return Q.Coupon.WithContext(ctx).Updates(m)
|
||||
}
|
||||
|
||||
// Save upserts the model using the default DB.
|
||||
func (m *Coupon) Save(ctx context.Context) error { return Q.Coupon.WithContext(ctx).Save(m) }
|
||||
|
||||
// Create inserts the model using the default DB.
|
||||
func (m *Coupon) Create(ctx context.Context) error { return Q.Coupon.WithContext(ctx).Create(m) }
|
||||
|
||||
// Delete removes the row represented by the model using the default DB.
|
||||
func (m *Coupon) Delete(ctx context.Context) (gen.ResultInfo, error) {
|
||||
return Q.Coupon.WithContext(ctx).Delete(m)
|
||||
}
|
||||
|
||||
// ForceDelete permanently deletes the row (ignores soft delete) using the default DB.
|
||||
func (m *Coupon) ForceDelete(ctx context.Context) (gen.ResultInfo, error) {
|
||||
return Q.Coupon.WithContext(ctx).Unscoped().Delete(m)
|
||||
}
|
||||
|
||||
// Reload reloads the model from database by its primary key and overwrites current fields.
|
||||
func (m *Coupon) Reload(ctx context.Context) error {
|
||||
fresh, err := Q.Coupon.WithContext(ctx).GetByID(m.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*m = *fresh
|
||||
return nil
|
||||
}
|
||||
511
backend/database/models/coupons.query.gen.go
Normal file
511
backend/database/models/coupons.query.gen.go
Normal file
@@ -0,0 +1,511 @@
|
||||
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
|
||||
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
|
||||
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
|
||||
|
||||
package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"go.ipao.vip/gen"
|
||||
"go.ipao.vip/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
)
|
||||
|
||||
func newCoupon(db *gorm.DB, opts ...gen.DOOption) couponQuery {
|
||||
_couponQuery := couponQuery{}
|
||||
|
||||
_couponQuery.couponQueryDo.UseDB(db, opts...)
|
||||
_couponQuery.couponQueryDo.UseModel(&Coupon{})
|
||||
|
||||
tableName := _couponQuery.couponQueryDo.TableName()
|
||||
_couponQuery.ALL = field.NewAsterisk(tableName)
|
||||
_couponQuery.ID = field.NewInt64(tableName, "id")
|
||||
_couponQuery.TenantID = field.NewInt64(tableName, "tenant_id")
|
||||
_couponQuery.Title = field.NewString(tableName, "title")
|
||||
_couponQuery.Description = field.NewString(tableName, "description")
|
||||
_couponQuery.Type = field.NewString(tableName, "type")
|
||||
_couponQuery.Value = field.NewInt64(tableName, "value")
|
||||
_couponQuery.MinOrderAmount = field.NewInt64(tableName, "min_order_amount")
|
||||
_couponQuery.MaxDiscount = field.NewInt64(tableName, "max_discount")
|
||||
_couponQuery.TotalQuantity = field.NewInt32(tableName, "total_quantity")
|
||||
_couponQuery.UsedQuantity = field.NewInt32(tableName, "used_quantity")
|
||||
_couponQuery.StartAt = field.NewTime(tableName, "start_at")
|
||||
_couponQuery.EndAt = field.NewTime(tableName, "end_at")
|
||||
_couponQuery.CreatedAt = field.NewTime(tableName, "created_at")
|
||||
_couponQuery.UpdatedAt = field.NewTime(tableName, "updated_at")
|
||||
|
||||
_couponQuery.fillFieldMap()
|
||||
|
||||
return _couponQuery
|
||||
}
|
||||
|
||||
type couponQuery struct {
|
||||
couponQueryDo couponQueryDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Int64
|
||||
TenantID field.Int64
|
||||
Title field.String
|
||||
Description field.String
|
||||
Type field.String
|
||||
Value field.Int64
|
||||
MinOrderAmount field.Int64
|
||||
MaxDiscount field.Int64
|
||||
TotalQuantity field.Int32
|
||||
UsedQuantity field.Int32
|
||||
StartAt field.Time
|
||||
EndAt field.Time
|
||||
CreatedAt field.Time
|
||||
UpdatedAt field.Time
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (c couponQuery) Table(newTableName string) *couponQuery {
|
||||
c.couponQueryDo.UseTable(newTableName)
|
||||
return c.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (c couponQuery) As(alias string) *couponQuery {
|
||||
c.couponQueryDo.DO = *(c.couponQueryDo.As(alias).(*gen.DO))
|
||||
return c.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (c *couponQuery) updateTableName(table string) *couponQuery {
|
||||
c.ALL = field.NewAsterisk(table)
|
||||
c.ID = field.NewInt64(table, "id")
|
||||
c.TenantID = field.NewInt64(table, "tenant_id")
|
||||
c.Title = field.NewString(table, "title")
|
||||
c.Description = field.NewString(table, "description")
|
||||
c.Type = field.NewString(table, "type")
|
||||
c.Value = field.NewInt64(table, "value")
|
||||
c.MinOrderAmount = field.NewInt64(table, "min_order_amount")
|
||||
c.MaxDiscount = field.NewInt64(table, "max_discount")
|
||||
c.TotalQuantity = field.NewInt32(table, "total_quantity")
|
||||
c.UsedQuantity = field.NewInt32(table, "used_quantity")
|
||||
c.StartAt = field.NewTime(table, "start_at")
|
||||
c.EndAt = field.NewTime(table, "end_at")
|
||||
c.CreatedAt = field.NewTime(table, "created_at")
|
||||
c.UpdatedAt = field.NewTime(table, "updated_at")
|
||||
|
||||
c.fillFieldMap()
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
func (c *couponQuery) QueryContext(ctx context.Context) (*couponQuery, *couponQueryDo) {
|
||||
return c, c.couponQueryDo.WithContext(ctx)
|
||||
}
|
||||
|
||||
func (c *couponQuery) WithContext(ctx context.Context) *couponQueryDo {
|
||||
return c.couponQueryDo.WithContext(ctx)
|
||||
}
|
||||
|
||||
func (c couponQuery) TableName() string { return c.couponQueryDo.TableName() }
|
||||
|
||||
func (c couponQuery) Alias() string { return c.couponQueryDo.Alias() }
|
||||
|
||||
func (c couponQuery) Columns(cols ...field.Expr) gen.Columns { return c.couponQueryDo.Columns(cols...) }
|
||||
|
||||
func (c *couponQuery) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := c.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (c *couponQuery) fillFieldMap() {
|
||||
c.fieldMap = make(map[string]field.Expr, 14)
|
||||
c.fieldMap["id"] = c.ID
|
||||
c.fieldMap["tenant_id"] = c.TenantID
|
||||
c.fieldMap["title"] = c.Title
|
||||
c.fieldMap["description"] = c.Description
|
||||
c.fieldMap["type"] = c.Type
|
||||
c.fieldMap["value"] = c.Value
|
||||
c.fieldMap["min_order_amount"] = c.MinOrderAmount
|
||||
c.fieldMap["max_discount"] = c.MaxDiscount
|
||||
c.fieldMap["total_quantity"] = c.TotalQuantity
|
||||
c.fieldMap["used_quantity"] = c.UsedQuantity
|
||||
c.fieldMap["start_at"] = c.StartAt
|
||||
c.fieldMap["end_at"] = c.EndAt
|
||||
c.fieldMap["created_at"] = c.CreatedAt
|
||||
c.fieldMap["updated_at"] = c.UpdatedAt
|
||||
}
|
||||
|
||||
func (c couponQuery) clone(db *gorm.DB) couponQuery {
|
||||
c.couponQueryDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return c
|
||||
}
|
||||
|
||||
func (c couponQuery) replaceDB(db *gorm.DB) couponQuery {
|
||||
c.couponQueryDo.ReplaceDB(db)
|
||||
return c
|
||||
}
|
||||
|
||||
type couponQueryDo struct{ gen.DO }
|
||||
|
||||
func (c couponQueryDo) Debug() *couponQueryDo {
|
||||
return c.withDO(c.DO.Debug())
|
||||
}
|
||||
|
||||
func (c couponQueryDo) WithContext(ctx context.Context) *couponQueryDo {
|
||||
return c.withDO(c.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) ReadDB() *couponQueryDo {
|
||||
return c.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (c couponQueryDo) WriteDB() *couponQueryDo {
|
||||
return c.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Session(config *gorm.Session) *couponQueryDo {
|
||||
return c.withDO(c.DO.Session(config))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Clauses(conds ...clause.Expression) *couponQueryDo {
|
||||
return c.withDO(c.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Returning(value interface{}, columns ...string) *couponQueryDo {
|
||||
return c.withDO(c.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Not(conds ...gen.Condition) *couponQueryDo {
|
||||
return c.withDO(c.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Or(conds ...gen.Condition) *couponQueryDo {
|
||||
return c.withDO(c.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Select(conds ...field.Expr) *couponQueryDo {
|
||||
return c.withDO(c.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Where(conds ...gen.Condition) *couponQueryDo {
|
||||
return c.withDO(c.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Order(conds ...field.Expr) *couponQueryDo {
|
||||
return c.withDO(c.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Distinct(cols ...field.Expr) *couponQueryDo {
|
||||
return c.withDO(c.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Omit(cols ...field.Expr) *couponQueryDo {
|
||||
return c.withDO(c.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Join(table schema.Tabler, on ...field.Expr) *couponQueryDo {
|
||||
return c.withDO(c.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) LeftJoin(table schema.Tabler, on ...field.Expr) *couponQueryDo {
|
||||
return c.withDO(c.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) RightJoin(table schema.Tabler, on ...field.Expr) *couponQueryDo {
|
||||
return c.withDO(c.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Group(cols ...field.Expr) *couponQueryDo {
|
||||
return c.withDO(c.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Having(conds ...gen.Condition) *couponQueryDo {
|
||||
return c.withDO(c.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Limit(limit int) *couponQueryDo {
|
||||
return c.withDO(c.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Offset(offset int) *couponQueryDo {
|
||||
return c.withDO(c.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Scopes(funcs ...func(gen.Dao) gen.Dao) *couponQueryDo {
|
||||
return c.withDO(c.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Unscoped() *couponQueryDo {
|
||||
return c.withDO(c.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Create(values ...*Coupon) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return c.DO.Create(values)
|
||||
}
|
||||
|
||||
func (c couponQueryDo) CreateInBatches(values []*Coupon, batchSize int) error {
|
||||
return c.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (c couponQueryDo) Save(values ...*Coupon) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return c.DO.Save(values)
|
||||
}
|
||||
|
||||
func (c couponQueryDo) First() (*Coupon, error) {
|
||||
if result, err := c.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*Coupon), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Take() (*Coupon, error) {
|
||||
if result, err := c.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*Coupon), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Last() (*Coupon, error) {
|
||||
if result, err := c.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*Coupon), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Find() ([]*Coupon, error) {
|
||||
result, err := c.DO.Find()
|
||||
return result.([]*Coupon), err
|
||||
}
|
||||
|
||||
func (c couponQueryDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*Coupon, err error) {
|
||||
buf := make([]*Coupon, 0, batchSize)
|
||||
err = c.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (c couponQueryDo) FindInBatches(result *[]*Coupon, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return c.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Attrs(attrs ...field.AssignExpr) *couponQueryDo {
|
||||
return c.withDO(c.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Assign(attrs ...field.AssignExpr) *couponQueryDo {
|
||||
return c.withDO(c.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Joins(fields ...field.RelationField) *couponQueryDo {
|
||||
for _, _f := range fields {
|
||||
c = *c.withDO(c.DO.Joins(_f))
|
||||
}
|
||||
return &c
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Preload(fields ...field.RelationField) *couponQueryDo {
|
||||
for _, _f := range fields {
|
||||
c = *c.withDO(c.DO.Preload(_f))
|
||||
}
|
||||
return &c
|
||||
}
|
||||
|
||||
func (c couponQueryDo) FirstOrInit() (*Coupon, error) {
|
||||
if result, err := c.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*Coupon), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (c couponQueryDo) FirstOrCreate() (*Coupon, error) {
|
||||
if result, err := c.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*Coupon), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (c couponQueryDo) FindByPage(offset int, limit int) (result []*Coupon, count int64, err error) {
|
||||
result, err = c.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = c.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (c couponQueryDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = c.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = c.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Scan(result interface{}) (err error) {
|
||||
return c.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (c couponQueryDo) Delete(models ...*Coupon) (result gen.ResultInfo, err error) {
|
||||
return c.DO.Delete(models)
|
||||
}
|
||||
|
||||
// ForceDelete performs a permanent delete (ignores soft-delete) for current scope.
|
||||
func (c couponQueryDo) ForceDelete() (gen.ResultInfo, error) {
|
||||
return c.Unscoped().Delete()
|
||||
}
|
||||
|
||||
// Inc increases the given column by step for current scope.
|
||||
func (c couponQueryDo) Inc(column field.Expr, step int64) (gen.ResultInfo, error) {
|
||||
// column = column + step
|
||||
e := field.NewUnsafeFieldRaw("?+?", column.RawExpr(), step)
|
||||
return c.DO.UpdateColumn(column, e)
|
||||
}
|
||||
|
||||
// Dec decreases the given column by step for current scope.
|
||||
func (c couponQueryDo) Dec(column field.Expr, step int64) (gen.ResultInfo, error) {
|
||||
// column = column - step
|
||||
e := field.NewUnsafeFieldRaw("?-?", column.RawExpr(), step)
|
||||
return c.DO.UpdateColumn(column, e)
|
||||
}
|
||||
|
||||
// Sum returns SUM(column) for current scope.
|
||||
func (c couponQueryDo) Sum(column field.Expr) (float64, error) {
|
||||
var _v float64
|
||||
agg := field.NewUnsafeFieldRaw("SUM(?)", column.RawExpr())
|
||||
if err := c.Select(agg).Scan(&_v); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return _v, nil
|
||||
}
|
||||
|
||||
// Avg returns AVG(column) for current scope.
|
||||
func (c couponQueryDo) Avg(column field.Expr) (float64, error) {
|
||||
var _v float64
|
||||
agg := field.NewUnsafeFieldRaw("AVG(?)", column.RawExpr())
|
||||
if err := c.Select(agg).Scan(&_v); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return _v, nil
|
||||
}
|
||||
|
||||
// Min returns MIN(column) for current scope.
|
||||
func (c couponQueryDo) Min(column field.Expr) (float64, error) {
|
||||
var _v float64
|
||||
agg := field.NewUnsafeFieldRaw("MIN(?)", column.RawExpr())
|
||||
if err := c.Select(agg).Scan(&_v); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return _v, nil
|
||||
}
|
||||
|
||||
// Max returns MAX(column) for current scope.
|
||||
func (c couponQueryDo) Max(column field.Expr) (float64, error) {
|
||||
var _v float64
|
||||
agg := field.NewUnsafeFieldRaw("MAX(?)", column.RawExpr())
|
||||
if err := c.Select(agg).Scan(&_v); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return _v, nil
|
||||
}
|
||||
|
||||
// PluckMap returns a map[key]value for selected key/value expressions within current scope.
|
||||
func (c couponQueryDo) PluckMap(key, val field.Expr) (map[interface{}]interface{}, error) {
|
||||
do := c.Select(key, val)
|
||||
rows, err := do.DO.Rows()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
mm := make(map[interface{}]interface{})
|
||||
for rows.Next() {
|
||||
var k interface{}
|
||||
var v interface{}
|
||||
if err := rows.Scan(&k, &v); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
mm[k] = v
|
||||
}
|
||||
return mm, rows.Err()
|
||||
}
|
||||
|
||||
// Exists returns true if any record matches the given conditions.
|
||||
func (c couponQueryDo) Exists(conds ...gen.Condition) (bool, error) {
|
||||
cnt, err := c.Where(conds...).Count()
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return cnt > 0, nil
|
||||
}
|
||||
|
||||
// PluckIDs returns all primary key values under current scope.
|
||||
func (c couponQueryDo) PluckIDs() ([]int64, error) {
|
||||
ids := make([]int64, 0, 16)
|
||||
pk := field.NewInt64(c.TableName(), "id")
|
||||
if err := c.DO.Pluck(pk, &ids); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ids, nil
|
||||
}
|
||||
|
||||
// GetByID finds a single record by primary key.
|
||||
func (c couponQueryDo) GetByID(id int64) (*Coupon, error) {
|
||||
pk := field.NewInt64(c.TableName(), "id")
|
||||
return c.Where(pk.Eq(id)).First()
|
||||
}
|
||||
|
||||
// GetByIDs finds records by primary key list.
|
||||
func (c couponQueryDo) GetByIDs(ids ...int64) ([]*Coupon, error) {
|
||||
if len(ids) == 0 {
|
||||
return []*Coupon{}, nil
|
||||
}
|
||||
pk := field.NewInt64(c.TableName(), "id")
|
||||
return c.Where(pk.In(ids...)).Find()
|
||||
}
|
||||
|
||||
// DeleteByID deletes records by primary key.
|
||||
func (c couponQueryDo) DeleteByID(id int64) (gen.ResultInfo, error) {
|
||||
pk := field.NewInt64(c.TableName(), "id")
|
||||
return c.Where(pk.Eq(id)).Delete()
|
||||
}
|
||||
|
||||
// DeleteByIDs deletes records by a list of primary keys.
|
||||
func (c couponQueryDo) DeleteByIDs(ids ...int64) (gen.ResultInfo, error) {
|
||||
if len(ids) == 0 {
|
||||
return gen.ResultInfo{RowsAffected: 0, Error: nil}, nil
|
||||
}
|
||||
pk := field.NewInt64(c.TableName(), "id")
|
||||
return c.Where(pk.In(ids...)).Delete()
|
||||
}
|
||||
|
||||
func (c *couponQueryDo) withDO(do gen.Dao) *couponQueryDo {
|
||||
c.DO = *do.(*gen.DO)
|
||||
return c
|
||||
}
|
||||
@@ -37,6 +37,7 @@ type Order struct {
|
||||
RefundReason string `gorm:"column:refund_reason;type:character varying(255)" json:"refund_reason"`
|
||||
CreatedAt time.Time `gorm:"column:created_at;type:timestamp with time zone;default:now()" json:"created_at"`
|
||||
UpdatedAt time.Time `gorm:"column:updated_at;type:timestamp with time zone;default:now()" json:"updated_at"`
|
||||
CouponID int64 `gorm:"column:coupon_id;type:bigint;comment:使用的优惠券ID (0表示未使用)" json:"coupon_id"` // 使用的优惠券ID (0表示未使用)
|
||||
}
|
||||
|
||||
// Quick operations without importing query package
|
||||
|
||||
@@ -43,6 +43,7 @@ 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.CouponID = field.NewInt64(tableName, "coupon_id")
|
||||
|
||||
_orderQuery.fillFieldMap()
|
||||
|
||||
@@ -71,6 +72,7 @@ type orderQuery struct {
|
||||
RefundReason field.String
|
||||
CreatedAt field.Time
|
||||
UpdatedAt field.Time
|
||||
CouponID field.Int64 // 使用的优惠券ID (0表示未使用)
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
@@ -105,6 +107,7 @@ func (o *orderQuery) updateTableName(table string) *orderQuery {
|
||||
o.RefundReason = field.NewString(table, "refund_reason")
|
||||
o.CreatedAt = field.NewTime(table, "created_at")
|
||||
o.UpdatedAt = field.NewTime(table, "updated_at")
|
||||
o.CouponID = field.NewInt64(table, "coupon_id")
|
||||
|
||||
o.fillFieldMap()
|
||||
|
||||
@@ -135,7 +138,7 @@ func (o *orderQuery) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
}
|
||||
|
||||
func (o *orderQuery) fillFieldMap() {
|
||||
o.fieldMap = make(map[string]field.Expr, 18)
|
||||
o.fieldMap = make(map[string]field.Expr, 19)
|
||||
o.fieldMap["id"] = o.ID
|
||||
o.fieldMap["tenant_id"] = o.TenantID
|
||||
o.fieldMap["user_id"] = o.UserID
|
||||
@@ -154,6 +157,7 @@ func (o *orderQuery) fillFieldMap() {
|
||||
o.fieldMap["refund_reason"] = o.RefundReason
|
||||
o.fieldMap["created_at"] = o.CreatedAt
|
||||
o.fieldMap["updated_at"] = o.UpdatedAt
|
||||
o.fieldMap["coupon_id"] = o.CouponID
|
||||
}
|
||||
|
||||
func (o orderQuery) clone(db *gorm.DB) orderQuery {
|
||||
|
||||
@@ -22,6 +22,7 @@ var (
|
||||
ContentAccessQuery *contentAccessQuery
|
||||
ContentAssetQuery *contentAssetQuery
|
||||
ContentPriceQuery *contentPriceQuery
|
||||
CouponQuery *couponQuery
|
||||
MediaAssetQuery *mediaAssetQuery
|
||||
NotificationQuery *notificationQuery
|
||||
OrderQuery *orderQuery
|
||||
@@ -35,6 +36,7 @@ var (
|
||||
UserQuery *userQuery
|
||||
UserCommentActionQuery *userCommentActionQuery
|
||||
UserContentActionQuery *userContentActionQuery
|
||||
UserCouponQuery *userCouponQuery
|
||||
)
|
||||
|
||||
func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
|
||||
@@ -44,6 +46,7 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
|
||||
ContentAccessQuery = &Q.ContentAccess
|
||||
ContentAssetQuery = &Q.ContentAsset
|
||||
ContentPriceQuery = &Q.ContentPrice
|
||||
CouponQuery = &Q.Coupon
|
||||
MediaAssetQuery = &Q.MediaAsset
|
||||
NotificationQuery = &Q.Notification
|
||||
OrderQuery = &Q.Order
|
||||
@@ -57,6 +60,7 @@ func SetDefault(db *gorm.DB, opts ...gen.DOOption) {
|
||||
UserQuery = &Q.User
|
||||
UserCommentActionQuery = &Q.UserCommentAction
|
||||
UserContentActionQuery = &Q.UserContentAction
|
||||
UserCouponQuery = &Q.UserCoupon
|
||||
}
|
||||
|
||||
func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
|
||||
@@ -67,6 +71,7 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
|
||||
ContentAccess: newContentAccess(db, opts...),
|
||||
ContentAsset: newContentAsset(db, opts...),
|
||||
ContentPrice: newContentPrice(db, opts...),
|
||||
Coupon: newCoupon(db, opts...),
|
||||
MediaAsset: newMediaAsset(db, opts...),
|
||||
Notification: newNotification(db, opts...),
|
||||
Order: newOrder(db, opts...),
|
||||
@@ -80,6 +85,7 @@ func Use(db *gorm.DB, opts ...gen.DOOption) *Query {
|
||||
User: newUser(db, opts...),
|
||||
UserCommentAction: newUserCommentAction(db, opts...),
|
||||
UserContentAction: newUserContentAction(db, opts...),
|
||||
UserCoupon: newUserCoupon(db, opts...),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,6 +97,7 @@ type Query struct {
|
||||
ContentAccess contentAccessQuery
|
||||
ContentAsset contentAssetQuery
|
||||
ContentPrice contentPriceQuery
|
||||
Coupon couponQuery
|
||||
MediaAsset mediaAssetQuery
|
||||
Notification notificationQuery
|
||||
Order orderQuery
|
||||
@@ -104,6 +111,7 @@ type Query struct {
|
||||
User userQuery
|
||||
UserCommentAction userCommentActionQuery
|
||||
UserContentAction userContentActionQuery
|
||||
UserCoupon userCouponQuery
|
||||
}
|
||||
|
||||
func (q *Query) Available() bool { return q.db != nil }
|
||||
@@ -116,6 +124,7 @@ func (q *Query) clone(db *gorm.DB) *Query {
|
||||
ContentAccess: q.ContentAccess.clone(db),
|
||||
ContentAsset: q.ContentAsset.clone(db),
|
||||
ContentPrice: q.ContentPrice.clone(db),
|
||||
Coupon: q.Coupon.clone(db),
|
||||
MediaAsset: q.MediaAsset.clone(db),
|
||||
Notification: q.Notification.clone(db),
|
||||
Order: q.Order.clone(db),
|
||||
@@ -129,6 +138,7 @@ func (q *Query) clone(db *gorm.DB) *Query {
|
||||
User: q.User.clone(db),
|
||||
UserCommentAction: q.UserCommentAction.clone(db),
|
||||
UserContentAction: q.UserContentAction.clone(db),
|
||||
UserCoupon: q.UserCoupon.clone(db),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,6 +158,7 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query {
|
||||
ContentAccess: q.ContentAccess.replaceDB(db),
|
||||
ContentAsset: q.ContentAsset.replaceDB(db),
|
||||
ContentPrice: q.ContentPrice.replaceDB(db),
|
||||
Coupon: q.Coupon.replaceDB(db),
|
||||
MediaAsset: q.MediaAsset.replaceDB(db),
|
||||
Notification: q.Notification.replaceDB(db),
|
||||
Order: q.Order.replaceDB(db),
|
||||
@@ -161,6 +172,7 @@ func (q *Query) ReplaceDB(db *gorm.DB) *Query {
|
||||
User: q.User.replaceDB(db),
|
||||
UserCommentAction: q.UserCommentAction.replaceDB(db),
|
||||
UserContentAction: q.UserContentAction.replaceDB(db),
|
||||
UserCoupon: q.UserCoupon.replaceDB(db),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -170,6 +182,7 @@ type queryCtx struct {
|
||||
ContentAccess *contentAccessQueryDo
|
||||
ContentAsset *contentAssetQueryDo
|
||||
ContentPrice *contentPriceQueryDo
|
||||
Coupon *couponQueryDo
|
||||
MediaAsset *mediaAssetQueryDo
|
||||
Notification *notificationQueryDo
|
||||
Order *orderQueryDo
|
||||
@@ -183,6 +196,7 @@ type queryCtx struct {
|
||||
User *userQueryDo
|
||||
UserCommentAction *userCommentActionQueryDo
|
||||
UserContentAction *userContentActionQueryDo
|
||||
UserCoupon *userCouponQueryDo
|
||||
}
|
||||
|
||||
func (q *Query) WithContext(ctx context.Context) *queryCtx {
|
||||
@@ -192,6 +206,7 @@ func (q *Query) WithContext(ctx context.Context) *queryCtx {
|
||||
ContentAccess: q.ContentAccess.WithContext(ctx),
|
||||
ContentAsset: q.ContentAsset.WithContext(ctx),
|
||||
ContentPrice: q.ContentPrice.WithContext(ctx),
|
||||
Coupon: q.Coupon.WithContext(ctx),
|
||||
MediaAsset: q.MediaAsset.WithContext(ctx),
|
||||
Notification: q.Notification.WithContext(ctx),
|
||||
Order: q.Order.WithContext(ctx),
|
||||
@@ -205,6 +220,7 @@ func (q *Query) WithContext(ctx context.Context) *queryCtx {
|
||||
User: q.User.WithContext(ctx),
|
||||
UserCommentAction: q.UserCommentAction.WithContext(ctx),
|
||||
UserContentAction: q.UserContentAction.WithContext(ctx),
|
||||
UserCoupon: q.UserCoupon.WithContext(ctx),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
59
backend/database/models/user_coupons.gen.go
Normal file
59
backend/database/models/user_coupons.gen.go
Normal file
@@ -0,0 +1,59 @@
|
||||
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
|
||||
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
|
||||
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
|
||||
|
||||
package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"go.ipao.vip/gen"
|
||||
)
|
||||
|
||||
const TableNameUserCoupon = "user_coupons"
|
||||
|
||||
// UserCoupon mapped from table <user_coupons>
|
||||
type UserCoupon struct {
|
||||
ID int64 `gorm:"column:id;type:bigint;primaryKey;autoIncrement:true" json:"id"`
|
||||
UserID int64 `gorm:"column:user_id;type:bigint;not null" json:"user_id"`
|
||||
CouponID int64 `gorm:"column:coupon_id;type:bigint;not null" json:"coupon_id"`
|
||||
OrderID int64 `gorm:"column:order_id;type:bigint" json:"order_id"`
|
||||
Status string `gorm:"column:status;type:character varying(32);not null;default:unused" json:"status"`
|
||||
UsedAt time.Time `gorm:"column:used_at;type:timestamp with time zone" json:"used_at"`
|
||||
CreatedAt time.Time `gorm:"column:created_at;type:timestamp with time zone;not null;default:now()" json:"created_at"`
|
||||
}
|
||||
|
||||
// Quick operations without importing query package
|
||||
// Update applies changed fields to the database using the default DB.
|
||||
func (m *UserCoupon) Update(ctx context.Context) (gen.ResultInfo, error) {
|
||||
return Q.UserCoupon.WithContext(ctx).Updates(m)
|
||||
}
|
||||
|
||||
// Save upserts the model using the default DB.
|
||||
func (m *UserCoupon) Save(ctx context.Context) error { return Q.UserCoupon.WithContext(ctx).Save(m) }
|
||||
|
||||
// Create inserts the model using the default DB.
|
||||
func (m *UserCoupon) Create(ctx context.Context) error {
|
||||
return Q.UserCoupon.WithContext(ctx).Create(m)
|
||||
}
|
||||
|
||||
// Delete removes the row represented by the model using the default DB.
|
||||
func (m *UserCoupon) Delete(ctx context.Context) (gen.ResultInfo, error) {
|
||||
return Q.UserCoupon.WithContext(ctx).Delete(m)
|
||||
}
|
||||
|
||||
// ForceDelete permanently deletes the row (ignores soft delete) using the default DB.
|
||||
func (m *UserCoupon) ForceDelete(ctx context.Context) (gen.ResultInfo, error) {
|
||||
return Q.UserCoupon.WithContext(ctx).Unscoped().Delete(m)
|
||||
}
|
||||
|
||||
// Reload reloads the model from database by its primary key and overwrites current fields.
|
||||
func (m *UserCoupon) Reload(ctx context.Context) error {
|
||||
fresh, err := Q.UserCoupon.WithContext(ctx).GetByID(m.ID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
*m = *fresh
|
||||
return nil
|
||||
}
|
||||
485
backend/database/models/user_coupons.query.gen.go
Normal file
485
backend/database/models/user_coupons.query.gen.go
Normal file
@@ -0,0 +1,485 @@
|
||||
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
|
||||
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
|
||||
// Code generated by go.ipao.vip/gen. DO NOT EDIT.
|
||||
|
||||
package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gorm.io/gorm"
|
||||
"gorm.io/gorm/clause"
|
||||
"gorm.io/gorm/schema"
|
||||
|
||||
"go.ipao.vip/gen"
|
||||
"go.ipao.vip/gen/field"
|
||||
|
||||
"gorm.io/plugin/dbresolver"
|
||||
)
|
||||
|
||||
func newUserCoupon(db *gorm.DB, opts ...gen.DOOption) userCouponQuery {
|
||||
_userCouponQuery := userCouponQuery{}
|
||||
|
||||
_userCouponQuery.userCouponQueryDo.UseDB(db, opts...)
|
||||
_userCouponQuery.userCouponQueryDo.UseModel(&UserCoupon{})
|
||||
|
||||
tableName := _userCouponQuery.userCouponQueryDo.TableName()
|
||||
_userCouponQuery.ALL = field.NewAsterisk(tableName)
|
||||
_userCouponQuery.ID = field.NewInt64(tableName, "id")
|
||||
_userCouponQuery.UserID = field.NewInt64(tableName, "user_id")
|
||||
_userCouponQuery.CouponID = field.NewInt64(tableName, "coupon_id")
|
||||
_userCouponQuery.OrderID = field.NewInt64(tableName, "order_id")
|
||||
_userCouponQuery.Status = field.NewString(tableName, "status")
|
||||
_userCouponQuery.UsedAt = field.NewTime(tableName, "used_at")
|
||||
_userCouponQuery.CreatedAt = field.NewTime(tableName, "created_at")
|
||||
|
||||
_userCouponQuery.fillFieldMap()
|
||||
|
||||
return _userCouponQuery
|
||||
}
|
||||
|
||||
type userCouponQuery struct {
|
||||
userCouponQueryDo userCouponQueryDo
|
||||
|
||||
ALL field.Asterisk
|
||||
ID field.Int64
|
||||
UserID field.Int64
|
||||
CouponID field.Int64
|
||||
OrderID field.Int64
|
||||
Status field.String
|
||||
UsedAt field.Time
|
||||
CreatedAt field.Time
|
||||
|
||||
fieldMap map[string]field.Expr
|
||||
}
|
||||
|
||||
func (u userCouponQuery) Table(newTableName string) *userCouponQuery {
|
||||
u.userCouponQueryDo.UseTable(newTableName)
|
||||
return u.updateTableName(newTableName)
|
||||
}
|
||||
|
||||
func (u userCouponQuery) As(alias string) *userCouponQuery {
|
||||
u.userCouponQueryDo.DO = *(u.userCouponQueryDo.As(alias).(*gen.DO))
|
||||
return u.updateTableName(alias)
|
||||
}
|
||||
|
||||
func (u *userCouponQuery) updateTableName(table string) *userCouponQuery {
|
||||
u.ALL = field.NewAsterisk(table)
|
||||
u.ID = field.NewInt64(table, "id")
|
||||
u.UserID = field.NewInt64(table, "user_id")
|
||||
u.CouponID = field.NewInt64(table, "coupon_id")
|
||||
u.OrderID = field.NewInt64(table, "order_id")
|
||||
u.Status = field.NewString(table, "status")
|
||||
u.UsedAt = field.NewTime(table, "used_at")
|
||||
u.CreatedAt = field.NewTime(table, "created_at")
|
||||
|
||||
u.fillFieldMap()
|
||||
|
||||
return u
|
||||
}
|
||||
|
||||
func (u *userCouponQuery) QueryContext(ctx context.Context) (*userCouponQuery, *userCouponQueryDo) {
|
||||
return u, u.userCouponQueryDo.WithContext(ctx)
|
||||
}
|
||||
|
||||
func (u *userCouponQuery) WithContext(ctx context.Context) *userCouponQueryDo {
|
||||
return u.userCouponQueryDo.WithContext(ctx)
|
||||
}
|
||||
|
||||
func (u userCouponQuery) TableName() string { return u.userCouponQueryDo.TableName() }
|
||||
|
||||
func (u userCouponQuery) Alias() string { return u.userCouponQueryDo.Alias() }
|
||||
|
||||
func (u userCouponQuery) Columns(cols ...field.Expr) gen.Columns {
|
||||
return u.userCouponQueryDo.Columns(cols...)
|
||||
}
|
||||
|
||||
func (u *userCouponQuery) GetFieldByName(fieldName string) (field.OrderExpr, bool) {
|
||||
_f, ok := u.fieldMap[fieldName]
|
||||
if !ok || _f == nil {
|
||||
return nil, false
|
||||
}
|
||||
_oe, ok := _f.(field.OrderExpr)
|
||||
return _oe, ok
|
||||
}
|
||||
|
||||
func (u *userCouponQuery) fillFieldMap() {
|
||||
u.fieldMap = make(map[string]field.Expr, 7)
|
||||
u.fieldMap["id"] = u.ID
|
||||
u.fieldMap["user_id"] = u.UserID
|
||||
u.fieldMap["coupon_id"] = u.CouponID
|
||||
u.fieldMap["order_id"] = u.OrderID
|
||||
u.fieldMap["status"] = u.Status
|
||||
u.fieldMap["used_at"] = u.UsedAt
|
||||
u.fieldMap["created_at"] = u.CreatedAt
|
||||
}
|
||||
|
||||
func (u userCouponQuery) clone(db *gorm.DB) userCouponQuery {
|
||||
u.userCouponQueryDo.ReplaceConnPool(db.Statement.ConnPool)
|
||||
return u
|
||||
}
|
||||
|
||||
func (u userCouponQuery) replaceDB(db *gorm.DB) userCouponQuery {
|
||||
u.userCouponQueryDo.ReplaceDB(db)
|
||||
return u
|
||||
}
|
||||
|
||||
type userCouponQueryDo struct{ gen.DO }
|
||||
|
||||
func (u userCouponQueryDo) Debug() *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Debug())
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) WithContext(ctx context.Context) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.WithContext(ctx))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) ReadDB() *userCouponQueryDo {
|
||||
return u.Clauses(dbresolver.Read)
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) WriteDB() *userCouponQueryDo {
|
||||
return u.Clauses(dbresolver.Write)
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Session(config *gorm.Session) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Session(config))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Clauses(conds ...clause.Expression) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Clauses(conds...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Returning(value interface{}, columns ...string) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Returning(value, columns...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Not(conds ...gen.Condition) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Not(conds...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Or(conds ...gen.Condition) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Or(conds...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Select(conds ...field.Expr) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Select(conds...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Where(conds ...gen.Condition) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Where(conds...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Order(conds ...field.Expr) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Order(conds...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Distinct(cols ...field.Expr) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Distinct(cols...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Omit(cols ...field.Expr) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Omit(cols...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Join(table schema.Tabler, on ...field.Expr) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Join(table, on...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) LeftJoin(table schema.Tabler, on ...field.Expr) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.LeftJoin(table, on...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) RightJoin(table schema.Tabler, on ...field.Expr) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.RightJoin(table, on...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Group(cols ...field.Expr) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Group(cols...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Having(conds ...gen.Condition) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Having(conds...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Limit(limit int) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Limit(limit))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Offset(offset int) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Offset(offset))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Scopes(funcs ...func(gen.Dao) gen.Dao) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Scopes(funcs...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Unscoped() *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Unscoped())
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Create(values ...*UserCoupon) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return u.DO.Create(values)
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) CreateInBatches(values []*UserCoupon, batchSize int) error {
|
||||
return u.DO.CreateInBatches(values, batchSize)
|
||||
}
|
||||
|
||||
// Save : !!! underlying implementation is different with GORM
|
||||
// The method is equivalent to executing the statement: db.Clauses(clause.OnConflict{UpdateAll: true}).Create(values)
|
||||
func (u userCouponQueryDo) Save(values ...*UserCoupon) error {
|
||||
if len(values) == 0 {
|
||||
return nil
|
||||
}
|
||||
return u.DO.Save(values)
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) First() (*UserCoupon, error) {
|
||||
if result, err := u.DO.First(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*UserCoupon), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Take() (*UserCoupon, error) {
|
||||
if result, err := u.DO.Take(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*UserCoupon), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Last() (*UserCoupon, error) {
|
||||
if result, err := u.DO.Last(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*UserCoupon), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Find() ([]*UserCoupon, error) {
|
||||
result, err := u.DO.Find()
|
||||
return result.([]*UserCoupon), err
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) FindInBatch(batchSize int, fc func(tx gen.Dao, batch int) error) (results []*UserCoupon, err error) {
|
||||
buf := make([]*UserCoupon, 0, batchSize)
|
||||
err = u.DO.FindInBatches(&buf, batchSize, func(tx gen.Dao, batch int) error {
|
||||
defer func() { results = append(results, buf...) }()
|
||||
return fc(tx, batch)
|
||||
})
|
||||
return results, err
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) FindInBatches(result *[]*UserCoupon, batchSize int, fc func(tx gen.Dao, batch int) error) error {
|
||||
return u.DO.FindInBatches(result, batchSize, fc)
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Attrs(attrs ...field.AssignExpr) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Attrs(attrs...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Assign(attrs ...field.AssignExpr) *userCouponQueryDo {
|
||||
return u.withDO(u.DO.Assign(attrs...))
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Joins(fields ...field.RelationField) *userCouponQueryDo {
|
||||
for _, _f := range fields {
|
||||
u = *u.withDO(u.DO.Joins(_f))
|
||||
}
|
||||
return &u
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Preload(fields ...field.RelationField) *userCouponQueryDo {
|
||||
for _, _f := range fields {
|
||||
u = *u.withDO(u.DO.Preload(_f))
|
||||
}
|
||||
return &u
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) FirstOrInit() (*UserCoupon, error) {
|
||||
if result, err := u.DO.FirstOrInit(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*UserCoupon), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) FirstOrCreate() (*UserCoupon, error) {
|
||||
if result, err := u.DO.FirstOrCreate(); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return result.(*UserCoupon), nil
|
||||
}
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) FindByPage(offset int, limit int) (result []*UserCoupon, count int64, err error) {
|
||||
result, err = u.Offset(offset).Limit(limit).Find()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
if size := len(result); 0 < limit && 0 < size && size < limit {
|
||||
count = int64(size + offset)
|
||||
return
|
||||
}
|
||||
|
||||
count, err = u.Offset(-1).Limit(-1).Count()
|
||||
return
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) ScanByPage(result interface{}, offset int, limit int) (count int64, err error) {
|
||||
count, err = u.Count()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = u.Offset(offset).Limit(limit).Scan(result)
|
||||
return
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Scan(result interface{}) (err error) {
|
||||
return u.DO.Scan(result)
|
||||
}
|
||||
|
||||
func (u userCouponQueryDo) Delete(models ...*UserCoupon) (result gen.ResultInfo, err error) {
|
||||
return u.DO.Delete(models)
|
||||
}
|
||||
|
||||
// ForceDelete performs a permanent delete (ignores soft-delete) for current scope.
|
||||
func (u userCouponQueryDo) ForceDelete() (gen.ResultInfo, error) {
|
||||
return u.Unscoped().Delete()
|
||||
}
|
||||
|
||||
// Inc increases the given column by step for current scope.
|
||||
func (u userCouponQueryDo) Inc(column field.Expr, step int64) (gen.ResultInfo, error) {
|
||||
// column = column + step
|
||||
e := field.NewUnsafeFieldRaw("?+?", column.RawExpr(), step)
|
||||
return u.DO.UpdateColumn(column, e)
|
||||
}
|
||||
|
||||
// Dec decreases the given column by step for current scope.
|
||||
func (u userCouponQueryDo) Dec(column field.Expr, step int64) (gen.ResultInfo, error) {
|
||||
// column = column - step
|
||||
e := field.NewUnsafeFieldRaw("?-?", column.RawExpr(), step)
|
||||
return u.DO.UpdateColumn(column, e)
|
||||
}
|
||||
|
||||
// Sum returns SUM(column) for current scope.
|
||||
func (u userCouponQueryDo) Sum(column field.Expr) (float64, error) {
|
||||
var _v float64
|
||||
agg := field.NewUnsafeFieldRaw("SUM(?)", column.RawExpr())
|
||||
if err := u.Select(agg).Scan(&_v); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return _v, nil
|
||||
}
|
||||
|
||||
// Avg returns AVG(column) for current scope.
|
||||
func (u userCouponQueryDo) Avg(column field.Expr) (float64, error) {
|
||||
var _v float64
|
||||
agg := field.NewUnsafeFieldRaw("AVG(?)", column.RawExpr())
|
||||
if err := u.Select(agg).Scan(&_v); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return _v, nil
|
||||
}
|
||||
|
||||
// Min returns MIN(column) for current scope.
|
||||
func (u userCouponQueryDo) Min(column field.Expr) (float64, error) {
|
||||
var _v float64
|
||||
agg := field.NewUnsafeFieldRaw("MIN(?)", column.RawExpr())
|
||||
if err := u.Select(agg).Scan(&_v); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return _v, nil
|
||||
}
|
||||
|
||||
// Max returns MAX(column) for current scope.
|
||||
func (u userCouponQueryDo) Max(column field.Expr) (float64, error) {
|
||||
var _v float64
|
||||
agg := field.NewUnsafeFieldRaw("MAX(?)", column.RawExpr())
|
||||
if err := u.Select(agg).Scan(&_v); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return _v, nil
|
||||
}
|
||||
|
||||
// PluckMap returns a map[key]value for selected key/value expressions within current scope.
|
||||
func (u userCouponQueryDo) PluckMap(key, val field.Expr) (map[interface{}]interface{}, error) {
|
||||
do := u.Select(key, val)
|
||||
rows, err := do.DO.Rows()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
mm := make(map[interface{}]interface{})
|
||||
for rows.Next() {
|
||||
var k interface{}
|
||||
var v interface{}
|
||||
if err := rows.Scan(&k, &v); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
mm[k] = v
|
||||
}
|
||||
return mm, rows.Err()
|
||||
}
|
||||
|
||||
// Exists returns true if any record matches the given conditions.
|
||||
func (u userCouponQueryDo) Exists(conds ...gen.Condition) (bool, error) {
|
||||
cnt, err := u.Where(conds...).Count()
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
return cnt > 0, nil
|
||||
}
|
||||
|
||||
// PluckIDs returns all primary key values under current scope.
|
||||
func (u userCouponQueryDo) PluckIDs() ([]int64, error) {
|
||||
ids := make([]int64, 0, 16)
|
||||
pk := field.NewInt64(u.TableName(), "id")
|
||||
if err := u.DO.Pluck(pk, &ids); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return ids, nil
|
||||
}
|
||||
|
||||
// GetByID finds a single record by primary key.
|
||||
func (u userCouponQueryDo) GetByID(id int64) (*UserCoupon, error) {
|
||||
pk := field.NewInt64(u.TableName(), "id")
|
||||
return u.Where(pk.Eq(id)).First()
|
||||
}
|
||||
|
||||
// GetByIDs finds records by primary key list.
|
||||
func (u userCouponQueryDo) GetByIDs(ids ...int64) ([]*UserCoupon, error) {
|
||||
if len(ids) == 0 {
|
||||
return []*UserCoupon{}, nil
|
||||
}
|
||||
pk := field.NewInt64(u.TableName(), "id")
|
||||
return u.Where(pk.In(ids...)).Find()
|
||||
}
|
||||
|
||||
// DeleteByID deletes records by primary key.
|
||||
func (u userCouponQueryDo) DeleteByID(id int64) (gen.ResultInfo, error) {
|
||||
pk := field.NewInt64(u.TableName(), "id")
|
||||
return u.Where(pk.Eq(id)).Delete()
|
||||
}
|
||||
|
||||
// DeleteByIDs deletes records by a list of primary keys.
|
||||
func (u userCouponQueryDo) DeleteByIDs(ids ...int64) (gen.ResultInfo, error) {
|
||||
if len(ids) == 0 {
|
||||
return gen.ResultInfo{RowsAffected: 0, Error: nil}, nil
|
||||
}
|
||||
pk := field.NewInt64(u.TableName(), "id")
|
||||
return u.Where(pk.In(ids...)).Delete()
|
||||
}
|
||||
|
||||
func (u *userCouponQueryDo) withDO(do gen.Dao) *userCouponQueryDo {
|
||||
u.DO = *do.(*gen.DO)
|
||||
return u
|
||||
}
|
||||
Reference in New Issue
Block a user