You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.2 KiB
6.2 KiB
附件与资源管理重新设计计划
任务名称:附件与资源管理架构优化
创建时间:2025-01-27
状态:待执行
1. 背景
问题分析
- 表过大风险:如果所有文件(文档、图片、视频、音频)都存储在单一 attachments 表,随着项目增多,表会达到百万级甚至千万级记录
- 业务混乱:角色/场景/道具素材与普通文档附件的使用场景完全不同,混在一起导致业务逻辑复杂
- 资源分层需求:需要区分"系统资源库"、"素材市场"、"项目专属素材"三个层次
- 查询性能:不同类型文件的查询模式不同,单表难以针对性优化
解决方案
业务分离 + 服务层统一:
- 不同业务场景的文件使用不同的表管理
- 通过公共服务层(FileStorageService)实现代码复用和去重
- 使用 file_checksums 表实现全局去重
2. 执行步骤
Step 1: 更新数据库设计文档
文件:docs/需求/database-design.md
修改内容:
- 新增 project_resources 表(项目专属素材)
- 调整 resources 表定义(系统资源库+素材市场)
- 新增 file_checksums 表(全局去重)
- 调整 attachments 表(简化为文档附件)
- 更新 storyboard_resources 表(关联 project_resources)
- 新增业务表字段:
- users.avatar_id
- projects.cover_image_id
- storyboards.thumbnail_id
Step 2: 更新附件服务文档
文件:docs/需求/backend/04-services/attachment-service.md
修改内容:
- 更新服务概述:明确 attachments 表只管理文档类附件
- 简化文件分类:只保留 document、image 两类
- 更新数据模型:
- 移除 resource_id 关联
- 保留 project_id、script_id 关联
- 保留 uploaded_by 审计字段
- 更新 API 接口:调整上传接口参数
- 新增 FileStorageService 说明
Step 3: 更新资源服务文档
文件:docs/需求/backend/04-services/resource-service.md
修改内容:
- 拆分为两个服务:
- ResourceService(系统资源库+素材市场)
- ProjectResourceService(项目专属素材)
- 更新数据模型:
- resources 表:系统资源库
- project_resources 表:项目素材
- 新增资源流转逻辑:
- 从资源库复制到项目
- 从项目发布到素材市场
- 新增 API 接口:
- 资源库查询、下载
- 项目素材管理
- 素材市场发布
Step 4: 创建文件存储服务文档
文件:docs/需求/backend/04-services/file-storage-service.md(新建)
内容:
- 服务概述:统一的文件上传、下载、删除服务
- 核心功能:
- 文件上传(带去重)
- 文件下载(预签名URL)
- 文件删除
- 校验和计算
- 去重机制:file_checksums 表设计
- 对象存储集成:MinIO/S3 接口
Step 5: 更新分镜服务文档
文件:docs/需求/backend/04-services/storyboard-service.md
修改内容:
- 更新 storyboard_resources 关联:从 resources 改为 project_resources
- 更新 API 接口:分镜添加素材的接口调整
Step 6: 创建方案文档
文件:docs/方案/attachment-and-resource-architecture.md(新建)
内容:
- 架构设计说明
- 表结构对比(调整前 vs 调整后)
- 资源流转路径图
- 数据量预估
- 性能优化策略
- 迁移方案(如果已有数据)
3. 涉及的文件
修改文件
docs/需求/database-design.md- 数据库设计docs/需求/backend/04-services/attachment-service.md- 附件服务docs/需求/backend/04-services/resource-service.md- 资源服务docs/需求/backend/04-services/storyboard-service.md- 分镜服务
新建文件
docs/需求/backend/04-services/file-storage-service.md- 文件存储服务docs/方案/attachment-and-resource-architecture.md- 架构方案文档
4. 关键设计点
4.1 表结构分层
attachments 表
├─ 用途:文档类附件(剧本、合同、参考资料)
├─ 关联:project_id, script_id
└─ 数据量:1-5万条(1000个项目)
resources 表
├─ 用途:系统资源库 + 素材市场
├─ 特点:is_public, is_official, price
└─ 数据量:1-10万条(公共资源)
project_resources 表
├─ 用途:项目专属素材(角色、场景、道具)
├─ 关联:project_id, source_resource_id
└─ 数据量:5-30万条(1000个项目)
file_checksums 表
├─ 用途:全局去重
└─ 数据量:与文件总数相当
4.2 资源流转路径
MVP 阶段(前期开发):
项目素材库 (project_resources)
↓ 使用
分镜/时间轴 (storyboard_resources, timeline_items)
完整版(后期扩展):
系统资源库 (resources, is_official=true)
↓ 复制
素材市场 (resources, is_public=true)
↓ 下载/复制
项目素材库 (project_resources)
↓ 使用
分镜/时间轴 (storyboard_resources, timeline_items)
注意:前期开发暂不实现 resources 表(系统资源库+素材市场),保留表结构设计供后续扩展。
4.3 一对一关系(业务表存附件ID)
- users.avatar_id → attachments
- projects.cover_image_id → attachments
- storyboards.thumbnail_id → attachments
4.4 一对多关系(附件表存业务ID)
- attachments.project_id → projects
- attachments.script_id → scripts
- project_resources.project_id → projects
5. 预期成果
✅ 数据库设计文档更新完成
✅ 附件服务文档更新完成
✅ 资源服务文档拆分并更新完成
✅ 文件存储服务文档创建完成
✅ 分镜服务文档更新完成
✅ 架构方案文档创建完成
6. 风险与注意事项
- 数据迁移:如果已有数据,需要编写迁移脚本
- API 兼容性:前端接口调用需要同步调整
- 文件引用:确保所有文件引用关系正确
- 去重逻辑:file_checksums 表需要定期清理无引用的记录
计划创建完成,等待用户批准执行。