# 数据模型和Schema变更 ## 现有数据模型状态 **用户模型**: - **现状**: 设计良好,包含完整的用户管理和权限系统 - **关键属性**: - `id`: number - 主键标识符 - `username`: string - 唯一用户名(主要登录标识) - `email`: string | null - 可选邮箱地址 - `password`: string - 加密密码(bcrypt哈希) - `roles`: Role[] - 用户角色多对多关系 - **关系**: 与Role实体建立正确的多对多关系映射 **优化重点**: 保持现有数据模型不变,仅优化查询性能和验证逻辑 ### TypeScript接口定义 ```typescript // 用户实体接口 export interface User { id: number; username: string; email: string | null; password: string; roles: Role[]; createdAt: Date; updatedAt: Date; } // 角色实体接口 export interface Role { id: number; name: string; permissions: string[]; users: User[]; createdAt: Date; updatedAt: Date; } // 用户创建DTO export interface CreateUserDto { username: string; email?: string; password: string; roleIds?: number[]; } // 用户更新DTO export interface UpdateUserDto { username?: string; email?: string | null; password?: string; roleIds?: number[]; } // 分页响应接口 export interface PaginatedResponse { data: T[]; pagination: { total: number; current: number; pageSize: number; totalPages: number; }; } ``` ### 数据关系 - **User ↔ Role**: 多对多关系,通过中间表关联 - **User → (createdAt, updatedAt)**: 自动时间戳管理 - **Role → permissions**: 字符串数组存储权限列表 ## Schema集成策略 - **数据库变更要求**: 无新表创建,仅优化现有表结构 - **新表**: 无 - **修改的表**: 无结构性变更 - **新索引**: 考虑为常用查询字段添加索引 - **迁移策略**: 无破坏性变更,使用TypeORM迁移工具 ## 向后兼容性 - 保持所有现有API端点不变 - 确保现有数据查询继续正常工作 - 不修改任何现有字段定义 - 新增功能通过可选字段或新端点实现