Repository navigation
feat(storage): 展示附件 Blob/Placement 并新增 Blob 技术元数据表 - #1437
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
附件详情此前无法查看关联 Blob 及其物理存储副本。本次新增 Blob 信息表格和 Placement 位置抽屉,并增加独立的 Blob 技术元数据建表迁移。
主要改动
storage.attachment.manage保护的GET /api/admin/attachments/{attachment_id}/blob,同步 Query Catalog、HTTP Registry 和 OpenAPI。storage.provider.read的用户可打开右侧抽屉查看全部 Placement:ID、存储提供者、对象键、存储层级和状态;修复接口objectKey与前端字段名不匹配导致的空白展示。blob_metadataMigration,以id / blob_id / field_key / field_value(JSONB) / updated_at / version保存文件技术信息,约束 Blob 内字段名唯一、有效 Blob 外键、非空且无首尾空格的字段名和非负版本;Blob 经受控删除后级联清理从属元数据。attachment_blob多对多绑定;同一附件包含原件和转码表示;下载、预览未传选择参数时使用原件;文件技术元数据归blob_metadata,资源业务元数据归resource_metadata。实现范围
已实现附件 Blob 查询与展示、Placement 抽屉、
blob_metadata建表迁移及对应数据库测试。Attachment 多 Blob 绑定、下载/预览的 Blob 选择参数及元数据读写 API 本次仅完成设计约束,运行时代码与绑定迁移尚未实现;现有管理员 Blob 查询仍返回单个对象。验证
mvn -pl storage -am -DskipTests compile:通过。pnpm typecheck:通过。mvn -pl storage -am -Dapi.version=1.44 -Dtest=BlobMetadataMigrationTest -Dsurefire.failIfNoSpecifiedTests=false test:真实 PostgreSQL 18 Testcontainers 上 4 个测试全部通过,0 失败、0 错误、0 跳过。覆盖实际 Migration、JSONB 类型、UUIDv7/timestamptz/version 默认值、唯一约束、外键、无效输入和级联清理。git diff --check:通过。验证记录已写入实施日志;未执行完整仓库测试或浏览器端到端验收。Golden Path 关联
产品用户流程说明
关联的用户主流程
存储管理 → 附件管理 → 附件详情 → 查看 Blob 信息 → 点击“位置”查看存储副本。
覆盖的操作过程
附件详情加载成功后展示 Blob 表格;点击“位置”打开右侧抽屉并加载 Placement 列表。Blob 和 Placement 查询分别具有加载状态和错误提示;无 Placement 时展示空状态,查询失败不影响已有附件信息和预览。
用户概念说明
Attachment 是逻辑文件,Blob 是具体字节内容,Placement 是该内容在存储提供者中的副本。
blob_metadata保存时长、编码、码率、分辨率等文件技术信息,业务标题、歌手和备注等由resource_metadata保存。成功验证
预期管理员在附件详情中看到 Blob 基本信息,并通过“位置”抽屉查看实际 Placement 和对象键。前端类型检查通过;建表行为及数据库约束已在 PostgreSQL 18 验证。完整浏览器操作流程尚未自动化验收。
失败验证
Blob 或 Placement 加载失败时,相应区域显示错误提示;再次点击“位置”可重新查询 Placement,刷新页面可重新加载附件与 Blob。数据库测试已验证重复字段、未知 Blob、无效字段名、SQL NULL 和负版本被拒绝;HTTP/浏览器失败流程未执行端到端测试。
无权限验证
Blob 区域仅对持有
storage.attachment.manage的用户显示,后端应用服务再次校验此权限;“位置”操作同时要求storage.provider.read,复用现有 Placement 查询接口。未新增菜单或路由。权限行为依据实现检查,尚未完成真实账号的端到端验收。异步进度验证
不适用。本次新增操作均为读取查询,抽屉提供请求加载状态;没有新增后台任务。
内部实现词汇说明
Blob、Placement、Hash 和对象键出现在受权限控制的存储管理详情中,供管理员排查内容身份及存储副本位置。此信息属于高级存储诊断,不作为普通内容浏览的主流程概念。
待确认项
CHANGELOG.md,并明确区分已实现功能与尚待实现的架构设计。