diff --git a/kernel/api/av.go b/kernel/api/av.go index 61c931651..4aae90658 100644 --- a/kernel/api/av.go +++ b/kernel/api/av.go @@ -225,7 +225,24 @@ func getAttributeViewKeysByAvID(c *gin.Context) { return } avID := arg["avID"].(string) - ret.Data = model.GetAttributeViewKeysByAvID(avID) + ret.Data = model.GetAttributeViewKeysByID(avID) +} + +func getAttributeViewKeysByID(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + avID := arg["avID"].(string) + keyIDsArg := arg["keyIDs"].([]interface{}) + var keyIDs []string + for _, v := range keyIDsArg { + keyIDs = append(keyIDs, v.(string + } + ret.Data = model.GetAttributeViewKeysByID(avID, keyIDs...) } func getMirrorDatabaseBlocks(c *gin.Context) { diff --git a/kernel/api/router.go b/kernel/api/router.go index 1688f449d..96d1270b2 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -461,6 +461,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/av/setDatabaseBlockView", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, setDatabaseBlockView) ginServer.Handle("POST", "/api/av/getMirrorDatabaseBlocks", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, getMirrorDatabaseBlocks) ginServer.Handle("POST", "/api/av/getAttributeViewKeysByAvID", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, getAttributeViewKeysByAvID) + ginServer.Handle("POST", "/api/av/getAttributeViewKeysByID", model.CheckAuth, getAttributeViewKeysByID) ginServer.Handle("POST", "/api/av/duplicateAttributeViewBlock", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, duplicateAttributeViewBlock) ginServer.Handle("POST", "/api/av/appendAttributeViewDetachedBlocksWithValues", model.CheckAuth, model.CheckAdminRole, model.CheckReadonly, appendAttributeViewDetachedBlocksWithValues) ginServer.Handle("POST", "/api/av/getCurrentAttrViewImages", model.CheckAuth, getCurrentAttrViewImages) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index b5d6b2ce0..5d1434728 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -1179,7 +1179,7 @@ func DuplicateDatabaseBlock(avID string) (newAvID, newBlockID string, err error) return } -func GetAttributeViewKeysByAvID(avID string) (ret []*av.Key) { +func GetAttributeViewKeysByID(avID string, keyIDs ...string) (ret []*av.Key) { ret = []*av.Key{} attrView, err := av.ParseAttributeView(avID) @@ -1188,9 +1188,21 @@ func GetAttributeViewKeysByAvID(avID string) (ret []*av.Key) { return } + if 1 > len(keyIDs) { + for _, keyValues := range attrView.KeyValues { + key := keyValues.Key + ret = append(ret, key) + } + return + } + for _, keyValues := range attrView.KeyValues { key := keyValues.Key - ret = append(ret, key) + for _, keyID := range keyIDs { + if key.ID == keyID { + ret = append(ret, key) + } + } } return ret }