Skip to content

Commit c0481d6

Browse files
committed
feat:新增数组字段 --story=128495448 字段类型: 数组
1 parent f35bf7d commit c0481d6

File tree

1 file changed

+46
-45
lines changed

1 file changed

+46
-45
lines changed

src/common/metadata/attribute.go

Lines changed: 46 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -982,28 +982,24 @@ func validArrayItem[T any](ty string, data any) ([]T, error) {
982982

983983
func (attribute *Attribute) validArray(ctx context.Context, val interface{}, key string) errors.RawErrorInfo {
984984
rid := util.ExtractRequestUserFromContext(ctx)
985-
985+
errorInfo := errors.RawErrorInfo{
986+
ErrCode: common.CCErrCommParamsInvalid,
987+
Args: []interface{}{key},
988+
}
986989
if val == nil {
987990
if attribute.IsRequired {
988991
blog.Error("params can not be null, array field key: %s, rid: %s", key, rid)
989-
return errors.RawErrorInfo{
990-
ErrCode: common.CCErrCommParamsNeedSet,
991-
Args: []interface{}{key},
992-
}
992+
errorInfo.ErrCode = common.CCErrCommParamsNeedSet
993+
return errorInfo
993994
}
994995
return errors.RawErrorInfo{}
995996
}
996997
arrayOpt, err := ParseArrayOption(attribute.Option)
997998
if err != nil {
998-
return errors.RawErrorInfo{
999-
ErrCode: common.CCErrCommParamsIsInvalid,
1000-
Args: []interface{}{err},
1001-
}
1002-
}
1003-
errorInfo := errors.RawErrorInfo{
1004-
ErrCode: common.CCErrCommParamsInvalid,
1005-
Args: nil,
999+
errorInfo.Args = []interface{}{err}
1000+
return errorInfo
10061001
}
1002+
10071003
itemType, _ := common.IsFieldTypeArray(attribute.PropertyType)
10081004
switch itemType {
10091005
case common.FieldTypeBool, common.FieldTypeTime, common.FieldTypeDate:
@@ -1013,37 +1009,7 @@ func (attribute *Attribute) validArray(ctx context.Context, val interface{}, key
10131009
return errorInfo
10141010
}
10151011
case common.FieldTypeSingleChar:
1016-
value, err := validArrayItem[string](itemType, val)
1017-
if err != nil {
1018-
blog.Errorf("array params %s not valid,value: %v, option:%#v,err:%v,rid: %s", key, val, attribute.Option, err, rid)
1019-
errorInfo.Args = []any{attribute.Option, err}
1020-
return errorInfo
1021-
}
1022-
strReg, err := regexp.Compile(arrayOpt.CharOption)
1023-
if err != nil {
1024-
blog.Errorf(`regexp "%s" invalid, err: %v, rid: %s`, arrayOpt, err, rid)
1025-
return errors.RawErrorInfo{
1026-
ErrCode: common.CCErrCommParamsIsInvalid,
1027-
Args: []interface{}{arrayOpt},
1028-
}
1029-
}
1030-
for _, v := range value {
1031-
if len(v) > common.FieldTypeSingleLenChar {
1032-
blog.Errorf("params over length %d, rid: %s", common.FieldTypeSingleLenChar, rid)
1033-
return errors.RawErrorInfo{
1034-
ErrCode: common.CCErrCommOverLimit,
1035-
Args: []interface{}{key},
1036-
}
1037-
}
1038-
if !strReg.MatchString(v) {
1039-
blog.Errorf(`params "%s" not match regexp "%s", rid: %s`, val, arrayOpt, rid)
1040-
return errors.RawErrorInfo{
1041-
ErrCode: common.CCErrFieldRegValidFailed,
1042-
Args: []interface{}{key},
1043-
}
1044-
}
1045-
}
1046-
1012+
return attribute.validArrayString(itemType, val, key, rid, arrayOpt)
10471013
case common.FieldTypeInt:
10481014
result, err := validArrayItem[int64](itemType, val)
10491015
if err != nil {
@@ -1061,7 +1027,8 @@ func (attribute *Attribute) validArray(ctx context.Context, val interface{}, key
10611027
case common.FieldTypeFloat:
10621028
result, err := validArrayItem[float64](itemType, val)
10631029
if err != nil {
1064-
blog.Errorf("array params %s not valid,value:%v,option:%#v,err:%v, rid: %s", key, val, arrayOpt.FloatOption, err, rid)
1030+
blog.Errorf("array params %s not valid,value:%v,option:%#v,err:%v, rid: %s", key, val,
1031+
arrayOpt.FloatOption, err, rid)
10651032
errorInfo.Args = []any{arrayOpt.FloatOption, err}
10661033
return errorInfo
10671034
}
@@ -1080,6 +1047,40 @@ func (attribute *Attribute) validArray(ctx context.Context, val interface{}, key
10801047
return errors.RawErrorInfo{}
10811048
}
10821049

1050+
func (attribute *Attribute) validArrayString(itemType string, val interface{}, key string,
1051+
rid string, arrayOpt ArrayOption) errors.RawErrorInfo {
1052+
1053+
errorInfo := errors.RawErrorInfo{
1054+
ErrCode: common.CCErrCommParamsInvalid,
1055+
Args: []interface{}{key},
1056+
}
1057+
value, err := validArrayItem[string](itemType, val)
1058+
if err != nil {
1059+
blog.Errorf("array params %s not valid,value: %v, option:%#v,err:%v,rid: %s", key, val, attribute.Option, err, rid)
1060+
errorInfo.Args = []any{attribute.Option, err}
1061+
return errorInfo
1062+
}
1063+
strReg, err := regexp.Compile(arrayOpt.CharOption)
1064+
if err != nil {
1065+
blog.Errorf(`regexp "%s" invalid, err: %v, rid: %s`, arrayOpt, err, rid)
1066+
errorInfo.Args = []interface{}{arrayOpt}
1067+
return errorInfo
1068+
}
1069+
for _, v := range value {
1070+
if len(v) > common.FieldTypeSingleLenChar {
1071+
blog.Errorf("params over length %d, rid: %s", common.FieldTypeSingleLenChar, rid)
1072+
errorInfo.ErrCode = common.CCErrCommOverLimit
1073+
return errorInfo
1074+
}
1075+
if !strReg.MatchString(v) {
1076+
blog.Errorf(`params "%s" not match regexp "%s", rid: %s`, val, arrayOpt, rid)
1077+
errorInfo.ErrCode = common.CCErrFieldRegValidFailed
1078+
return errorInfo
1079+
}
1080+
}
1081+
return errors.RawErrorInfo{}
1082+
}
1083+
10831084
// validOrganization valid object attribute that is organization type
10841085
func (attribute *Attribute) validOrganization(ctx context.Context, val interface{}, key string) errors.RawErrorInfo {
10851086
rid := util.ExtractRequestIDFromContext(ctx)

0 commit comments

Comments
 (0)