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 }