Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a kernel API /api/block/getBlockTreeInfos #11311

Closed
frostime opened this issue May 8, 2024 · 7 comments
Closed

Add a kernel API /api/block/getBlockTreeInfos #11311

frostime opened this issue May 8, 2024 · 7 comments
Assignees
Milestone

Comments

@frostime
Copy link
Contributor

frostime commented May 8, 2024

API 请求 | 将列表块的第一个子块转换为列表

In what scenarios do you need this feature?

思源中列表项和列表项的第一个内容块经常性的傻傻分不清,在做 SQL 查询的时候经常带来一些麻烦之处。

一个常见的场景是:在编写插件的时候,需要通过 SQL 查询到块,并新建一个 Protyle 进行展示。

但是由于无法区分列表项和列表的第一个节点元素,所以本来应该渲染为列表项的元素被“错误”地渲染为段落块。

希望能够提供一个 API,以有效地处理这个问题。

Describe the optimal solution

给定一堆 block id,后端遍历列表:

  1. 检查父节点是否为列表项
  2. 如果是,则检查当前节点是否为列表项的第一个块
  3. 如果是,就返回父节点的列表项块 ID
  • /api/sql/checkitem (这个endpoint不一定合适,开发者可以自行斟酌)
  • Input
{
  id: [] //block id 列表
}
  • Reture data:
{
  id: []
}

Describe the candidate solution

No response

Other information

No response

@88250
Copy link
Member

88250 commented May 8, 2024

列表项和列表项的第一个内容块经常性的傻傻分不清
无法区分列表项和列表的第一个节点元素

有两个疑问:

  1. 是需要区分列表和列表项还是列表项和段落?
  2. 通过 type 应该能区分吧?

@frostime
Copy link
Contributor Author

frostime commented May 8, 2024

列表项和列表项的第一个内容块经常性的傻傻分不清
无法区分列表项和列表的第一个节点元素

有两个疑问:

  1. 是需要区分列表和列表项还是列表项和段落?
  2. 通过 type 应该能区分吧?
  1. 列表项和段落——核心在于很多时候我通过 SQL 检索到列表项的第一个块以后,想要通过 Protyle 展示到 list item 而不仅仅是他的第一个内容块
  2. 通过 type 我只能知道这个块不是列表项块,但是也无法肯定他是不是列表项的第一个块
  3. 如果要我人工处理,那流程会是这样
    1. 通过 sql 查询到块的结果
    2. 遍历所有查询结果,去查询他们的父块
    3. 如果父块是一个列表项,就对比父块的 fccotent 和块的 content 是不是一样的,来判断这个块是不是列表项的第一个块
    4. 然后用列表项父块来替换掉原先的子块
  4. 上面的操作需要用 js 做好几次后端 API 请求,在 blocks 数量特别大的时候会显著拖慢效率
  5. 所以我希望能有一个后端 api,一次性批量处理,而不用在 for 循环里一个个检查

@88250 88250 self-assigned this May 9, 2024
@88250
Copy link
Member

88250 commented May 9, 2024

谢谢,我明白需求了,现在讨论一下参数和返回值:

上面提到的返回值是个 id 数组,这个需要和前面的参数 id 数组中的值一一对应吗?

@frostime
Copy link
Contributor Author

frostime commented May 9, 2024

谢谢,我明白需求了,现在讨论一下参数和返回值:

上面提到的返回值是个 id 数组,这个需要和前面的参数 id 数组中的值一一对应吗?

最好是能一一对应。
或者实在不行,把 list 换成 map 也行。

@88250
Copy link
Member

88250 commented May 9, 2024

好的,大致明白了,后面考虑下。

@88250 88250 changed the title API 请求 | 将列表块的第一个子块转换为列表 Add a kernel API /api/block/getBlockTreeInfos May 9, 2024
@88250 88250 added this to the 3.0.14 milestone May 9, 2024
@88250
Copy link
Member

88250 commented May 9, 2024

接口:http://127.0.0.1:6806/api/block/getBlockTreeInfos

参数:

{
    "ids": ["20240509230443-ppo72zq", "20240509230443-ghcj2tr", "20240509230453-u1k5z6p"]
}

返回值:

{
    "code": 0,
    "msg": "",
    "data": {
        "20240509230443-ghcj2tr": {
            "id": "20240509230443-ghcj2tr",
            "type": "NodeParagraph",
            "parentID": "20240509230443-ppo72zq",
            "parentType": "NodeListItem",
            "previousID": "",
            "previousType": "",
            "nextID": "",
            "nextType": ""
        },
        "20240509230443-ppo72zq": {
            "id": "20240509230443-ppo72zq",
            "type": "NodeListItem",
            "parentID": "20240509230443-7l5nvls",
            "parentType": "NodeList",
            "previousID": "",
            "previousType": "",
            "nextID": "",
            "nextType": ""
        },
        "20240509230453-u1k5z6p": {
            "id": "20240509230453-u1k5z6p",
            "type": "NodeParagraph",
            "parentID": "20240509230446-xz4u1uy",
            "parentType": "NodeBlockquote",
            "previousID": "",
            "previousType": "",
            "nextID": "",
            "nextType": ""
        }
    }
}

@88250 88250 closed this as completed May 9, 2024
@frostime
Copy link
Contributor Author

frostime commented May 9, 2024

可以可以,超出我的预期了,感谢D大👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants