🎨 Add some database related internal kernel APIs https://github.com/siyuan-note/siyuan/issues/10160

This commit is contained in:
Daniel 2024-01-12 21:24:55 +08:00
parent a92be962d4
commit 6bd04ecb2a
No known key found for this signature in database
GPG key ID: 86211BA83DF03017
3 changed files with 93 additions and 23 deletions

View file

@ -26,6 +26,71 @@ import (
"github.com/siyuan-note/siyuan/kernel/util" "github.com/siyuan-note/siyuan/kernel/util"
) )
func addAttributeViewCol(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
arg, _ := util.JsonArg(c, ret)
if nil == arg {
return
}
avID := arg["avID"].(string)
keyID := arg["keyID"].(string)
keyName := arg["keyName"].(string)
keyType := arg["keyType"].(string)
keyIcon := arg["keyIcon"].(string)
previousKeyID := arg["previousKeyID"].(string)
err := model.AddAttributeViewKey(avID, keyID, keyName, keyType, keyIcon, previousKeyID)
if nil != err {
ret.Code = -1
ret.Msg = err.Error()
return
}
}
func removeAttributeViewCol(c *gin.Context) {
ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret)
arg, _ := util.JsonArg(c, ret)
if nil == arg {
return
}
avID := arg["avID"].(string)
keyID := arg["keyID"].(string)
err := model.RemoveAttributeViewKey(avID, keyID)
if nil != err {
ret.Code = -1
ret.Msg = err.Error()
return
}
}
func sortAttributeViewCol(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)
keyID := arg["keyID"].(string)
previousKeyID := arg["previousKeyID"].(string)
err := model.SortAttributeViewKey(avID, keyID, previousKeyID)
if nil != err {
ret.Code = -1
ret.Msg = err.Error()
return
}
}
func getAttributeViewFilterSort(c *gin.Context) { func getAttributeViewFilterSort(c *gin.Context) {
ret := gulu.Ret.NewResult() ret := gulu.Ret.NewResult()
defer c.JSON(http.StatusOK, ret) defer c.JSON(http.StatusOK, ret)

View file

@ -398,6 +398,9 @@ func ServeAPI(ginServer *gin.Engine) {
ginServer.Handle("POST", "/api/av/searchAttributeViewRelationKey", model.CheckAuth, model.CheckReadonly, searchAttributeViewRelationKey) ginServer.Handle("POST", "/api/av/searchAttributeViewRelationKey", model.CheckAuth, model.CheckReadonly, searchAttributeViewRelationKey)
ginServer.Handle("POST", "/api/av/searchAttributeViewNonRelationKey", model.CheckAuth, model.CheckReadonly, searchAttributeViewNonRelationKey) ginServer.Handle("POST", "/api/av/searchAttributeViewNonRelationKey", model.CheckAuth, model.CheckReadonly, searchAttributeViewNonRelationKey)
ginServer.Handle("POST", "/api/av/getAttributeViewFilterSort", model.CheckAuth, model.CheckReadonly, getAttributeViewFilterSort) ginServer.Handle("POST", "/api/av/getAttributeViewFilterSort", model.CheckAuth, model.CheckReadonly, getAttributeViewFilterSort)
ginServer.Handle("POST", "/api/av/addAttributeViewKey", model.CheckAuth, model.CheckReadonly, addAttributeViewCol)
ginServer.Handle("POST", "/api/av/removeAttributeViewKey", model.CheckAuth, model.CheckReadonly, removeAttributeViewCol)
ginServer.Handle("POST", "/api/av/sortAttributeViewKey", model.CheckAuth, model.CheckReadonly, sortAttributeViewCol)
ginServer.Handle("POST", "/api/ai/chatGPT", model.CheckAuth, chatGPT) ginServer.Handle("POST", "/api/ai/chatGPT", model.CheckAuth, chatGPT)
ginServer.Handle("POST", "/api/ai/chatGPTWithAction", model.CheckAuth, chatGPTWithAction) ginServer.Handle("POST", "/api/ai/chatGPTWithAction", model.CheckAuth, chatGPTWithAction)

View file

@ -1981,15 +1981,15 @@ func sortAttributeViewRow(operation *Operation) (err error) {
} }
func (tx *Transaction) doSortAttrViewColumn(operation *Operation) (ret *TxErr) { func (tx *Transaction) doSortAttrViewColumn(operation *Operation) (ret *TxErr) {
err := sortAttributeViewColumn(operation) err := SortAttributeViewKey(operation.AvID, operation.ID, operation.PreviousID)
if nil != err { if nil != err {
return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: err.Error()} return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: err.Error()}
} }
return return
} }
func sortAttributeViewColumn(operation *Operation) (err error) { func SortAttributeViewKey(avID, keyID, previousKeyID string) (err error) {
attrView, err := av.ParseAttributeView(operation.AvID) attrView, err := av.ParseAttributeView(avID)
if nil != err { if nil != err {
return return
} }
@ -2004,7 +2004,7 @@ func sortAttributeViewColumn(operation *Operation) (err error) {
var col *av.ViewTableColumn var col *av.ViewTableColumn
var index, previousIndex int var index, previousIndex int
for i, column := range view.Table.Columns { for i, column := range view.Table.Columns {
if column.ID == operation.ID { if column.ID == keyID {
col = column col = column
index = i index = i
break break
@ -2016,7 +2016,7 @@ func sortAttributeViewColumn(operation *Operation) (err error) {
view.Table.Columns = append(view.Table.Columns[:index], view.Table.Columns[index+1:]...) view.Table.Columns = append(view.Table.Columns[:index], view.Table.Columns[index+1:]...)
for i, column := range view.Table.Columns { for i, column := range view.Table.Columns {
if column.ID == operation.PreviousID { if column.ID == previousKeyID {
previousIndex = i + 1 previousIndex = i + 1
break break
} }
@ -2029,30 +2029,32 @@ func sortAttributeViewColumn(operation *Operation) (err error) {
} }
func (tx *Transaction) doAddAttrViewColumn(operation *Operation) (ret *TxErr) { func (tx *Transaction) doAddAttrViewColumn(operation *Operation) (ret *TxErr) {
err := addAttributeViewColumn(operation) var icon string
if nil != operation.Data {
icon = operation.Data.(string)
}
err := AddAttributeViewKey(operation.AvID, operation.ID, operation.Name, operation.Typ, icon, operation.PreviousID)
if nil != err { if nil != err {
return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: err.Error()} return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: err.Error()}
} }
return return
} }
func addAttributeViewColumn(operation *Operation) (err error) { func AddAttributeViewKey(avID, keyID, keyName, keyType, keyIcon, previousKeyID string) (err error) {
attrView, err := av.ParseAttributeView(operation.AvID) attrView, err := av.ParseAttributeView(avID)
if nil != err { if nil != err {
return return
} }
keyType := av.KeyType(operation.Typ) keyTyp := av.KeyType(keyType)
switch keyType { switch keyTyp {
case av.KeyTypeText, av.KeyTypeNumber, av.KeyTypeDate, av.KeyTypeSelect, av.KeyTypeMSelect, av.KeyTypeURL, av.KeyTypeEmail, case av.KeyTypeText, av.KeyTypeNumber, av.KeyTypeDate, av.KeyTypeSelect, av.KeyTypeMSelect, av.KeyTypeURL, av.KeyTypeEmail,
av.KeyTypePhone, av.KeyTypeMAsset, av.KeyTypeTemplate, av.KeyTypeCreated, av.KeyTypeUpdated, av.KeyTypeCheckbox, av.KeyTypePhone, av.KeyTypeMAsset, av.KeyTypeTemplate, av.KeyTypeCreated, av.KeyTypeUpdated, av.KeyTypeCheckbox,
av.KeyTypeRelation, av.KeyTypeRollup: av.KeyTypeRelation, av.KeyTypeRollup:
var icon string
if nil != operation.Data { key := av.NewKey(keyID, keyName, keyIcon, keyTyp)
icon = operation.Data.(string) if av.KeyTypeRollup == keyTyp {
}
key := av.NewKey(operation.ID, operation.Name, icon, keyType)
if av.KeyTypeRollup == keyType {
key.Rollup = &av.Rollup{Calc: &av.RollupCalc{Operator: av.CalcOperatorNone}} key.Rollup = &av.Rollup{Calc: &av.RollupCalc{Operator: av.CalcOperatorNone}}
} }
@ -2061,14 +2063,14 @@ func addAttributeViewColumn(operation *Operation) (err error) {
for _, view := range attrView.Views { for _, view := range attrView.Views {
switch view.LayoutType { switch view.LayoutType {
case av.LayoutTypeTable: case av.LayoutTypeTable:
if "" == operation.PreviousID { if "" == previousKeyID {
view.Table.Columns = append([]*av.ViewTableColumn{{ID: key.ID}}, view.Table.Columns...) view.Table.Columns = append([]*av.ViewTableColumn{{ID: key.ID}}, view.Table.Columns...)
break break
} }
added := false added := false
for i, column := range view.Table.Columns { for i, column := range view.Table.Columns {
if column.ID == operation.PreviousID { if column.ID == previousKeyID {
view.Table.Columns = append(view.Table.Columns[:i+1], append([]*av.ViewTableColumn{{ID: key.ID}}, view.Table.Columns[i+1:]...)...) view.Table.Columns = append(view.Table.Columns[:i+1], append([]*av.ViewTableColumn{{ID: key.ID}}, view.Table.Columns[i+1:]...)...)
added = true added = true
break break
@ -2176,22 +2178,22 @@ func updateAttributeViewColumn(operation *Operation) (err error) {
} }
func (tx *Transaction) doRemoveAttrViewColumn(operation *Operation) (ret *TxErr) { func (tx *Transaction) doRemoveAttrViewColumn(operation *Operation) (ret *TxErr) {
err := removeAttributeViewColumn(operation) err := RemoveAttributeViewKey(operation.AvID, operation.ID)
if nil != err { if nil != err {
return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: err.Error()} return &TxErr{code: TxErrWriteAttributeView, id: operation.AvID, msg: err.Error()}
} }
return return
} }
func removeAttributeViewColumn(operation *Operation) (err error) { func RemoveAttributeViewKey(avID, keyID string) (err error) {
attrView, err := av.ParseAttributeView(operation.AvID) attrView, err := av.ParseAttributeView(avID)
if nil != err { if nil != err {
return return
} }
var removedKey *av.Key var removedKey *av.Key
for i, keyValues := range attrView.KeyValues { for i, keyValues := range attrView.KeyValues {
if keyValues.Key.ID == operation.ID { if keyValues.Key.ID == keyID {
attrView.KeyValues = append(attrView.KeyValues[:i], attrView.KeyValues[i+1:]...) attrView.KeyValues = append(attrView.KeyValues[:i], attrView.KeyValues[i+1:]...)
removedKey = keyValues.Key removedKey = keyValues.Key
break break
@ -2252,7 +2254,7 @@ func removeAttributeViewColumn(operation *Operation) (err error) {
switch view.LayoutType { switch view.LayoutType {
case av.LayoutTypeTable: case av.LayoutTypeTable:
for i, column := range view.Table.Columns { for i, column := range view.Table.Columns {
if column.ID == operation.ID { if column.ID == keyID {
view.Table.Columns = append(view.Table.Columns[:i], view.Table.Columns[i+1:]...) view.Table.Columns = append(view.Table.Columns[:i], view.Table.Columns[i+1:]...)
break break
} }