画布 / 资产 / Chat / Word¶
源码:
src/backend/db/models/canvas_project.py、user_asset.py、chat_session.py、word_session.py返回 总览 字段表格式:字段 | 中文名 | 类型 | 可空 | 作用
ER¶
erDiagram
users ||--o{ canvas_folders : owns
users ||--o{ canvas_projects : owns
users ||--o{ user_assets : owns
users ||--o{ chat_sessions : owns
canvas_folders ||--o{ canvas_projects : groups
word_sessions ||--o{ word_prompt_items : items
product_sub_types ||--o{ word_sessions : optional
fabric_materials ||--o{ word_sessions : optional
product_categories ||--o{ word_sessions : optional
product_styles ||--o{ word_sessions : optional
canvas_folders — 画布文件夹¶
用户维度单层文件夹,无嵌套。删除文件夹时,关联项目的 folder_id 由 FK SET NULL 置空(归入「未分组」),不连带删除项目。
约束:UniqueConstraint(user_id, name) → uq_canvas_folders_user_name。
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| id | 文件夹 ID | UUID | NO | 主键 |
| user_id | 用户 ID | UUID | NO | FK→users.id CASCADE;有索引;文件夹归属用户 |
| name | 文件夹名称 | String(100) | NO | 展示名;与 user_id 复合唯一 |
| sort_order | 排序权重 | Integer | NO | 同用户下列表排序;默认 0 |
| created_at | 创建时间 | timestamptz | NO | 行创建时间 |
| updated_at | 更新时间 | timestamptz | NO | 行最后修改时间 |
canvas_projects — 画布文档¶
每个项目对应一份完整 CanvasDocument JSON(节点、边、assets、viewport 等)。revision 为乐观锁:更新时需携带期望版本,冲突返回 409。
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| id | 项目 ID | UUID | NO | 主键 |
| user_id | 用户 ID | UUID | NO | FK→users.id CASCADE;有索引;项目归属用户 |
| title | 项目标题 | String(200) | NO | 列表展示名;默认「未命名项目」 |
| document | 画布文档 | JSONB | NO | 完整 CanvasDocument;画布内资产存于 document.assets |
| revision | 修订版本 | Integer | NO | 乐观锁版本号;创建为 0,每次更新 +1;冲突返回 409 |
| thumbnail_key | 缩略图键 | String(500) | YES | 最近一次缩略图 OSS object_key;列表预览用 |
| folder_id | 文件夹 ID | UUID | YES | FK→canvas_folders.id SET NULL;有索引;NULL=未分组 |
| deleted_at | 删除时间 | timestamptz | YES | 软删标记;非空表示已删除 |
| created_at | 创建时间 | timestamptz | NO | 行创建时间 |
| updated_at | 更新时间 | timestamptz | NO | 行最后修改时间 |
user_assets — 跨画布用户资产¶
用户资产库(图片/视频/文本),可跨画布复用;删除画布不影响本表。object_key 指向 OSS,下载 URL 由 Storage 服务实时签发。
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| id | 资产 ID | UUID | NO | 主键 |
| user_id | 用户 ID | UUID | NO | FK→users.id CASCADE;有索引;资产归属用户 |
| name | 资产名称 | String(200) | NO | 展示名 |
| asset_type | 资产类型 | String(20) | NO | image / video / text |
| mime_type | MIME 类型 | String(100) | NO | 如 image/png、video/mp4、text/plain |
| object_key | OSS 对象键 | String(500) | NO | 存储对象路径;下载 URL 运行时签发 |
| size | 文件大小 | BigInteger | NO | 字节数;默认 0 |
| width | 宽度 | Integer | YES | 图片/视频像素宽 |
| height | 高度 | Integer | YES | 图片/视频像素高 |
| text_content | 文本内容 | Text | YES | 仅 text 且体积较小时存原文,供列表预览 |
| content_hash | 内容哈希 | String(128) | YES | 去重/完整性校验用哈希 |
| deleted_at | 删除时间 | timestamptz | YES | 软删标记;非空表示已删除 |
| created_at | 创建时间 | timestamptz | NO | 行创建时间 |
| updated_at | 更新时间 | timestamptz | NO | 行最后修改时间 |
chat_sessions — Chat↔Hermes 归属¶
聊天正文由 Hermes SessionDB 持有;本表仅做 JWT 用户归属与侧栏元数据。
约束:hermes_session_id 唯一 → uk_chat_sessions_hermes_session_id。
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| id | 会话 ID | UUID | NO | 主键 |
| user_id | 用户 ID | UUID | NO | FK→users.id CASCADE;有索引;会话归属用户 |
| hermes_session_id | Hermes 会话 ID | String(128) | NO | 唯一;对应请求头 X-Hermes-Session-Id |
| title | 会话标题 | String(200) | NO | 侧栏主标题;默认「新建对话」 |
| subtitle | 会话副标题 | String(200) | NO | 侧栏副标题;默认「图现AI助手」 |
| deleted_at | 删除时间 | timestamptz | YES | 软删标记;非空表示已从侧栏移除 |
| created_at | 创建时间 | timestamptz | NO | 行创建时间 |
| updated_at | 更新时间 | timestamptz | NO | 行最后修改时间 |
word_sessions — Word 上传解析会话¶
每次上传一个 .docx 生成一条记录,关联产品维度与模板类型;解析出的图片归入图模板,提示词供后续测试。
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| id | 会话 ID | UUID | NO | 主键 |
| original_filename | 原始文件名 | String(255) | NO | 上传时的 .docx 文件名 |
| template_type | 模板类型 | Enum word_session_template_type |
NO | main / detail / replica |
| product_sub_type_id | 产品子类 ID | UUID | YES | FK→product_sub_types.id CASCADE;有索引;主图/详情新链路可空 |
| fabric_material_id | 面料材质 ID | UUID | YES | FK→fabric_materials.id CASCADE;有索引;无材质叶子时可空 |
| product_category_id | 产品大类 ID | UUID | YES | FK→product_categories.id CASCADE;有索引;主图/详情新链路 |
| style_id | 风格 ID | UUID | YES | FK→product_styles.id CASCADE;有索引;主图/详情新链路 |
| image_template_id | 图模板 ID | UUID | YES | 有索引;无 FK;自动匹配/创建的目标图模板 |
| prompt_count | 提示词数量 | SmallInteger | NO | 本会话解析出的提示词条数;默认 0 |
| image_count | 图片数量 | SmallInteger | NO | 本会话解析出的图片数(含未挂到提示词的);默认 0 |
| created_at | 创建时间 | timestamptz | NO | 行创建时间 |
word_prompt_items — Word 解析条目¶
| 字段 | 中文名 | 类型 | 可空 | 作用 |
|---|---|---|---|---|
| id | 条目 ID | UUID | NO | 主键 |
| session_id | 会话 ID | UUID | NO | FK→word_sessions.id CASCADE;有索引;所属上传会话 |
| prompt_index | 提示词序号 | SmallInteger | NO | 1-based 顺序号 |
| label | 原始标签 | String(50) | NO | Word 中的标签文案,如「第一张」 |
| prompt_text | 提示词正文 | Text | NO | 解析出的提示词内容 |
| reference_image_key | 参考图键 | String(500) | YES | 关联样图 OSS object_key(转 WebP 后) |
| template_image_id | 模板图片 ID | UUID | YES | 无 FK;已归入图库时填入 template_images.id |
| created_at | 创建时间 | timestamptz | NO | 行创建时间 |