fix: optimzed sync

This commit is contained in:
Qu Xuan
2020-09-03 21:10:29 +08:00
parent fd318a9cda
commit ce032ecf17
5 changed files with 32 additions and 76 deletions
+26 -25
View File
@@ -1124,29 +1124,31 @@ func _doCreateItem(
log.Errorf("doCreateItem: fail to decode json data %s", data)
return nil, fmt.Errorf("fail to decode json data %s", data)
}
var err error
var generateName string
if manager.EnableGenerateName() {
generateName, _ = dataDict.GetString("generate_name")
if len(generateName) > 0 {
dataDict.Remove("generate_name")
newName, err := GenerateName2(manager, ownerId, generateName, nil, baseIndex)
if err != nil {
return nil, err
}
dataDict.Add(jsonutils.NewString(newName), "name")
} /*else {
name, _ := data.GetString("name")
if len(name) > 0 {
err = NewNameValidator(manager, ownerId, name)
if err != nil {
return nil, err
}
}
}*/
var err error
info := struct {
GenerateName string
Name string
}{}
dataDict.Unmarshal(&info)
if !manager.EnableGenerateName() {
if len(info.GenerateName) > 0 && len(info.Name) == 0 {
info.Name = info.GenerateName
}
info.GenerateName = ""
}
if len(info.GenerateName) > 0 {
info.Name, err = GenerateName2(manager, ownerId, info.GenerateName, nil, baseIndex)
if err != nil {
return nil, err
}
}
dataDict.Set("name", jsonutils.NewString(info.Name))
dataDict.Remove("generate_name")
if batchCreate {
dataDict, err = manager.BatchCreateValidateCreateData(ctx, userCred, ownerId, query, dataDict)
} else {
@@ -1158,9 +1160,8 @@ func _doCreateItem(
}
// run name validation after validate create data
uniqValues := manager.FetchUniqValues(ctx, dataDict)
name, _ := dataDict.GetString("name")
if len(name) > 0 {
err = NewNameValidator(manager, ownerId, name, uniqValues)
if len(info.Name) > 0 {
err = NewNameValidator(manager, ownerId, info.Name, uniqValues)
if err != nil {
return nil, err
}
@@ -1188,9 +1189,9 @@ func _doCreateItem(
return nil, httperrors.NewGeneralError(err)
}
// save generateName
if len(generateName) > 0 {
if len(info.GenerateName) > 0 {
if standaloneMode, ok := model.(IStandaloneModel); ok {
standaloneMode.SetMetadata(ctx, "generate_name", generateName, userCred)
standaloneMode.SetMetadata(ctx, "generate_name", info.GenerateName, userCred)
}
}
// HACK: set data same as dataDict
@@ -34,7 +34,7 @@ type SStatusDomainLevelUserResourceBase struct {
SStatusDomainLevelResourceBase
// 本地用户Id
OwnerId string `width:"128" charset:"ascii" index:"true" list:"user" nullable:"false" create:"required"`
OwnerId string `width:"128" charset:"ascii" index:"true" list:"user" nullable:"false" create:"optional"`
}
type SStatusDomainLevelUserResourceBaseManager struct {