261 lines
10 KiB
Markdown
261 lines
10 KiB
Markdown
# Implementation Plan: 商品系统迁移
|
||
|
||
## Overview
|
||
|
||
本任务列表将PHP商品系统迁移到.NET 8,按照接口优先级逐个迁移。每迁移一个接口前,需要先查看PHP代码了解详细业务逻辑;迁移完成后,需要在API接口文档.md中标记迁移状态。
|
||
|
||
## Tasks
|
||
|
||
- [x] 1. 基础设施准备
|
||
- [x] 1.1 创建商品相关的DTO和Request/Response模型
|
||
- 在HoneyBox.Model/Models目录下创建Goods相关模型
|
||
- 包括GoodsListDto、GoodsDetailResponse、BoxDetailDto、CollectionDto、PrizeLogsResponse等
|
||
- _Requirements: 1.1-10.3_
|
||
- [x] 1.2 创建服务接口定义
|
||
- 在HoneyBox.Core/Interfaces目录下创建IGoodsService、ICollectionService、IPrizeService、IGoodsCacheService接口
|
||
- _Requirements: 1.1-10.3_
|
||
- [x] 1.3 创建数据库实体模型
|
||
- 创建Goods、GoodsList、GoodsType、GoodsExtend、GoodsCollection等实体
|
||
- 配置EF Core映射
|
||
- _Requirements: 1.1-10.3_
|
||
- [x] 1.4 注册服务到DI容器
|
||
- 在ServiceModule.cs中注册新服务
|
||
- _Requirements: 1.1-10.3_
|
||
|
||
- [x] 2. 商品列表服务实现
|
||
- [x] 2.1 查看PHP代码了解商品列表业务逻辑
|
||
- 阅读server/php/app/api/controller/Goods.php中的goods_list方法
|
||
- 理解type过滤、unlock_amount过滤、分页、排序逻辑
|
||
- 理解join_count统计逻辑
|
||
- _Requirements: 1.1-1.6_
|
||
- [x] 2.2 实现GoodsService - 商品列表
|
||
- 实现GetGoodsListAsync方法
|
||
- 实现type过滤逻辑
|
||
- 实现unlock_amount过滤逻辑
|
||
- 实现排序逻辑(sort DESC, id DESC)
|
||
- 实现join_count从Redis获取
|
||
- _Requirements: 1.1-1.6_
|
||
- [ ]* 2.3 编写商品列表属性测试
|
||
- **Property 1: 商品列表过滤和排序正确性**
|
||
- **Validates: Requirements 1.1, 1.4, 1.5, 1.6**
|
||
|
||
- [x] 3. 商品详情服务实现
|
||
- [x] 3.1 查看PHP代码了解商品详情业务逻辑
|
||
- 阅读server/php/app/api/controller/Goods.php中的goods_detail方法
|
||
- 理解奖品列表查询、概率计算、锁箱信息、参与用户统计
|
||
- _Requirements: 2.1-2.7_
|
||
- [x] 3.2 实现GoodsService - 商品详情
|
||
- 实现GetGoodsDetailAsync方法
|
||
- 实现自动选择箱号逻辑(goods_num=0时)
|
||
- 实现奖品列表查询
|
||
- 实现概率计算逻辑
|
||
- 实现锁箱信息查询
|
||
- 实现参与用户头像列表
|
||
- 实现收藏状态查询
|
||
- 实现限购信息查询
|
||
- _Requirements: 2.1-2.7_
|
||
- [ ]* 3.3 编写商品详情属性测试
|
||
- **Property 2: 商品详情数据完整性**
|
||
- **Property 3: 奖品概率计算正确性**
|
||
- **Validates: Requirements 2.1, 2.3, 2.4, 2.5, 2.6, 2.7**
|
||
|
||
- [x] 4. 商品子奖品服务实现
|
||
- [x] 4.1 查看PHP代码了解子奖品业务逻辑
|
||
- 阅读server/php/app/api/controller/Goods.php中的goods_children方法
|
||
- 理解子奖品查询和real_pro计算
|
||
- _Requirements: 3.1-3.3_
|
||
- [x] 4.2 实现GoodsService - 子奖品查询
|
||
- 实现GetGoodsChildrenAsync方法
|
||
- 实现real_pro计算逻辑
|
||
- 实现shang_info关联查询
|
||
- _Requirements: 3.1-3.3_
|
||
- [ ]* 4.3 编写子奖品属性测试
|
||
- **Property 4: 子奖品数据完整性**
|
||
- **Validates: Requirements 3.1, 3.2, 3.3**
|
||
|
||
- [x] 5. 商品扩展配置服务实现
|
||
- [x] 5.1 查看PHP代码了解扩展配置业务逻辑
|
||
- 阅读server/php/app/api/controller/Goods.php中的goods_extend方法
|
||
- 理解配置优先级(商品配置 > 类型默认配置)
|
||
- _Requirements: 4.1-4.3_
|
||
- [x] 5.2 实现GoodsService - 扩展配置
|
||
- 实现GetGoodsExtendAsync方法
|
||
- 实现配置优先级逻辑
|
||
- _Requirements: 4.1-4.3_
|
||
|
||
- [x] 6. Checkpoint - 核心商品服务测试验证
|
||
- 确保商品列表、详情、子奖品、扩展配置服务测试通过
|
||
- 如有问题请询问用户
|
||
|
||
- [x] 7. 箱号管理服务实现
|
||
- [x] 7.1 查看PHP代码了解箱号管理业务逻辑
|
||
- 阅读server/php/app/api/controller/Goods.php中的goods_num_list、goods_num_detail方法
|
||
- 理解箱号分组、排序、余量统计逻辑
|
||
- _Requirements: 5.1-5.4_
|
||
- [x] 7.2 实现GoodsService - 箱号列表
|
||
- 实现GetBoxListAsync方法
|
||
- 实现箱号分组逻辑(每10个一组)
|
||
- _Requirements: 5.1_
|
||
- [x] 7.3 实现GoodsService - 箱号详情
|
||
- 实现GetBoxDetailAsync方法
|
||
- 实现排序逻辑(箱号升序/降序、余量降序)
|
||
- 实现余量统计
|
||
- 实现goodslist摘要
|
||
- _Requirements: 5.2-5.4_
|
||
- [ ]* 7.4 编写箱号管理属性测试
|
||
- **Property 5: 箱号管理数据正确性**
|
||
- **Validates: Requirements 5.1, 5.2, 5.3, 5.4**
|
||
|
||
- [x] 8. 收藏服务实现
|
||
- [x] 8.1 查看PHP代码了解收藏业务逻辑
|
||
- 阅读server/php/app/api/controller/Goods.php中的collection、collection_list方法
|
||
- 理解收藏/取消收藏逻辑
|
||
- _Requirements: 6.1-6.4_
|
||
- [x] 8.2 实现CollectionService
|
||
- 实现ToggleCollectionAsync方法(收藏/取消收藏)
|
||
- 实现GetCollectionListAsync方法(收藏列表)
|
||
- 实现IsCollectedAsync方法(检查收藏状态)
|
||
- 实现重复收藏检查
|
||
- _Requirements: 6.1-6.4_
|
||
- [ ]* 8.3 编写收藏服务属性测试
|
||
- **Property 6: 收藏操作往返一致性**
|
||
- **Validates: Requirements 6.1, 6.2, 6.4**
|
||
|
||
- [x] 9. 奖品统计服务实现
|
||
- [x] 9.1 查看PHP代码了解奖品统计业务逻辑
|
||
- 阅读server/php/app/api/controller/Goods.php中的goods_prize_count、goods_prize_content方法
|
||
- 理解统计计算逻辑
|
||
- _Requirements: 7.1-7.2_
|
||
- [x] 9.2 实现PrizeService - 奖品统计
|
||
- 实现GetPrizeCountAsync方法
|
||
- 实现GetPrizeContentAsync方法
|
||
- _Requirements: 7.1-7.2_
|
||
|
||
- [x] 10. 中奖记录服务实现
|
||
- [x] 10.1 查看PHP代码了解中奖记录业务逻辑
|
||
- 阅读server/php/app/api/controller/Goods.php中的goods_prize_logs方法
|
||
- 理解分类筛选、分页逻辑
|
||
- _Requirements: 8.1-8.4_
|
||
- [x] 10.2 实现PrizeService - 中奖记录
|
||
- 实现GetPrizeLogsAsync方法
|
||
- 实现shang_id筛选
|
||
- 实现分类列表查询
|
||
- 实现用户信息、奖品信息关联
|
||
- _Requirements: 8.1-8.4_
|
||
- [ ]* 10.3 编写中奖记录属性测试
|
||
- **Property 7: 中奖记录数据完整性**
|
||
- **Validates: Requirements 8.1, 8.2, 8.3, 8.4**
|
||
|
||
- [x] 11. 缓存服务实现
|
||
- [x] 11.1 实现GoodsCacheService
|
||
- 实现GetJoinCountAsync方法
|
||
- 实现IncrementJoinCountAsync方法
|
||
- 实现InvalidateGoodsCacheAsync方法
|
||
- 配置缓存过期时间
|
||
- _Requirements: 9.1-9.4_
|
||
|
||
- [x] 12. Checkpoint - 服务层测试验证
|
||
- 确保所有服务层单元测试通过
|
||
- 确保所有属性测试通过
|
||
- 如有问题请询问用户
|
||
|
||
- [x] 13. 控制器实现 - GoodsController
|
||
- [x] 13.1 实现商品列表接口 POST /goods_list
|
||
- 调用GoodsService.GetGoodsListAsync
|
||
- 更新API接口文档标记迁移状态
|
||
- _Requirements: 1.1-1.6_
|
||
- [x] 13.2 实现商品详情接口 POST /goods_detail
|
||
- 调用GoodsService.GetGoodsDetailAsync
|
||
- 更新API接口文档标记迁移状态
|
||
- _Requirements: 2.1-2.7_
|
||
- [x] 13.3 实现商品子奖品接口 POST /goods_children
|
||
- 调用GoodsService.GetGoodsChildrenAsync
|
||
- 更新API接口文档标记迁移状态
|
||
- _Requirements: 3.1-3.3_
|
||
- [x] 13.4 实现商品扩展配置接口 POST /goods_extend
|
||
- 调用GoodsService.GetGoodsExtendAsync
|
||
- 更新API接口文档标记迁移状态
|
||
- _Requirements: 4.1-4.3_
|
||
- [x] 13.5 实现箱号列表接口 POST /goods_num_list
|
||
- 调用GoodsService.GetBoxListAsync
|
||
- 更新API接口文档标记迁移状态
|
||
- _Requirements: 5.1_
|
||
- [x] 13.6 实现箱号详情接口 POST /goods_num_detail
|
||
- 调用GoodsService.GetBoxDetailAsync
|
||
- 更新API接口文档标记迁移状态
|
||
- _Requirements: 5.2-5.4_
|
||
- [x] 13.7 实现奖品数量统计接口 POST /goods_prize_count
|
||
- 调用PrizeService.GetPrizeCountAsync
|
||
- 更新API接口文档标记迁移状态
|
||
- _Requirements: 7.1_
|
||
- [x] 13.8 实现奖品内容接口 POST /goods_prize_content
|
||
- 调用PrizeService.GetPrizeContentAsync
|
||
- 更新API接口文档标记迁移状态
|
||
- _Requirements: 7.2_
|
||
- [x] 13.9 实现中奖记录接口 POST /goods_prize_logs
|
||
- 调用PrizeService.GetPrizeLogsAsync
|
||
- 更新API接口文档标记迁移状态
|
||
- _Requirements: 8.1-8.4_
|
||
|
||
- [x] 14. 控制器实现 - CollectionController
|
||
- [x] 14.1 实现收藏/取消收藏接口 POST /collection
|
||
- 调用CollectionService.ToggleCollectionAsync
|
||
- 更新API接口文档标记迁移状态
|
||
- _Requirements: 6.1-6.3_
|
||
- [x] 14.2 实现收藏列表接口 POST /collection_list
|
||
- 调用CollectionService.GetCollectionListAsync
|
||
- 更新API接口文档标记迁移状态
|
||
- _Requirements: 6.4_
|
||
|
||
- [x] 15. Checkpoint - 控制器测试验证
|
||
- 确保所有控制器接口可正常访问
|
||
- 使用Postman或HTTP文件测试各接口
|
||
- 如有问题请询问用户
|
||
|
||
- [x] 16. API响应格式验证
|
||
- [x] 16.1 验证所有接口响应格式
|
||
- 确保status、msg、data结构一致
|
||
- 确保字段命名与PHP API一致(snake_case)
|
||
- _Requirements: 10.1, 10.3_
|
||
- [ ]* 16.2 编写API格式属性测试
|
||
- **Property 8: API响应格式一致性**
|
||
- **Validates: Requirements 10.1, 10.3**
|
||
|
||
- [x] 17. 集成测试
|
||
- [x] 17.1 编写商品列表集成测试
|
||
- 测试完整的商品查询流程
|
||
- 测试分类筛选
|
||
- _Requirements: 1.1-1.6_
|
||
- [x] 17.2 编写商品详情集成测试
|
||
- 测试商品详情查询
|
||
- 测试概率计算
|
||
- _Requirements: 2.1-2.7_
|
||
- [x] 17.3 编写收藏功能集成测试
|
||
- 测试收藏/取消收藏流程
|
||
- _Requirements: 6.1-6.4_
|
||
|
||
- [x] 18. 文档更新和最终验证
|
||
- [x] 18.1 更新API接口文档
|
||
- 确认所有迁移接口都已标记
|
||
- 记录新接口地址
|
||
- _Requirements: 10.4_
|
||
- [x] 18.2 创建HTTP测试文件
|
||
- 在HoneyBox.Api目录下创建goods-system.http测试文件
|
||
- 包含所有商品系统相关接口的测试请求
|
||
|
||
- [x] 19. Final Checkpoint - 完整功能验证
|
||
- 确保所有测试通过
|
||
- 确保API文档已更新
|
||
- 确保与前端兼容性
|
||
- 如有问题请询问用户
|
||
|
||
## Notes
|
||
|
||
- Tasks marked with `*` are optional and can be skipped for faster MVP
|
||
- Each task references specific requirements for traceability
|
||
- Checkpoints ensure incremental validation
|
||
- Property tests validate universal correctness properties
|
||
- Unit tests validate specific examples and edge cases
|
||
- 每迁移完成一个接口,都需要在docs/API接口文档.md中标记迁移状态和新接口地址
|
||
- 迁移前必须先查看PHP代码了解详细业务逻辑,确保功能一致性
|