chore: 完成v1.2版本迭代与代码清理

本次提交完成了多项清理与规范工作:
1. 移除默认管理员硬编码配置与云同步相关代码
2. 简化前端与MAUI端的配置,关闭静态资源托管以外的冗余功能
3. 清理.gitignore与协调目录,移除临时文件与冗余规则
4. 统一项目命名规范,修正包名与版本号
5. 重构后端数据模型,移除ABP审计字段与云同步相关逻辑
6. 简化WebView配置与系统栏样式,移除不必要的平台检测代码
7. 更新文档与规则文件,完善项目规范与版本记录
This commit is contained in:
ShaoHua
2026-06-15 22:06:58 +08:00
parent 46db04e43e
commit cf96c56bed
70 changed files with 2514 additions and 2092 deletions
@@ -0,0 +1,99 @@
# 数据模型与迁移约束(Hua.Todo 专属)
> 适用范围:本规则属于 **项目规则**(仅 Hua.Todo 项目生效)。
>
> 描述当前数据库实体、字段约束、EF Core 迁移历史,约束智能体在改 schema 时遵循的纪律。
## 一、技术栈
- ORM**EF Core**
- 数据库:**SQLite**(嵌入式与 Host 开发都走 SQLite;生产 Host 可切其他后端)
- DbContext[TodoDbContext](file:///d:/Proj/6.Hua.Todo/src/Hua.Todo.Application/Data/TodoDbContext.cs)
- 迁移目录:`Hua.Todo.Application/Migrations/`
- **表名规范**:遵循 ABP 模板规范,格式为 `T_{实体名}s`,如 `T_Tasks``T_Users`
## 二、当前实体清单(src/Hua.Todo.Core/Entities/
### 2.1 TaskEntity(待重构为 ABP 基类)
> ⚠️ **重大变更预警**TaskEntity 计划继承 `FullAuditedEntityWithUser<Guid, IdentityUser>`,重构后将包含 ABP 全部审计字段。此改为破坏性变更,详见 [09-CloudSync-同步策略改进方案.md](../../../docs/project/研发工单-v1.2.0/09-CloudSync-同步策略改进方案.md)。
**重构前(当前)**
| 字段 | 类型 | 说明 |
|---|---|---|
| `Id` | `int` | 主键(待改为 Guid |
| `UserId` | `Guid` | 任务所属用户 |
| `Title` | `string` | 标题 |
| `Priority` | `TaskPriority` | 优先级枚举 |
| `IsCompleted` | `bool` | 是否完成 |
| `CreatedAt` | `DateTime` | 创建时间 |
| `UpdatedAt` | `DateTime` | 更新时间 |
| `ParentTaskId` | `int?` | 父任务ID(待改为 Guid? |
**重构后(ABP 标准)**
继承 `FullAuditedEntityWithUser<Guid, IdentityUser>` 后自动获得:
| ABP 审计字段 | 类型 | 说明 |
|---|---|---|
| `Id` | `Guid` | 主键(强制 Guid |
| `ExtraProperties` | `ExtraPropertyDictionary` | 扩展属性(基类提供) |
| `ConcurrencyStamp` | `string?` | 并发戳 |
| `CreationTime` | `DateTime` | 创建时间 |
| `CreatorId` | `Guid?` | 创建人 |
| `LastModificationTime` | `DateTime?` | 最后修改时间 |
| `LastModifierId` | `Guid?` | 最后修改人 |
| `IsDeleted` | `bool` | 软删除标记 |
| `DeletionTime` | `DateTime?` | 删除时间 |
| `DeleterId` | `Guid?` | 删除人 |
业务字段保留:`UserId``Title``Priority``IsCompleted``ParentTaskId`
### 2.2 其他实体
| 实体 | 关键字段 | 约束 |
|---|---|---|
| `TaskPriority` | 枚举 | Priority 字段对应类型 |
| `UserEntity` | `Id``UserName``PasswordHash``PasswordSalt``Role``MustChangePassword` | 唯一索引:`UserName` |
| `UserSessionEntity` | `SessionId``UserId``ExpiresAtUtc``IsStepUp``StepUpExpiresAtUtc` | session token 由 DB 管理(非纯 JWT |
| `SecurityPolicyEntity` | `UserId``AllowPersist``AllowSync``SecondFactorExpiryMinutes``IsTrustedDeviceOnly` | 与 User 一对一 |
| `AuditLogEntity` | `Id``UserId``Action``OccurredAtUtc``Details` | 关键安全事件 |
| `TodoUserIds` | `LocalUserId = "local"` | 静态常量类,非实体 |
## 三、迁移历史(按时间)
| 迁移 | 含义 |
|---|---|
| `20260313044926_InitialCreate` | 初始 Tasks 表 |
| `20260313092658_AddParentTaskId` | 父子任务字段 |
| `20260406172936_AddCloudSyncCoreEntities` | Users / UserSessions / SecurityPolicies |
| `20260406173734_AddAllowSyncToSecurityPolicy` | `AllowSync` 字段 |
| `20260413140347_UpdateSecurityEntities` | 安全实体调整 |
| `20260413140753_AddAuditLogs` | AuditLogs 表 |
| `20260424164713_AddPasswordSaltToUsers` | 密码加盐 |
| `20260510171230_AddMustChangePasswordToUsers` | 强制改密标志 |
| `MakeTaskEntityAbpCompatible`(待创建) | 重构为继承 ABP 基类,新增审计字段,主键从 `int` 改为 `Guid` |
## 四、改 schema 必须遵守的纪律
1. **禁止手改 `*ModelSnapshot.cs`**:使用 `dotnet ef migrations add` 命令生成
2. **迁移命名以动词开头**`AddXxx` / `UpdateXxx` / `RemoveXxx` / `RenameXxx`
3. **避免破坏性迁移**:删除字段前先确认数据已被业务层迁移;优先采用"双写/兼容期"
4. **嵌入式宿主启动时自动 Migrate**:见 `EmbeddedWebServerService.cs` 中的 `db.Database.Migrate()` 调用;任何破坏迁移幂等性的改动都会让客户端启动失败
5. **业务字段命名沿用 `Task*` 词根**(即业务实体),编码工作侧不要在实体上用 `Task` 词根之外的同义词
6. **`UserId` 字段不可为空**:本地模式使用 `TodoUserIds.LocalUserId = "local"`,云端模式使用真实用户 GUID 字符串
## 五、DTO 与实体的映射边界
- **实体(Entity**:仅在 `Hua.Todo.Core` / `Hua.Todo.Application/Data` 内部使用
- **DTOModels**:跨进程边界(HTTP API、WebView 注入)使用,位于 `Hua.Todo.Application/CloudSync/Models/``Hua.Todo.Application/Models/`
- **不要把实体直接序列化为 API 响应**:避免暴露内部字段、避免循环引用
## 六、检查清单(schema 变更)
1. [ ] 是否新增了 EF Core 迁移(而非手改快照)?
2. [ ] 迁移名称是否以 `AddXxx`/`UpdateXxx`/`RemoveXxx` 开头?
3. [ ] 是否在 [docs/manual/01-技术设计文档.md](../../../docs/manual/01-技术设计文档.md) 中同步更新数据模型描述?
4. [ ] 是否在 [docs/manual/06-版本记录.md](../../../docs/manual/06-版本记录.md) 中追加非琐碎变更条目?
5. [ ] 是否在嵌入式宿主上验证了启动时 Migrate 不报错?