diff --git a/kernel/api/av.go b/kernel/api/av.go index f3ec8568c..c13587ecd 100644 --- a/kernel/api/av.go +++ b/kernel/api/av.go @@ -26,6 +26,40 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func getAttributeViewPrimaryKeyValues(c *gin.Context) { + ret := gulu.Ret.NewResult() + defer c.JSON(http.StatusOK, ret) + + arg, ok := util.JsonArg(c, ret) + if !ok { + return + } + + id := arg["id"].(string) + page := 1 + pageArg := arg["page"] + if nil != pageArg { + page = int(pageArg.(float64)) + } + + pageSize := -1 + pageSizeArg := arg["pageSize"] + if nil != pageSizeArg { + pageSize = int(pageSizeArg.(float64)) + } + + rows, err := model.GetAttributeViewPrimaryKeyValues(id, page, pageSize) + if nil != err { + ret.Code = -1 + ret.Msg = err.Error() + return + } + + ret.Data = map[string]interface{}{ + "rows": rows, + } +} + func addAttributeViewValues(c *gin.Context) { ret := gulu.Ret.NewResult() defer c.JSON(http.StatusOK, ret) diff --git a/kernel/api/router.go b/kernel/api/router.go index 29a902f2c..e675aecfb 100644 --- a/kernel/api/router.go +++ b/kernel/api/router.go @@ -407,6 +407,7 @@ func ServeAPI(ginServer *gin.Engine) { ginServer.Handle("POST", "/api/av/sortAttributeViewKey", model.CheckAuth, model.CheckReadonly, sortAttributeViewCol) ginServer.Handle("POST", "/api/av/addAttributeViewValues", model.CheckAuth, model.CheckReadonly, addAttributeViewValues) ginServer.Handle("POST", "/api/av/removeAttributeViewValues", model.CheckAuth, model.CheckReadonly, removeAttributeViewValues) + ginServer.Handle("POST", "/api/av/getAttributeViewPrimaryKeyValues", model.CheckAuth, model.CheckReadonly, getAttributeViewPrimaryKeyValues) ginServer.Handle("POST", "/api/ai/chatGPT", model.CheckAuth, chatGPT) ginServer.Handle("POST", "/api/ai/chatGPTWithAction", model.CheckAuth, chatGPTWithAction) diff --git a/kernel/model/attribute_view.go b/kernel/model/attribute_view.go index 0b823383c..a1b7c8602 100644 --- a/kernel/model/attribute_view.go +++ b/kernel/model/attribute_view.go @@ -38,6 +38,28 @@ import ( "github.com/siyuan-note/siyuan/kernel/util" ) +func GetAttributeViewPrimaryKeyValues(avID string, page, pageSize int) (ret *av.KeyValues, err error) { + waitForSyncingStorages() + + attrView, err := av.ParseAttributeView(avID) + if nil != err { + logging.LogErrorf("parse attribute view [%s] failed: %s", avID, err) + return + } + + ret = attrView.GetBlockKeyValues() + if 1 > pageSize { + pageSize = 50 + } + start := (page - 1) * pageSize + end := start + pageSize + if len(ret.Values) < end { + end = len(ret.Values) + } + ret.Values = ret.Values[start:end] + return +} + func GetAttributeViewFilterSort(id string) (filters []*av.ViewFilter, sorts []*av.ViewSort) { waitForSyncingStorages()