Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
Vanessa 2024-03-08 15:55:36 +08:00
commit a329d073ab

View file

@ -233,8 +233,51 @@ func ParseAttributeView(avID string) (ret *AttributeView, err error) {
ret = &AttributeView{}
if err = gulu.JSON.UnmarshalJSON(data, ret); nil != err {
if strings.Contains(err.Error(), ".relation.contents of type av.Value") {
// v3.0.3 兼容之前旧版本,通过正则将 "relation":{"contents":[".*"],"blockIDs": 替换为 "relation":{"contents":null,"blockIDs":
data = regexp.MustCompile(`"relation":{"contents":\[".*"\],"blockIDs":`).ReplaceAll(data, []byte(`"relation":{"contents":null,"blockIDs":`))
mapAv := map[string]interface{}{}
if err = gulu.JSON.UnmarshalJSON(data, &mapAv); nil != err {
logging.LogErrorf("unmarshal attribute view [%s] failed: %s", avID, err)
return
}
// v3.0.3 兼容之前旧版本,将 relation.contents[""] 转换为 null
keyValues := mapAv["keyValues"]
keyValuesMap := keyValues.([]interface{})
for _, kv := range keyValuesMap {
kvMap := kv.(map[string]interface{})
if values := kvMap["values"]; nil != values {
valuesMap := values.([]interface{})
for _, v := range valuesMap {
if vMap := v.(map[string]interface{}); nil != vMap["relation"] {
vMap["relation"].(map[string]interface{})["contents"] = nil
}
}
}
}
views := mapAv["views"]
viewsMap := views.([]interface{})
for _, view := range viewsMap {
if table := view.(map[string]interface{})["table"]; nil != table {
tableMap := table.(map[string]interface{})
if filters := tableMap["filters"]; nil != filters {
filtersMap := filters.([]interface{})
for _, f := range filtersMap {
if fMap := f.(map[string]interface{}); nil != fMap["value"] {
if valueMap := fMap["value"].(map[string]interface{}); nil != valueMap["relation"] {
valueMap["relation"].(map[string]interface{})["contents"] = nil
}
}
}
}
}
}
data, err = gulu.JSON.MarshalJSON(mapAv)
if nil != err {
logging.LogErrorf("marshal attribute view [%s] failed: %s", avID, err)
return
}
if err = gulu.JSON.UnmarshalJSON(data, ret); nil != err {
logging.LogErrorf("unmarshal attribute view [%s] failed: %s", avID, err)
return