# [recycle] Sidebar Rust Query 目标说明

> 更新时间：2026-04-14
>
> 适用主仓：`/mnt/Data1T/mnote`

## 1. 当前起点

当前 Sidebar 仍是“同一份数据集，多处复用”的结构，但重复拼装已经先收口到共享 helper：

- 查询 payload / result 契约：`/mnt/Data1T/mnote/wolai-frontend/src/lib/sidebar-data.ts`
- 服务端聚合入口：`/mnt/Data1T/mnote/wolai-frontend/src/lib/server/sidebar-data.ts`
- API route：`/mnt/Data1T/mnote/wolai-frontend/src/app/api/sidebar/route.ts`
- 实时订阅 hook：`/mnt/Data1T/mnote/wolai-frontend/src/hooks/use-convex-sidebar-data.ts`

当前事实：

- `sidebar.dataset.list` 已有稳定 payload：`{ workspace_id }`
- `sidebar.dataset.list` 已有稳定 result：`active_workspace_id`、`workspaces`、`documents`、`trashed_documents`、`media_assets`、`trashed_media_assets`、`mindmap_assets`、`trashed_mindmap_assets`、`table_assets`、`trashed_table_assets`、`mindmap_docs`、`mindmap_asset_children`
- `src/lib/sidebar-data.test.ts` 已对上述契约做冻结测试

## 2. Rust Query 最小目标

后续 Rust query 不直接输出 UI rows，而是只负责输出兼容 `SidebarInitialData` 的共享数据集。

最小目标：

- 输入：
  - `workspace_id`
- 输出：
  - `active_workspace_id`
  - `workspaces`
  - `documents`
  - `trashed_documents`
  - `media_assets`
  - `trashed_media_assets`
  - `mindmap_assets`
  - `trashed_mindmap_assets`
  - `table_assets`
  - `trashed_table_assets`
  - `mindmap_docs`
  - `mindmap_asset_children`

## 3. 前后端边界

### 3.1 Rust query 负责

- 聚合工作区范围内页面、回收站、媒体、导图、表格的原始数据集
- 保持字段命名与共享 contract 一致
- 保持 `workspace_id` 作用域明确

### 3.2 前端继续负责

- `buildDocumentTree`
- `buildVisibleRows`
- `starred/public/shared/private/templates` 分区语义
- `sort_order -> created_at` 排序投影
- `doc/index.md/asset-folder/asset` 文件树行语义
- 拖拽、剪贴板、展开折叠、回收站双 tab 等交互行为

## 4. 本轮明确不做的事

- 不复制 `mnote-rust` 的 `components/sidebar/sidebar.tsx`
- 不引入第二套导航壳
- 不在 Rust query 阶段直接输出前端渲染树
- 不改变当前 Sidebar UI 结构与交互

## 5. 验证锚点

以下文件共同构成本轮 Sidebar Rust query 目标冻结点：

- `/mnt/Data1T/mnote/wolai-frontend/src/lib/sidebar-data.ts`
- `/mnt/Data1T/mnote/wolai-frontend/src/lib/server/sidebar-data.ts`
- `/mnt/Data1T/mnote/wolai-frontend/src/app/api/sidebar/route.ts`
- `/mnt/Data1T/mnote/wolai-frontend/src/hooks/use-convex-sidebar-data.ts`
- `/mnt/Data1T/mnote/wolai-frontend/src/lib/sidebar-data.test.ts`
