Bladeren bron

修改entity_curd字符串字段的行为

yjp 5 maanden geleden
bovenliggende
commit
d5d942c557
2 gewijzigde bestanden met toevoegingen van 40 en 8 verwijderingen
  1. 23 7
      convenient/entity_crud/service.go
  2. 17 1
      convenient/entity_crud/simple.go

+ 23 - 7
convenient/entity_crud/service.go

@@ -14,6 +14,7 @@ import (
 	"git.sxidc.com/go-tools/utils/reflectutils"
 	"github.com/pkg/errors"
 	"reflect"
+	"strings"
 )
 
 func Create(tableName string, needCreateUserID bool, callbacks *CreateCallbacks, needTx bool) binding.ServiceFunc[string] {
@@ -48,11 +49,6 @@ func Create(tableName string, needCreateUserID bool, callbacks *CreateCallbacks,
 			return callbackOnCreateErrorReturn(callbacks, c, params, e, make(map[string]any), err, i)
 		}
 
-		err = domain.CheckFieldsForCreate(e, e.GetFieldMap())
-		if err != nil {
-			return callbackOnCreateErrorReturn(callbacks, c, params, e, make(map[string]any), err, i)
-		}
-
 		if domain.HasField(e, entity.FieldCreateUserID) && domain.HasField(e, entity.FieldLastUpdateUserID) {
 			createUserID, err := domain.Field[string](e, entity.FieldCreateUserID)
 			if err != nil {
@@ -285,7 +281,7 @@ type CustomCondition struct {
 
 type FormCustomConditionFunc func(c *api.Context, params request.Params, e entity.Entity, i *infrastructure.Infrastructure) (*CustomCondition, error)
 
-func Query[O any](tableName string, orderBy string, callbacks *QueryCallbacks[O], conditionFieldCallback ConditionFieldCallback, formCustomConditionFunc FormCustomConditionFunc) binding.ServiceFunc[response.InfosData[O]] {
+func Query[O any](tableName string, orderBy string, stringFieldQueryCondition string, callbacks *QueryCallbacks[O], conditionFieldCallback ConditionFieldCallback, formCustomConditionFunc FormCustomConditionFunc) binding.ServiceFunc[response.InfosData[O]] {
 	return func(c *api.Context, params request.Params, objects []domain.Object, i *infrastructure.Infrastructure) (response.InfosData[O], error) {
 		errResponse := response.InfosData[O]{
 			Infos: make([]O, 0),
@@ -332,7 +328,27 @@ func Query[O any](tableName string, orderBy string, callbacks *QueryCallbacks[O]
 				if !hasDeal {
 					fieldValue := reflect.ValueOf(field.Value)
 					if !fieldValue.IsZero() {
-						conditions.Equal(field.ColumnName, field.Value)
+						if fieldValue.Type().Kind() != reflect.String {
+							conditions.Equal(field.ColumnName, field.Value)
+						} else {
+							stringValue, ok := field.Value.(string)
+							if !ok {
+								return errResponse, errors.New("字符串字段值类型错误")
+							}
+
+							switch stringFieldQueryCondition {
+							case StringFieldQueryConditionEqual:
+								conditions.Equal(field.ColumnName, stringValue)
+							case StringFieldQueryConditionTrimSpaceEqual:
+								conditions.Equal(field.ColumnName, strings.TrimSpace(stringValue))
+							case StringFieldQueryConditionLike:
+								conditions.Like(field.ColumnName, "%"+stringValue+"%")
+							case StringFieldQueryConditionTrimSpaceLike:
+								conditions.Like(field.ColumnName, "%"+strings.TrimSpace(stringValue)+"%")
+							default:
+								conditions.Equal(field.ColumnName, stringValue)
+							}
+						}
 					}
 				}
 			}

+ 17 - 1
convenient/entity_crud/simple.go

@@ -100,7 +100,7 @@ func (simple *Simple[I]) bind(binder *binding.Binder) {
 			SendResponseFunc: response.SendInfosResponse[I],
 			RequestParams:    simple.QueryQueryParams,
 			Objects:          []domain.Object{simple.Entity},
-			ServiceFunc:      Query[I](tableName, queryOptions.orderBy, queryOptions.callbacks, queryOptions.conditionFieldCallback, queryOptions.formCustomConditionFunc),
+			ServiceFunc:      Query[I](tableName, queryOptions.orderBy, queryOptions.StringFieldQueryCondition, queryOptions.callbacks, queryOptions.conditionFieldCallback, queryOptions.formCustomConditionFunc),
 		}, queryMiddlewares...)
 	}
 
@@ -214,6 +214,13 @@ type UpdateOptions struct {
 	middlewares []binding.Middleware
 }
 
+const (
+	StringFieldQueryConditionEqual          = "equal"
+	StringFieldQueryConditionTrimSpaceEqual = "trim-space-equal"
+	StringFieldQueryConditionLike           = "like"
+	StringFieldQueryConditionTrimSpaceLike  = "trim-space-like"
+)
+
 type QueryOptions[I any] struct {
 	// 关闭查询
 	disable bool
@@ -232,6 +239,9 @@ type QueryOptions[I any] struct {
 
 	// OrderBy
 	orderBy string
+
+	// 字符串类型字段使用的查询条件
+	StringFieldQueryCondition string
 }
 
 type GetByIDOptions[I any] struct {
@@ -371,6 +381,12 @@ func WithQueryOrderBy[I any](orderBy string) QueryOption[I] {
 	}
 }
 
+func WithQueryStringFieldQueryCondition[I any](queryCondition string) QueryOption[I] {
+	return func(options *QueryOptions[I]) {
+		options.StringFieldQueryCondition = queryCondition
+	}
+}
+
 func WithDisableGetByID[I any]() GetByIDOption[I] {
 	return func(options *GetByIDOptions[I]) {
 		options.disable = true