github.com/unionj-cloud/go-doudou/v2@v2.3.5/toolkit/gormgen/field/serializer.go (about)

     1  package field
     2  
     3  import (
     4  	"context"
     5  	"gorm.io/gorm/clause"
     6  	"gorm.io/gorm/schema"
     7  	"reflect"
     8  
     9  	"gorm.io/gorm"
    10  )
    11  
    12  type ValuerType struct {
    13  	Column  string
    14  	Value   schema.SerializerValuerInterface
    15  	FucName string
    16  }
    17  
    18  func (v ValuerType) GormValue(ctx context.Context, db *gorm.DB) (expr clause.Expr) {
    19  	stmt := db.Statement.Schema
    20  	field := stmt.LookUpField(v.Column)
    21  	newValue, err := v.Value.Value(context.WithValue(ctx, "func_name", v.FucName), field, reflect.ValueOf(v.Value), v.Value)
    22  	db.AddError(err)
    23  	return clause.Expr{SQL: "?", Vars: []interface{}{newValue}}
    24  }
    25  
    26  // Field2 a standard field struct
    27  type Serializer struct{ expr }
    28  
    29  // Eq judge equal
    30  func (field Serializer) Eq(value schema.SerializerValuerInterface) Expr {
    31  	return expr{e: clause.Eq{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Eq"}}}
    32  }
    33  
    34  // Neq judge not equal
    35  func (field Serializer) Neq(value schema.SerializerValuerInterface) Expr {
    36  	return expr{e: clause.Neq{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Neq"}}}
    37  }
    38  
    39  // In ...
    40  func (field Serializer) In(values ...schema.SerializerValuerInterface) Expr {
    41  	return expr{e: clause.IN{Column: field.RawExpr(), Values: field.toSlice(values...)}}
    42  }
    43  
    44  // Gt ...
    45  func (field Serializer) Gt(value schema.SerializerValuerInterface) Expr {
    46  	return expr{e: clause.Gt{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Gt"}}}
    47  }
    48  
    49  // Gte ...
    50  func (field Serializer) Gte(value schema.SerializerValuerInterface) Expr {
    51  	return expr{e: clause.Gte{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Gte"}}}
    52  }
    53  
    54  // Lt ...
    55  func (field Serializer) Lt(value schema.SerializerValuerInterface) Expr {
    56  	return expr{e: clause.Lt{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Lt"}}}
    57  }
    58  
    59  // Lte ...
    60  func (field Serializer) Lte(value schema.SerializerValuerInterface) Expr {
    61  	return expr{e: clause.Lte{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Lte"}}}
    62  }
    63  
    64  // Like ...
    65  func (field Serializer) Like(value schema.SerializerValuerInterface) Expr {
    66  	return expr{e: clause.Like{Column: field.RawExpr(), Value: ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Like"}}}
    67  }
    68  
    69  // Value ...
    70  func (field Serializer) Value(value schema.SerializerValuerInterface) AssignExpr {
    71  	return field.value(ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "Value"})
    72  }
    73  
    74  // Sum ...
    75  func (field Serializer) Sum() Field {
    76  	return Field{field.sum()}
    77  }
    78  
    79  // IfNull ...
    80  func (field Serializer) IfNull(value schema.SerializerValuerInterface) Expr {
    81  	return field.ifNull(ValuerType{Column: field.ColumnName().String(), Value: value, FucName: "IfNull"})
    82  }
    83  
    84  func (field Serializer) toSlice(values ...schema.SerializerValuerInterface) []interface{} {
    85  	slice := make([]interface{}, len(values))
    86  	for i, v := range values {
    87  		slice[i] = ValuerType{Column: field.ColumnName().String(), Value: v, FucName: "In"}
    88  	}
    89  	return slice
    90  }