mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-17 15:10:12 +01:00
🎨 Add some database related internal kernel APIs https://github.com/siyuan-note/siyuan/issues/10160
This commit is contained in:
parent
a92be962d4
commit
6bd04ecb2a
3 changed files with 93 additions and 23 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue