From 89150bb868308263c6ef61f62183cd51021068c1 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Mon, 31 Jul 2023 11:20:58 +0800 Subject: [PATCH] :art: Update av --- kernel/api/av.go | 3 ++- kernel/av/av.go | 40 +++++++++++++++------------------- kernel/model/attribute_view.go | 10 ++++++++- 3 files changed, 28 insertions(+), 25 deletions(-) diff --git a/kernel/api/av.go b/kernel/api/av.go index 4323a5b80..b1c9426dd 100644 --- a/kernel/api/av.go +++ b/kernel/api/av.go @@ -35,7 +35,8 @@ func renderAttributeView(c *gin.Context) { } id := arg["id"].(string) - view, attrView, err := model.RenderAttributeView(id) + nodeID := arg["nodeID"].(string) + view, attrView, err := model.RenderAttributeView(id, nodeID) if nil != err { ret.Code = -1 ret.Msg = err.Error() diff --git a/kernel/av/av.go b/kernel/av/av.go index c9109d0fb..f2aa13548 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -38,6 +38,7 @@ import ( type AttributeView struct { Spec int `json:"spec"` // 格式版本 ID string `json:"id"` // 属性视图 ID + NodeID string `json:"nodeID"` // 属性视图所在节点 ID Name string `json:"name"` // 属性视图名称 KeyValues []*KeyValues `json:"keyValues"` // 属性视图属性列值 ViewID string `json:"viewID"` // 当前视图 ID @@ -269,7 +270,7 @@ type Viewable interface { GetID() string } -func NewAttributeView(id string) (ret *AttributeView) { +func NewAttributeView(id, nodeID string) (ret *AttributeView) { view := NewView() key := NewKey(ast.NewNodeID(), "Block", KeyTypeBlock) ret = &AttributeView{ @@ -278,36 +279,29 @@ func NewAttributeView(id string) (ret *AttributeView) { KeyValues: []*KeyValues{{Key: key}}, ViewID: view.ID, Views: []*View{view}, + NodeID: nodeID, } view.Table.Columns = []*ViewTableColumn{{ID: key.ID}} return } func ParseAttributeView(avID string) (ret *AttributeView, err error) { - avJSONPath := getAttributeViewDataPath(avID) - toCreate := false + avJSONPath := GetAttributeViewDataPath(avID) if !gulu.File.IsExist(avJSONPath) { - ret = NewAttributeView(avID) - toCreate = true + err = ErrViewNotFound + return } - if !toCreate { - data, readErr := filelock.ReadFile(avJSONPath) - if nil != readErr { - logging.LogErrorf("read attribute view [%s] failed: %s", avID, readErr) - return - } + data, readErr := filelock.ReadFile(avJSONPath) + if nil != readErr { + logging.LogErrorf("read attribute view [%s] failed: %s", avID, readErr) + return + } - ret = &AttributeView{} - if err = gulu.JSON.UnmarshalJSON(data, ret); nil != err { - logging.LogErrorf("unmarshal attribute view [%s] failed: %s", avID, err) - return - } - } else { - if err = SaveAttributeView(ret); nil != err { - logging.LogErrorf("save attribute view [%s] failed: %s", avID, err) - return - } + ret = &AttributeView{} + if err = gulu.JSON.UnmarshalJSON(data, ret); nil != err { + logging.LogErrorf("unmarshal attribute view [%s] failed: %s", avID, err) + return } return } @@ -319,7 +313,7 @@ func SaveAttributeView(av *AttributeView) (err error) { return } - avJSONPath := getAttributeViewDataPath(av.ID) + avJSONPath := GetAttributeViewDataPath(av.ID) if err = filelock.WriteFile(avJSONPath, data); nil != err { logging.LogErrorf("save attribute view [%s] failed: %s", av.ID, err) return @@ -359,7 +353,7 @@ func (av *AttributeView) GetBlockKeyValues() (ret *KeyValues) { return } -func getAttributeViewDataPath(avID string) (ret string) { +func GetAttributeViewDataPath(avID string) (ret string) { av := filepath.Join(util.DataDir, "storage", "av") ret = filepath.Join(av, avID+".json") if !gulu.File.IsDir(av) { diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 74adc59e8..5a60f3e6d 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -86,9 +86,17 @@ func GetBlockAttributeViewKeys(blockID string) (ret []*BlockAttributeViewKeys) { return } -func RenderAttributeView(avID string) (viewable av.Viewable, attrView *av.AttributeView, err error) { +func RenderAttributeView(avID, nodeID string) (viewable av.Viewable, attrView *av.AttributeView, err error) { waitForSyncingStorages() + if avJSONPath := av.GetAttributeViewDataPath(avID); !gulu.File.IsExist(avJSONPath) { + attrView = av.NewAttributeView(avID, nodeID) + if err = av.SaveAttributeView(attrView); nil != err { + logging.LogErrorf("save attribute view [%s] failed: %s", avID, err) + return + } + } + attrView, err = av.ParseAttributeView(avID) if nil != err { logging.LogErrorf("parse attribute view [%s] failed: %s", avID, err)