furniture-3d-system-Wu/docs/PHASE1_COMPLETE.md
WuYongJie 3d2014db37 feat: Phase 1 完成 - 数据库模型重构
- 更新 User 模型:添加 name、isFirstLogin、role 枚举、team 关联
- 创建 Department 模型:支持层级结构和部门负责人
- 创建 Team 模型:小组管理和组长关联
- 更新 Product 模型:添加 createdBy、collaborators、visibility、软删除
- 更新 ProductSKU 模型:添加 ownerId、transferHistory、软删除
- 创建 Feedback 模型:问题反馈系统
- 创建 ActivityLog 模型:操作日志记录
- 添加 6 种角色枚举:SUPER_ADMIN、ADMIN、DEPARTMENT_MANAGER、TEAM_LEADER、DESIGNER、VIEWER
- 添加用户状态枚举:ACTIVE、INACTIVE、SUSPENDED
- 运行数据库迁移并生成 Prisma Client
- 更新文档:TODO.md、PHASE1_COMPLETE.md
2025-12-12 21:45:58 +08:00

7.3 KiB
Raw Blame History

Phase 1 完成报告 - 数据库模型重构

✅ 完成时间

2025-12-12

📊 完成情况

已完成任务

  • 更新 User 模型
  • 创建 Department 模型
  • 创建 Team 模型
  • 更新 Product 模型
  • 更新 ProductSKU 模型
  • 创建 Feedback 模型
  • 创建 ActivityLog 模型
  • 运行数据库迁移
  • 生成 Prisma Client

🗄️ 数据库模型总览

核心模型

1. User(用户)

- id: String (主键)
- email: String (唯一,用于登录)
- name: String (唯一,姓名/花名,用于登录)
- password: String
- isFirstLogin: Boolean (首次登录标识)
- avatar: String?
- phone: String?
- role: Role (6种角色枚举)
- departmentId: String?
- teamId: String?
- status: UserStatus (在职/离职/暂停)
- lastLoginAt: DateTime?

新增字段:

  • name:姓名/花名(替代 username)
  • isFirstLogin:首次登录标识
  • role:枚举类型(6种角色)
  • teamId:所属小组
  • status:用户状态枚举

2. Department(部门)

- id: String (主键)
- name: String (唯一)
- fullPath: String (完整路径)
- parentId: String? (父部门)
- managerId: String? (部门负责人)
- orderIndex: Int (排序)

特点:

  • 支持层级结构(父子关系)
  • 一对一关联部门负责人

3. Team(小组)

- id: String (主键)
- name: String
- description: String?
- departmentId: String (所属部门)
- leaderId: String? (组长)
- orderIndex: Int (排序)

特点:

  • 属于某个部门
  • 一对一关联组长

4. Product(产品)

- id: String (主键)
- modelNumber: String (唯一)
- name: String
- description: String?
- category: String?
- modelUrl: String?
- thumbnailUrl: String?
- createdBy: String (创建者)
- collaborators: Json? (协作者列表)
- departmentId: String? (所属部门)
- visibility: String (可见性)
- deletedAt: DateTime? (软删除)

新增字段:

  • createdBy:创建者ID
  • collaborators:协作者列表(JSON)
  • departmentId:所属部门
  • visibility:可见性控制
  • deletedAt:软删除时间戳

5. ProductSKU(产品SKU)

- id: String (主键)
- productId: String
- skuCode: String (唯一)
- attributes: Json
- price: Decimal
- costPrice: Decimal?
- stock: Int
- images: String[]
- modelUrl: String?
- ownerId: String (负责人)
- transferHistory: Json? (交接记录)
- isActive: Boolean
- deletedAt: DateTime? (软删除)

新增字段:

  • ownerId:SKU 负责人ID
  • transferHistory:交接历史记录(JSON)
  • deletedAt:软删除时间戳

6. Feedback(问题反馈)

- id: String (主键)
- productId: String
- skuId: String?
- title: String
- description: String
- images: String[]
- category: String
- priority: FeedbackPriority (优先级枚举)
- submitterId: String (提交者)
- assigneeId: String? (处理者)
- status: FeedbackStatus (状态枚举)
- comments: Json? (评论记录)
- resolution: String?
- resolvedAt: DateTime?

特点:

  • 支持关联产品或具体SKU
  • 优先级管理(低/中/高/紧急)
  • 状态流转(待处理/处理中/已解决/已关闭)

7. ActivityLog(操作日志)

- id: String (主键)
- userId: String
- type: ActivityType (操作类型枚举)
- targetType: String?
- targetId: String?
- action: String
- changes: Json?
- metadata: Json?
- createdAt: DateTime

特点:

  • 记录所有关键操作
  • 支持多种操作类型
  • 存储变更详情

🔢 枚举类型

Role(角色)

SUPER_ADMIN         // 超级管理员
ADMIN               // 管理员
DEPARTMENT_MANAGER  // 部门管理员
TEAM_LEADER         // 组长
DESIGNER            // 设计师
VIEWER              // 查看者

UserStatus(用户状态)

ACTIVE              // 在职
INACTIVE            // 离职
SUSPENDED           // 暂停

FeedbackStatus(反馈状态)

PENDING             // 待处理
IN_PROGRESS         // 处理中
RESOLVED            // 已解决
CLOSED              // 已关闭

FeedbackPriority(反馈优先级)

LOW                 // 低
MEDIUM              // 中
HIGH                // 高
URGENT              // 紧急

ActivityType(操作类型)

USER_REGISTER
USER_LOGIN
USER_LOGIN_FAILED
USER_LOGOUT
USER_FIRST_LOGIN_UPDATE
PRODUCT_CREATE
PRODUCT_UPDATE
PRODUCT_DELETE
SKU_CREATE
SKU_UPDATE
SKU_DELETE
SKU_TRANSFER
FILE_UPLOAD
FILE_DOWNLOAD
SHARE_LINK_CREATE
SHARE_LINK_ACCESS
FEEDBACK_CREATE
FEEDBACK_UPDATE
DATA_EXPORT

🔗 关系总览

User 关系

  • department → Department (多对一)
  • team → Team (多对一)
  • managedDepartment → Department (一对一,作为部门负责人)
  • managedTeam → Team (一对一,作为组长)
  • createdProducts → Product[] (一对多,创建的产品)
  • ownedSKUs → ProductSKU[] (一对多,负责的SKU)
  • feedbacks → Feedback[] (一对多,提交的反馈)
  • assignedFeedbacks → Feedback[] (一对多,分配的反馈)
  • activityLogs → ActivityLog[] (一对多,操作日志)

Department 关系

  • parent → Department (自关联,父部门)
  • children → Department[] (自关联,子部门)
  • manager → User (一对一,部门负责人)
  • members → User[] (一对多,部门成员)
  • teams → Team[] (一对多,小组)
  • products → Product[] (一对多,产品)

Team 关系

  • department → Department (多对一,所属部门)
  • leader → User (一对一,组长)
  • members → User[] (一对多,小组成员)

Product 关系

  • creator → User (多对一,创建者)
  • department → Department (多对一,所属部门)
  • skus → ProductSKU[] (一对多,SKU列表)
  • assemblySteps → AssemblyStep[] (一对多,装配步骤)
  • panels → Panel[] (一对多,板件)
  • shareLinks → ShareLink[] (一对多,分享链接)
  • feedbacks → Feedback[] (一对多,问题反馈)

ProductSKU 关系

  • product → Product (多对一,所属产品)
  • owner → User (多对一,负责人)

Feedback 关系

  • product → Product (多对一,关联产品)
  • submitter → User (多对一,提交者)
  • assignee → User (多对一,处理者)

ActivityLog 关系

  • user → User (多对一,操作者)

📝 迁移记录

迁移文件

  • 20251212025147_product_sku_structure - 初始 Product-SKU 结构
  • 20251212134426_init_permission_system - 权限系统初始化

迁移内容

  1. 创建所有枚举类型
  2. 更新 User 表结构
  3. 创建 Department 表
  4. 创建 Team 表
  5. 更新 Product 表结构
  6. 更新 ProductSKU 表结构
  7. 创建 Feedback 表
  8. 创建 ActivityLog 表
  9. 创建所有索引
  10. 创建所有外键约束

✅ 验证结果

Prisma Client 生成

✔ Generated Prisma Client (v6.19.1)

数据库迁移

✔ Database reset successful
✔ All migrations applied

类型检查

✔ No TypeScript errors

🎯 下一步

Phase 2: 认证系统实现

  1. 系统初始化
  2. 注册功能
  3. 登录功能
  4. 首次登录强制修改
  5. 密码管理

预计时间:1-2 周


📚 相关文档


Phase 1 完成!准备开始 Phase 2! 🚀