# Implementation Plan: Float Ball Migration ## Overview 将悬浮球功能从 PHP 后端迁移到 .NET 10 后端,包括数据库表创建、数据迁移脚本和 API 接口实现。 ## Tasks - [x] 1. 创建数据库表和 Entity 配置 - [x] 1.1 创建 SQL Server 表 `float_ball_configs` - 在 SQL Server 中执行建表语句 - 包含所有必要字段和约束 - _Requirements: 1.1, 1.2, 1.3, 1.4_ - [x] 1.2 创建 FloatBallConfig 实体类 - 在 `HoneyBox.Model/Entities/` 目录创建 `FloatBallConfig.cs` - 定义所有属性和数据类型 - _Requirements: 4.1, 4.4_ - [x] 1.3 配置 DbContext - 在 `HoneyBoxDbContext.cs` 中添加 `DbSet` - 配置 Fluent API 映射 - _Requirements: 4.2, 4.3_ - [x] 2. 创建数据迁移脚本 - [x] 2.1 创建 `migrate_float_ball.js` 迁移脚本 - 参考 `migrate_coupons.js` 的模式 - 实现 MySQL 到 SQL Server 的数据迁移 - 支持增量迁移(跳过已迁移记录) - 包含错误处理和日志记录 - _Requirements: 2.1, 2.2, 2.3, 2.5, 2.6_ - [x] 2.2 执行数据迁移并验证 - 运行迁移脚本 - 验证记录数一致性 - _Requirements: 2.4_ - [x] 3. 实现 API 接口 - [x] 3.1 创建 FloatBallResponse DTO - 在 `HoneyBox.Model/Models/FloatBall/` 目录创建响应模型 - 排除 status, created_at, updated_at 字段 - _Requirements: 3.3, 3.4_ - [x] 3.2 创建 IFloatBallService 接口和实现 - 在 `HoneyBox.Core/Interfaces/` 创建接口 - 在 `HoneyBox.Core/Services/` 创建实现 - 实现 GetEnabledFloatBallsAsync 方法 - _Requirements: 3.1, 3.2_ - [x] 3.3 创建 API 端点 - 在 `ConfigController.cs` 或新建 `FloatBallController.cs` 添加端点 - 实现 `GET /api/getFloatBall` 接口 - 设置 `[AllowAnonymous]` 属性 - _Requirements: 3.5, 3.6, 5.1, 5.2, 5.3_ - [x] 3.4 注册服务依赖 - 在 Autofac 模块中注册 IFloatBallService - _Requirements: 4.3_ - [x] 4. Checkpoint - 验证功能 - 确保所有代码编译通过 - 测试 API 接口返回正确数据 - 验证响应格式与 PHP 后端一致 - 如有问题请询问用户 - [ ]* 5. 编写测试 - [ ]* 5.1 编写单元测试 - 测试 FloatBallService 只返回启用的配置 - 测试空结果场景 - **Property 4: API Returns Only Enabled Configurations** - **Validates: Requirements 3.1, 3.2** - [ ]* 5.2 编写集成测试 - 测试完整 API 端点 - 验证响应格式 - **Property 6: API Response Format Consistency** - **Validates: Requirements 5.1, 5.2** ## Notes - 任务标记 `*` 为可选任务,可跳过以加快 MVP 开发 - 每个任务引用具体需求以便追溯 - 数据迁移脚本参考现有的 `migrate_coupons.js` 模式 - API 端点无需认证,使用 `[AllowAnonymous]` 属性