Files
aidemo-202606/.codebuddy/plans/legacy-ecommerce-demo-repo_99b9a35c.md
2026-06-13 16:53:08 +08:00

175 lines
8.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: legacy-ecommerce-demo-repo
overview: 创建一个 Java Spring Boot 电商订单系统的"烂代码"演示仓库涵盖理解老代码、重构、补测试、修Bug、技术栈升级、添加新功能等6大AI辅助场景约12-15个文件适合30-45分钟培训实战。
todos:
- id: create-project-skeleton
content: 创建Maven项目骨架pom.xmlSpring Boot 2.1.18 + H2 + JDBC依赖、application.properties、schema.sql
status: completed
- id: create-models
content: 创建数据模型层Order.javajava.util.Date、无Lombok、OrderItem.java、OrderStatus.java枚举
status: completed
dependencies:
- create-project-skeleton
- id: create-db-util
content: 创建DbUtil.java工具类硬编码连接串、手动管理Connection、带明显设计缺陷的单例模式
status: completed
dependencies:
- create-project-skeleton
- id: create-dao-layer
content: 创建OrderDao.java原始JDBC操作、SQL字符串拼接含SQL注入风险、无连接池、无try-with-resources
status: completed
dependencies:
- create-models
- create-db-util
- id: create-god-service
content: 创建OrderService.java上帝类400+行、static可变计数器并发Bug、3处重复价格计算、200+行长方法createOrder、System.out日志、无异常处理
status: completed
dependencies:
- create-dao-layer
- id: create-controller
content: 创建OrderController.java混合校验/业务/DAO调用、无DTO分层、硬编码错误消息、search接口暴露SQL注入
status: completed
dependencies:
- create-god-service
- id: create-main-and-readme
content: 创建LegacyOrderApplication.java主启动类以及README.md培训指南含6大场景操作步骤和学员任务说明
status: completed
dependencies:
- create-controller
- id: verify-and-test
content: 使用 [subagent:code-explorer] 验证项目结构完整性确认可编译、H2自动建表、5个预埋Bug存在、所有API可访问
status: completed
dependencies:
- create-main-and-readme
---
## 用户需求
为一线开发团队制作一个用于AI编码培训的"传统烂代码"演示仓库让学员在培训过程中跟着实操学习如何用AI辅助老旧项目维护。
## 产品概述
一个刻意设计为"遗留系统"风格的Java Spring Boot电商订单管理后端包含订单创建、查询、取消等基本功能。代码刻意引入典型遗留系统问题上帝类、长函数、重复代码、SQL注入风险、硬编码、无测试、无异常处理等。支持一键启动H2内存数据库学员无需配置环境即可运行。
## 核心功能
- 订单CRUD REST API创建、查询、取消、列表
- H2内存数据库零配置启动
- 预留6大AI辅助实操场景
## 六大培训场景设计
1. **理解老代码+添加注释**学员面对无注释、命名混乱的代码用AI快速理解业务逻辑并生成文档
2. **重构(拆分大函数/消除重复)**OrderService中故意放置200+行方法和3处重复的价格计算逻辑
3. **补单元测试**项目零测试覆盖学员用AI为关键路径生成JUnit测试
4. **修Bug埋典型bug**预埋SQL注入、并发竞态、空指针、整型溢出、日期比较错误共5个bug
5. **技术栈升级**从Spring Boot 2.1.x + Java 8 迁移到 Spring Boot 3.x + Java 17或更高
6. **添加新功能**:在烂代码基础上增加订单退款、优惠券等新需求
## 技术栈选择
- **语言**: Java 8刻意使用旧版本为升级场景留空间
- **框架**: Spring Boot 2.1.18.RELEASE
- **构建工具**: Maven 3.6+
- **数据库**: H2内存模式零配置
- **数据访问**: 原始JDBC + 手动连接管理不使用任何ORM
- **依赖**: spring-boot-starter-web, h2, spring-boot-starter-jdbc
## 实现方案
### 整体策略
创建一个刻意劣化的Spring Boot应用每个文件都包含典型遗留代码特征。关键设计原则
- **不用ORM**直接JDBC操作手动管理连接SQL字符串拼接
- **不分层**Controller直接调用DAOService是上帝类
- **不写测试**:整个项目零测试文件
- **不用现代API**java.util.Date、旧式for循环、避免Stream/Lambda
- **全局状态**使用static可变字段管理订单号序列
### 遗留代码特征清单
| 特征 | 体现位置 | 培训价值 |
| --- | --- | --- |
| 上帝类 | OrderService.java (400+行) | 演示AI拆分大类的过程 |
| 长方法 | createOrder() 200+行 | 演示AI提取方法 |
| 重复代码 | 价格计算在3处重复 | 演示AI消除重复 |
| SQL拼接 | OrderDao.java | 演示AI发现安全漏洞 |
| 硬编码 | 税率0.17、连接串 | 演示AI提取配置 |
| 无日志 | 全部System.out | 演示AI添加日志框架 |
| 无异常处理 | 整个项目 | 演示AI添加异常处理 |
| 静态可变状态 | orderNumberSequence | 演示AI发现并发问题 |
### 预埋Bug清单
1. **SQL注入**OrderDao.getOrderByName()使用字符串拼接用户输入
2. **并发竞态**OrderService中static int orderNumberSequence++无同步
3. **空指针异常**computeTotalPrice()未检查OrderItem列表是否为空
4. **整型溢出**:折扣计算 int discount = price * discountPercent / 100price可为大值
5. **日期比较错误**使用java.util.Date的before/after而非推荐方式跨年场景有边界问题
### 项目结构
```
legacy-order-system/
├── pom.xml # [NEW] Maven配置Spring Boot 2.1.18 + H2
├── README.md # [NEW] 培训指南含6大场景操作说明
└── src/main/
├── java/com/legacy/order/
│ ├── LegacyOrderApplication.java # [NEW] 主启动类,无任何配置分离
│ ├── controller/
│ │ └── OrderController.java # [NEW] REST控制器600+行混合了校验、业务、DAO调用
│ ├── service/
│ │ └── OrderService.java # [NEW] 上帝类400+行,包含所有业务逻辑
│ ├── dao/
│ │ └── OrderDao.java # [NEW] 原始JDBC操作SQL拼接连接手动管理
│ ├── model/
│ │ ├── Order.java # [NEW] 订单实体java.util.Date无Lombok
│ │ ├── OrderItem.java # [NEW] 订单项实体
│ │ └── OrderStatus.java # [NEW] 订单状态枚举
│ └── util/
│ └── DbUtil.java # [NEW] 硬编码连接工具类,单例模式
└── resources/
├── application.properties # [NEW] 最小化配置H2内存库
└── schema.sql # [NEW] 建表DDL自动执行
```
### 数据流架构
```mermaid
graph LR
A[HTTP Request] --> B[OrderController]
B --> C[OrderService<br/>上帝类/全局状态]
C --> D[OrderDao<br/>原始JDBC/SQL拼接]
D --> E[H2内存数据库]
C -.-> F[DbUtil<br/>硬编码连接]
F -.-> E
```
### API设计
| 方法 | 路径 | 说明 |
| --- | --- | --- |
| POST | /api/orders | 创建订单 |
| GET | /api/orders/{id} | 查询单个订单 |
| GET | /api/orders | 列出所有订单 |
| PUT | /api/orders/{id}/cancel | 取消订单 |
| GET | /api/orders/search?name=xxx | 按商品名搜索含SQL注入风险 |
## 实现注意事项
- **性能**H2内存库保证启动速度(<2秒)学员无需安装任何外部依赖
- **可移植性**纯Maven项目克隆后mvn spring-boot:run即可启动
- **日志**刻意使用System.out.println模拟旧项目无日志框架的情况
- **编码规范**刻意使用坏命名如tmpdatalistflag等)、魔法数字无注释
- **向后兼容**使用Java 8语法避免模块化系统兼容JDK 8-17
## 使用的扩展
### SubAgent
- **code-explorer**
- 用途验证生成的仓库文件结构完整性和代码一致性
- 预期结果确认所有文件存在包引用正确Maven配置有效