From cb73513941df04912d1afc3c30dce4037671a153 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 12 Jul 2023 21:37:51 +0800 Subject: [PATCH 1/6] :recycle: Refactor av data structure --- kernel/av/av.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/av/av.go b/kernel/av/av.go index 7198d8966..bad853f99 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -130,7 +130,7 @@ type View struct { ID string `json:"id"` // 视图 ID Name string `json:"name"` // 视图名称 - CurrentLayoutID string `json:"CurrentLayoutID"` // 当前布局 ID + CurrentLayoutID string `json:"currentLayoutID"` // 当前布局 ID CurrentLayoutType LayoutType `json:"type"` // 当前布局类型 Table *LayoutTable `json:"table,omitempty"` // 表格布局 } From 36f7083529a1b9d37a480a7451f4ca8f761674ec Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 12 Jul 2023 21:39:55 +0800 Subject: [PATCH 2/6] :recycle: Refactor av data structure --- kernel/api/av.go | 2 +- kernel/av/av.go | 36 +++++++++++++++++----------------- kernel/model/attribute_view.go | 26 ++++++++++++------------ 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/kernel/api/av.go b/kernel/api/av.go index a1a6f94a2..5e9b68385 100644 --- a/kernel/api/av.go +++ b/kernel/api/av.go @@ -47,7 +47,7 @@ func renderAttributeView(c *gin.Context) { view := map[string]interface{}{ "id": v.ID, "name": v.Name, - "type": v.CurrentLayoutType, + "type": v.LayoutType, } views = append(views, view) diff --git a/kernel/av/av.go b/kernel/av/av.go index bad853f99..56099d607 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -31,12 +31,12 @@ import ( // AttributeView 描述了属性视图的结构。 type AttributeView struct { - Spec int `json:"spec"` // 格式版本 - ID string `json:"id"` // 属性视图 ID - Name string `json:"name"` // 属性视图名称 - KeyValues []*KeyValues `json:"keyValues"` // 属性视图属性列值 - CurrentViewID string `json:"currentViewID"` // 当前视图 ID - Views []*View `json:"views"` // 视图 + Spec int `json:"spec"` // 格式版本 + ID string `json:"id"` // 属性视图 ID + Name string `json:"name"` // 属性视图名称 + KeyValues []*KeyValues `json:"keyValues"` // 属性视图属性列值 + ViewID string `json:"viewID"` // 当前视图 ID + Views []*View `json:"views"` // 视图 } // KeyValues 描述了属性视图属性列值的结构。 @@ -130,9 +130,9 @@ type View struct { ID string `json:"id"` // 视图 ID Name string `json:"name"` // 视图名称 - CurrentLayoutID string `json:"currentLayoutID"` // 当前布局 ID - CurrentLayoutType LayoutType `json:"type"` // 当前布局类型 - Table *LayoutTable `json:"table,omitempty"` // 表格布局 + LayoutID string `json:"layoutID"` // 当前布局 ID + LayoutType LayoutType `json:"type"` // 当前布局类型 + Table *LayoutTable `json:"table,omitempty"` // 表格布局 } // LayoutType 描述了视图布局的类型。 @@ -146,10 +146,10 @@ func NewView() *View { name := "Table" layoutID := ast.NewNodeID() return &View{ - ID: ast.NewNodeID(), - Name: name, - CurrentLayoutID: layoutID, - CurrentLayoutType: LayoutTypeTable, + ID: ast.NewNodeID(), + Name: name, + LayoutID: layoutID, + LayoutType: LayoutTypeTable, Table: &LayoutTable{ Spec: 0, ID: layoutID, @@ -173,11 +173,11 @@ func NewAttributeView(id string) (ret *AttributeView) { view := NewView() key := NewKey("Block", KeyTypeBlock) ret = &AttributeView{ - Spec: 0, - ID: id, - KeyValues: []*KeyValues{{Key: key}}, - CurrentViewID: view.ID, - Views: []*View{view}, + Spec: 0, + ID: id, + KeyValues: []*KeyValues{{Key: key}}, + ViewID: view.ID, + Views: []*View{view}, } view.Table.Columns = []*ViewTableColumn{{ID: key.ID}} return diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 1f5378318..df0b8a8fe 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -44,9 +44,9 @@ func RenderAttributeView(avID string) (viewable av.Viewable, attrView *av.Attrib } var view *av.View - if "" != attrView.CurrentViewID { + if "" != attrView.ViewID { for _, v := range attrView.Views { - if v.ID == attrView.CurrentViewID { + if v.ID == attrView.ViewID { view = v break } @@ -55,7 +55,7 @@ func RenderAttributeView(avID string) (viewable av.Viewable, attrView *av.Attrib view = attrView.Views[0] } - switch view.CurrentLayoutType { + switch view.LayoutType { case av.LayoutTypeTable: viewable, err = renderAttributeViewTable(attrView, view) } @@ -184,7 +184,7 @@ func setAttributeViewFilters(operation *Operation) (err error) { return } - switch view.CurrentLayoutType { + switch view.LayoutType { case av.LayoutTypeTable: if err = gulu.JSON.UnmarshalJSON(data, &view.Table.Filters); nil != err { return @@ -221,7 +221,7 @@ func setAttributeViewSorts(operation *Operation) (err error) { return } - switch view.CurrentLayoutType { + switch view.LayoutType { case av.LayoutTypeTable: if err = gulu.JSON.UnmarshalJSON(data, &view.Table.Sorts); nil != err { return @@ -311,7 +311,7 @@ func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tre return } - switch view.CurrentLayoutType { + switch view.LayoutType { case av.LayoutTypeTable: if "" != operation.PreviousID { for i, id := range view.Table.RowIDs { @@ -375,7 +375,7 @@ func setAttributeViewColWidth(operation *Operation) (err error) { return } - switch view.CurrentLayoutType { + switch view.LayoutType { case av.LayoutTypeTable: for _, column := range view.Table.Columns { if column.ID == operation.ID { @@ -408,7 +408,7 @@ func setAttributeViewColWrap(operation *Operation) (err error) { return } - switch view.CurrentLayoutType { + switch view.LayoutType { case av.LayoutTypeTable: for _, column := range view.Table.Columns { if column.ID == operation.ID { @@ -441,7 +441,7 @@ func setAttributeViewColHidden(operation *Operation) (err error) { return } - switch view.CurrentLayoutType { + switch view.LayoutType { case av.LayoutTypeTable: for _, column := range view.Table.Columns { if column.ID == operation.ID { @@ -487,7 +487,7 @@ func sortAttributeViewRow(operation *Operation) (err error) { return } - switch view.CurrentLayoutType { + switch view.LayoutType { case av.LayoutTypeTable: view.Table.RowIDs = append(view.Table.RowIDs[:index], view.Table.RowIDs[index+1:]...) for i, r := range view.Table.RowIDs { @@ -522,7 +522,7 @@ func sortAttributeViewColumn(operation *Operation) (err error) { return } - switch view.CurrentLayoutType { + switch view.LayoutType { case av.LayoutTypeTable: var col *av.ViewTableColumn var index, previousIndex int @@ -576,7 +576,7 @@ func addAttributeViewColumn(operation *Operation) (err error) { key := av.NewKey(operation.Name, keyType) attrView.KeyValues = append(attrView.KeyValues, &av.KeyValues{Key: key}) - switch view.CurrentLayoutType { + switch view.LayoutType { case av.LayoutTypeTable: view.Table.Columns = append(view.Table.Columns, &av.ViewTableColumn{ID: key.ID}) } @@ -638,7 +638,7 @@ func removeAttributeViewColumn(operation *Operation) (err error) { } for _, view := range attrView.Views { - switch view.CurrentLayoutType { + switch view.LayoutType { case av.LayoutTypeTable: for i, column := range view.Table.Columns { if column.ID == operation.ID { From e24a7f5d0120ca37e0dbcdd8576f72a01ce4b6d6 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 12 Jul 2023 21:44:34 +0800 Subject: [PATCH 3/6] :recycle: Refactor av data structure --- kernel/model/attribute_view.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index df0b8a8fe..5773532d3 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -68,7 +68,7 @@ func RenderAttributeView(avID string) (viewable av.Viewable, attrView *av.Attrib func renderAttributeViewTable(attrView *av.AttributeView, view *av.View) (ret *av.Table, err error) { ret = &av.Table{ - ID: view.Table.ID, + ID: view.ID, Name: view.Name, Columns: []*av.TableColumn{}, Rows: []*av.TableRow{}, From e66fc9c096ba82fc0ad137af615af2f3d259a078 Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 12 Jul 2023 21:52:41 +0800 Subject: [PATCH 4/6] :recycle: Refactor av data structure --- kernel/av/av.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/kernel/av/av.go b/kernel/av/av.go index 56099d607..b675cfc59 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -130,7 +130,6 @@ type View struct { ID string `json:"id"` // 视图 ID Name string `json:"name"` // 视图名称 - LayoutID string `json:"layoutID"` // 当前布局 ID LayoutType LayoutType `json:"type"` // 当前布局类型 Table *LayoutTable `json:"table,omitempty"` // 表格布局 } @@ -144,15 +143,13 @@ const ( func NewView() *View { name := "Table" - layoutID := ast.NewNodeID() return &View{ ID: ast.NewNodeID(), Name: name, - LayoutID: layoutID, LayoutType: LayoutTypeTable, Table: &LayoutTable{ Spec: 0, - ID: layoutID, + ID: ast.NewNodeID(), Filters: []*ViewFilter{}, Sorts: []*ViewSort{}, }, From ba396a5573a2eb66b1d32d9d6bd2f5a0534001ce Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 12 Jul 2023 23:52:25 +0800 Subject: [PATCH 5/6] :recycle: Refactor av data structure --- kernel/av/av.go | 38 ++++++++++++++++++++-------------- kernel/av/table.go | 8 +++---- kernel/model/attribute_view.go | 18 ++++++++-------- kernel/model/transaction.go | 1 - 4 files changed, 36 insertions(+), 29 deletions(-) diff --git a/kernel/av/av.go b/kernel/av/av.go index b675cfc59..71f0bf542 100644 --- a/kernel/av/av.go +++ b/kernel/av/av.go @@ -41,8 +41,8 @@ type AttributeView struct { // KeyValues 描述了属性视图属性列值的结构。 type KeyValues struct { - Key *Key `json:"key"` // 属性视图属性列 - Values []*Value `json:"values"` // 属性视图属性列值 + Key *Key `json:"key"` // 属性视图属性列 + Values []*Value `json:"values,omitempty"` // 属性视图属性列值 } type KeyType string @@ -65,7 +65,7 @@ type Key struct { // 以下是某些列类型的特有属性 - Options []*KeySelectOption `json:"options"` // 选项列表 + Options []*KeySelectOption `json:"options,omitempty"` // 选项列表 } func NewKey(name string, keyType KeyType) *Key { @@ -182,21 +182,29 @@ func NewAttributeView(id string) (ret *AttributeView) { func ParseAttributeView(avID string) (ret *AttributeView, err error) { avJSONPath := getAttributeViewDataPath(avID) + toCreate := false if !gulu.File.IsExist(avJSONPath) { ret = NewAttributeView(avID) - return + toCreate = true } - data, err := filelock.ReadFile(avJSONPath) - if nil != err { - logging.LogErrorf("read attribute view [%s] failed: %s", avID, err) - return - } + if !toCreate { + 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 + 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 + } } return } @@ -216,9 +224,9 @@ func SaveAttributeView(av *AttributeView) (err error) { return } -func (av *AttributeView) GetView(viewID string) (ret *View, err error) { +func (av *AttributeView) GetView() (ret *View, err error) { for _, v := range av.Views { - if v.ID == viewID { + if v.ID == av.ViewID { ret = v return } diff --git a/kernel/av/table.go b/kernel/av/table.go index e97e927f2..e3856ffdc 100644 --- a/kernel/av/table.go +++ b/kernel/av/table.go @@ -37,10 +37,10 @@ type LayoutTable struct { type ViewTableColumn struct { ID string `json:"id"` // 列 ID - Wrap bool `json:"wrap"` // 是否换行 - Hidden bool `json:"hidden"` // 是否隐藏 - Width string `json:"width"` // 列宽度 - Calc *ColumnCalc `json:"calc"` // 计算 + Wrap bool `json:"wrap"` // 是否换行 + Hidden bool `json:"hidden"` // 是否隐藏 + Width string `json:"width"` // 列宽度 + Calc *ColumnCalc `json:"calc,omitempty"` // 计算 } type Calculable interface { diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 5773532d3..af2507c1b 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -173,7 +173,7 @@ func setAttributeViewFilters(operation *Operation) (err error) { return } - view, err := attrView.GetView(operation.ViewID) + view, err := attrView.GetView() if nil != err { return } @@ -210,7 +210,7 @@ func setAttributeViewSorts(operation *Operation) (err error) { return } - view, err := attrView.GetView(operation.ViewID) + view, err := attrView.GetView() if nil != err { return } @@ -272,7 +272,7 @@ func addAttributeViewBlock(blockID string, operation *Operation, tree *parse.Tre return } - view, err := attrView.GetView(operation.ViewID) + view, err := attrView.GetView() if nil != err { return } @@ -370,7 +370,7 @@ func setAttributeViewColWidth(operation *Operation) (err error) { return } - view, err := attrView.GetView(operation.ViewID) + view, err := attrView.GetView() if nil != err { return } @@ -403,7 +403,7 @@ func setAttributeViewColWrap(operation *Operation) (err error) { return } - view, err := attrView.GetView(operation.ViewID) + view, err := attrView.GetView() if nil != err { return } @@ -436,7 +436,7 @@ func setAttributeViewColHidden(operation *Operation) (err error) { return } - view, err := attrView.GetView(operation.ViewID) + view, err := attrView.GetView() if nil != err { return } @@ -469,7 +469,7 @@ func sortAttributeViewRow(operation *Operation) (err error) { return } - view, err := attrView.GetView(operation.ViewID) + view, err := attrView.GetView() if nil != err { return } @@ -517,7 +517,7 @@ func sortAttributeViewColumn(operation *Operation) (err error) { return } - view, err := attrView.GetView(operation.ViewID) + view, err := attrView.GetView() if nil != err { return } @@ -565,7 +565,7 @@ func addAttributeViewColumn(operation *Operation) (err error) { return } - view, err := attrView.GetView(operation.ViewID) + view, err := attrView.GetView() if nil != err { return } diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index ef2d460a4..d63d47e90 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -1052,7 +1052,6 @@ type Operation struct { DeckID string `json:"deckID"` // 用于添加/删除闪卡 AvID string `json:"avID"` // 属性视图 ID - ViewID string `json:"viewID"` // 属性视图的视图 ID SrcIDs []string `json:"srcIDs"` // 用于将块拖拽到属性视图中 Name string `json:"name"` // 属性视图列名 Typ string `json:"type"` // 属性视图列类型 From a55c109623cb3bcebca160a67dff4321f1959e3b Mon Sep 17 00:00:00 2001 From: Daniel <845765@qq.com> Date: Wed, 12 Jul 2023 23:54:42 +0800 Subject: [PATCH 6/6] :recycle: Refactor av data structure --- kernel/model/transaction.go | 1 - 1 file changed, 1 deletion(-) diff --git a/kernel/model/transaction.go b/kernel/model/transaction.go index d63d47e90..50be53787 100644 --- a/kernel/model/transaction.go +++ b/kernel/model/transaction.go @@ -1056,7 +1056,6 @@ type Operation struct { Name string `json:"name"` // 属性视图列名 Typ string `json:"type"` // 属性视图列类型 KeyID string `json:"keyID"` // 属性视列 ID - RowID string `json:"rowID"` // 属性视图行 ID(块 ID) discard bool // 用于标识是否在事务合并中丢弃 }