Procházet zdrojové kódy

:art: Kernel API `transferBlockRef` https://github.com/siyuan-note/siyuan/issues/8522

Daniel před 2 roky
rodič
revize
eda8da1bbe
4 změnil soubory, kde provedl 67 přidání a 3 odebrání
  1. 27 0
      API.md
  2. 28 0
      API_zh_CN.md
  3. 8 1
      kernel/api/block.go
  4. 4 2
      kernel/model/block.go

+ 27 - 0
API.md

@@ -30,6 +30,7 @@
     * [Move a block](#Move-a-block)
     * [Get a block kramdown](#Get-a-block-kramdown)
     * [Get child blocks](#get-child-blocks)
+    * [Transfer block ref](#transfer-block-ref)
 * [Attributes](#Attributes)
     * [Set block attributes](#Set-block-attributes)
     * [Get block attributes](#Get-block-attributes)
@@ -815,6 +816,32 @@ View API token in <kbd>Settings - About</kbd>, request header: `Authorization: T
   }
   ```
 
+### Transfer block ref
+
+* `/api/block/transferBlockRef`
+* Parameters
+
+  ```json
+  {
+    "fromID": "20230612160235-mv6rrh1",
+    "toID": "20230613093045-uwcomng",
+    "refIDs": ["20230613092230-cpyimmd"]
+  }
+  ```
+
+  * `fromID`: Def block ID
+  * `toID`: Target block ID
+  * `refIDs`: Ref block IDs point to def block ID, optional, if not specified, all ref block IDs will be transferred
+* Return value
+
+  ```json
+  {
+    "code": 0,
+    "msg": "",
+    "data": null
+  }
+  ```
+
 ## Attributes
 
 ### Set block attributes

+ 28 - 0
API_zh_CN.md

@@ -30,6 +30,7 @@
     * [移动块](#移动块)
     * [获取块 kramdown 源码](#获取块-kramdown-源码)
     * [获取子块](#获取子块)
+    * [转移块引用](#转移块引用)
 * [属性](#属性)
     * [设置块属性](#设置块属性)
     * [获取块属性](#获取块属性)
@@ -808,6 +809,33 @@
   }
   ```
 
+### 转移块引用
+
+* `/api/block/transferBlockRef`
+* 参数
+
+  ```json
+  {
+    "fromID": "20230612160235-mv6rrh1",
+    "toID": "20230613093045-uwcomng",
+    "refIDs": ["20230613092230-cpyimmd"]
+  }
+  ```
+
+  * `fromID`:定义块 ID
+  * `toID`:目标块 ID
+  * `refIDs`:指向定义块 ID 的引用所在块 ID,可选,如果不指定,所有指向定义块 ID 的引用块 ID 都会被转移
+* 返回值
+
+  ```json
+  {
+    "code": 0,
+    "msg": "",
+    "data": null
+  }
+  ```
+
+
 ## 属性
 
 ### 设置块属性

+ 8 - 1
kernel/api/block.go

@@ -47,7 +47,14 @@ func transferBlockRef(c *gin.Context) {
 		return
 	}
 
-	err := model.TransferBlockRef(fromID, toID)
+	var refIDs []string
+	if nil != arg["refIDs"] {
+		for _, refID := range arg["refIDs"].([]interface{}) {
+			refIDs = append(refIDs, refID.(string))
+		}
+	}
+
+	err := model.TransferBlockRef(fromID, toID, refIDs)
 	if nil != err {
 		ret.Code = -1
 		ret.Msg = err.Error()

+ 4 - 2
kernel/model/block.go

@@ -117,7 +117,7 @@ func RecentUpdatedBlocks() (ret []*Block) {
 	return
 }
 
-func TransferBlockRef(fromID, toID string) (err error) {
+func TransferBlockRef(fromID, toID string, refIDs []string) (err error) {
 	toTree, _ := loadTreeByBlockID(toID)
 	if nil == toTree {
 		err = ErrBlockNotFound
@@ -132,7 +132,9 @@ func TransferBlockRef(fromID, toID string) (err error) {
 
 	util.PushMsg(Conf.Language(116), 7000)
 
-	refIDs, _ := sql.QueryRefIDsByDefID(fromID, false)
+	if 1 > len(refIDs) { // 如果不指定 refIDs,则转移所有引用了 fromID 的块
+		refIDs, _ = sql.QueryRefIDsByDefID(fromID, false)
+	}
 	for _, refID := range refIDs {
 		tree, _ := loadTreeByBlockID(refID)
 		if nil == tree {