Close213/215 本地资源注册与后台表查询 #232

Merged
kdletters merged 5 commits from codex/admin-database-table-query into master 2026-09-01 14:27:40 +08:00
Member

关联 Issue

  • Close #213:补充本地资源注册类型
  • Close #215:后台表查询添加字段查询

背景

本 PR 合并处理两个规模较小、已完成统一 review 的客户端与后台能力改动,整体已基于远端最新 master。

本地资源注册(#213)

  • AGC 本地项目资源支持图片、字体、音频、视频、文档和代码类型。
  • 支持 PNG/JPEG/WEBP/GIF/SVG/AVIF/BMP、TTF/OTF/WOFF/WOFF2、MP3/WAV/OGG/FLAC/M4A/AAC/OPUS、MP4/WEBM/MOV,以及常见文本、配置和源码扩展名。
  • 同步更新 Direct Tool Bridge、MCP schema、Runtime/Provider Prompt、AGC Skill 文档和技术方案。
  • 保留项目相对路径、敏感目录、符号链接、文件大小、字体解析、UTF-8、项目锁、manifest/revision 和幂等语义。
  • 修复从 game 等目录复制到 assets/uploads 时扩展名退化为 .bin 的问题。

后台表查询(#215)

  • 使用结构化筛选条件替换手写筛选 JSON。
  • 支持多条件、比较、包含、前后缀、列表、空值和旧 JSON object 兼容。
  • 优化预览表格、详情复制、Toast、JSON 预览和排序交互。
  • 修复数字范围筛选,包括数据库字符串化数字的数值比较。
  • 补充前后端回归测试与文档。

验证

  • AGC 本地资源导入测试:6/6
  • AGC Direct/MCP 工具测试:8/8
  • 本地资源扩展名与 Prompt 映射回归测试通过
  • 后台 admin 数据库测试:17/17
  • 后台页面 Vitest:16/16
  • npm run admin-web:typecheck
  • npm run admin-web:build
  • npm run check:encoding
  • git diff --check
  • rustfmt --edition 2024 --check server-rs/crates/api-server/src/admin.rs

限制

  • 未执行真实生产 SpacetimeDB、OSS 或其它付费服务验证。
  • Native shell CI 及其它 PR CI 以最新 head 的远端结果为准。
  • 当前 PR 保持 WIP,待 reviewer 基于最新 head 重新 review。
## 关联 Issue - Close #213:补充本地资源注册类型 - Close #215:后台表查询添加字段查询 ## 背景 本 PR 合并处理两个规模较小、已完成统一 review 的客户端与后台能力改动,整体已基于远端最新 master。 ## 本地资源注册(#213) - AGC 本地项目资源支持图片、字体、音频、视频、文档和代码类型。 - 支持 PNG/JPEG/WEBP/GIF/SVG/AVIF/BMP、TTF/OTF/WOFF/WOFF2、MP3/WAV/OGG/FLAC/M4A/AAC/OPUS、MP4/WEBM/MOV,以及常见文本、配置和源码扩展名。 - 同步更新 Direct Tool Bridge、MCP schema、Runtime/Provider Prompt、AGC Skill 文档和技术方案。 - 保留项目相对路径、敏感目录、符号链接、文件大小、字体解析、UTF-8、项目锁、manifest/revision 和幂等语义。 - 修复从 game 等目录复制到 assets/uploads 时扩展名退化为 .bin 的问题。 ## 后台表查询(#215) - 使用结构化筛选条件替换手写筛选 JSON。 - 支持多条件、比较、包含、前后缀、列表、空值和旧 JSON object 兼容。 - 优化预览表格、详情复制、Toast、JSON 预览和排序交互。 - 修复数字范围筛选,包括数据库字符串化数字的数值比较。 - 补充前后端回归测试与文档。 ## 验证 - AGC 本地资源导入测试:6/6 - AGC Direct/MCP 工具测试:8/8 - 本地资源扩展名与 Prompt 映射回归测试通过 - 后台 admin 数据库测试:17/17 - 后台页面 Vitest:16/16 - `npm run admin-web:typecheck` - `npm run admin-web:build` - `npm run check:encoding` - `git diff --check` - `rustfmt --edition 2024 --check server-rs/crates/api-server/src/admin.rs` ## 限制 - 未执行真实生产 SpacetimeDB、OSS 或其它付费服务验证。 - Native shell CI 及其它 PR CI 以最新 head 的远端结果为准。 - 当前 PR 保持 WIP,待 reviewer 基于最新 head 重新 review。
suzmii requested review from kdletters 2026-08-31 19:47:49 +08:00
suzmii added 2 commits 2026-08-31 21:15:07 +08:00
替换手写筛选 JSON 为结构化条件编辑器

支持条件勾选、列表值编辑和三态排序

优化行详情、字段复制 Toast 与主题 JSON 预览

修复数值范围筛选和异步请求竞态

补充后台查询接口校验、回归测试与文档
补充本地资源注册类型
Project CI / Repository checks (pull_request) Successful in 3m53s
Project CI / Frontend tests (pull_request) Successful in 4m53s
Project CI / Backend tests (pull_request) Successful in 7m7s
Project CI / Native shell tests (pull_request) Successful in 16m36s
991d7a19ea
扩展 AGC 本地资源发现与登记支持的图片、字体、音频、视频、文档和代码类型

同步 Direct/MCP 工具契约、Prompt、Skill 文档与资源扩展名回归测试

保留路径安全、字体校验、幂等登记及 manifest/revision 语义
suzmii force-pushed codex/admin-database-table-query from 21de0e2f12 to 991d7a19ea 2026-08-31 21:15:07 +08:00 Compare
suzmii changed title from 后台数据库表查询支持结构化筛选与详情优化 to WIP: Close213 补充本地资源注册类型 2026-08-31 21:15:31 +08:00
kdletters requested changes 2026-08-31 21:20:30 +08:00
kdletters left a comment
Member

审查 head sha: 991d7a19ea
发现 1 个阻塞问题,已在行内评论说明。

审查 head sha: 991d7a19ea215eb7f8ecd025136bcf6d53dc53d3 发现 1 个阻塞问题,已在行内评论说明。
@@ -3290,0 +3546,4 @@
return actual_number.partial_cmp(&expected_number);
}
}
let actual_text = value_to_string(actual)?;
Member

【明确问题】此处仅在 actual 是 JSON number 时才按数值比较;当数据库返回的单元格是字符串(代码注释声称需要兼容字符串化值)时,actual.as_f64() 为 None,随后会退化为字符串字典序。例如 actual="12"、expected="5" 的 gt 会判断为 false,导致筛选漏掉符合条件的行。风险:后台对字符串化数字使用 gt/gte/lt/lte 得到错误结果。建议先对 actual.as_str() 做 trim().parse::()(并对 expected 同样统一解析),双方都不是有限数值时再按字符串比较;补充字符串数字的回归测试。
本次审查 head sha: 991d7a19ea

【明确问题】此处仅在 actual 是 JSON number 时才按数值比较;当数据库返回的单元格是字符串(代码注释声称需要兼容字符串化值)时,`actual.as_f64()` 为 None,随后会退化为字符串字典序。例如 actual="12"、expected="5" 的 gt 会判断为 false,导致筛选漏掉符合条件的行。风险:后台对字符串化数字使用 gt/gte/lt/lte 得到错误结果。建议先对 actual.as_str() 做 trim().parse::<f64>()(并对 expected 同样统一解析),双方都不是有限数值时再按字符串比较;补充字符串数字的回归测试。 本次审查 head sha: 991d7a19ea215eb7f8ecd025136bcf6d53dc53d3
suzmii added 1 commit 2026-08-31 21:35:24 +08:00
修复字符串数字筛选比较
Project CI / Frontend tests (pull_request) Successful in 6m0s
Project CI / Repository checks (pull_request) Successful in 7m0s
Project CI / Backend tests (pull_request) Successful in 7m51s
Project CI / Native shell tests (pull_request) Successful in 17m11s
98e43b7957
让后台表格筛选同时解析实际值与期望值中的字符串数字

补充字符串化数字范围筛选回归测试
suzmii marked the pull request as ready for review 2026-08-31 21:35:35 +08:00
suzmii marked the pull request as work in progress 2026-08-31 21:36:11 +08:00
suzmii marked the pull request as ready for review 2026-08-31 21:57:26 +08:00
suzmii changed title from Close213 补充本地资源注册类型 to WIP: Close213/215 本地资源注册与后台表查询 2026-08-31 22:42:12 +08:00
suzmii marked the pull request as ready for review 2026-08-31 22:54:26 +08:00
suzmii requested review from kdletters 2026-09-01 09:53:03 +08:00
kdletters requested changes 2026-09-01 10:29:36 +08:00
kdletters left a comment
Member

当前 head 的远端 CI 已全绿,但后台查询交互和筛选契约仍有阻塞问题,请修复以下行内问题后重新请求审核。

当前 head 的远端 CI 已全绿,但后台查询交互和筛选契约仍有阻塞问题,请修复以下行内问题后重新请求审核。
@@ -213,2 +250,3 @@
const querySearch = options.search ?? search;
const queryFilters = options.filters ?? filters;
const queryFilters =
options.filters ?? buildDatabaseFiltersJson(conditions);
Member

这里现在会从 conditions 生成 filters,但页面标题区的“查询”按钮仍直接调用 refreshRows,绕过 handleSearch 的完整性校验。用户添加了启用但未填完的条件后点击顶部查询时,buildDatabaseFiltersJson 会静默丢弃该条件并查询全部/剩余条件,结果会误导管理员。请让两个查询入口统一走同一校验逻辑。

这里现在会从 conditions 生成 filters,但页面标题区的“查询”按钮仍直接调用 refreshRows,绕过 handleSearch 的完整性校验。用户添加了启用但未填完的条件后点击顶部查询时,buildDatabaseFiltersJson 会静默丢弃该条件并查询全部/剩余条件,结果会误导管理员。请让两个查询入口统一走同一校验逻辑。
@@ -298,1 +496,3 @@
if (!detailRow) {
async function handleCopyDetailField(column: string, value: unknown) {
const copiedText = stringifyDetailValue(value);
if (!copiedText) {
Member

null/undefined 字段在详情中显示为“-”,但 stringifyDetailValue 将其变成空字符串,随后这里直接 return,点击对应“复制”按钮不会写剪贴板,也不会显示 Toast。请明确复制 null/展示值并给出反馈,避免空字段操作无响应。

null/undefined 字段在详情中显示为“-”,但 stringifyDetailValue 将其变成空字符串,随后这里直接 return,点击对应“复制”按钮不会写剪贴板,也不会显示 Toast。请明确复制 null/展示值并给出反馈,避免空字段操作无响应。
@@ -482,2 +943,4 @@
data-clickable="true"
tabIndex={0}
onClick={() => setDetailRow(row)}
onKeyDown={(event) => handleRowKeyDown(event, row)}
Member

行内新增的 keydown 处理会对 Enter/Space 无条件打开行详情。焦点位于 AdminUserReferenceButton 等行内按钮时,键盘事件仍会冒泡到 tr,可能同时打开用户详情和行详情。请在行处理器中过滤 button/a/input/select/textarea 目标,或阻止子控件的 keydown 冒泡。

行内新增的 keydown 处理会对 Enter/Space 无条件打开行详情。焦点位于 AdminUserReferenceButton 等行内按钮时,键盘事件仍会冒泡到 tr,可能同时打开用户详情和行详情。请在行处理器中过滤 button/a/input/select/textarea 目标,或阻止子控件的 keydown 冒泡。
@@ -3276,0 +3420,4 @@
}
return Ok(());
}
if op.requires_scalar_value() {
Member

eq/ne 没有被 requires_scalar_value 覆盖,因此缺少 value 的条件数组会被接受,运行时在 operator matcher 中按 Null 兜底。这样无法区分明确的 null 筛选与畸形请求,可能产生意外匹配。请要求 eq/ne 提供 value,或在契约中显式定义 null 语义。

eq/ne 没有被 requires_scalar_value 覆盖,因此缺少 value 的条件数组会被接受,运行时在 operator matcher 中按 Null 兜底。这样无法区分明确的 null 筛选与畸形请求,可能产生意外匹配。请要求 eq/ne 提供 value,或在契约中显式定义 null 语义。
suzmii added 1 commit 2026-09-01 11:46:18 +08:00
修复 PR 232 后台表查询评审问题
Project CI / Repository checks (pull_request) Failing after 12s
Project CI / Backend tests (pull_request) Failing after 12s
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
3a3df3aabb
后台筛选要求 eq/ne 必须提供标量 value,缺失时返回 400。

统一表单和标题区查询入口的筛选完整性校验。

行内交互控件键盘事件不再冒泡触发行详情。

空字段详情复制给出明确失败反馈。

补充后端与后台页面回归测试。

同步更新后台表查询契约说明与运维文档。
suzmii added 1 commit 2026-09-01 11:47:05 +08:00
Merge branch 'master' into codex/admin-database-table-query
Project CI / Backend tests (pull_request) Successful in 8m18s
Project CI / Repository checks (pull_request) Successful in 3m53s
Project CI / Frontend tests (pull_request) Successful in 5m24s
Project CI / Native shell tests (pull_request) Successful in 17m15s
87cd1e54b1
suzmii requested review from kdletters 2026-09-01 12:08:26 +08:00
kdletters merged commit f0142f7019 into master 2026-09-01 14:27:40 +08:00
kdletters deleted branch codex/admin-database-table-query 2026-09-01 14:27:40 +08:00
Sign in to join this conversation.