Files
tyapi-server/docs/应用服务层改造TODO.md
2025-07-11 21:05:58 +08:00

569 lines
17 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.

# 应用服务层改造 TODO 清单
## 📋 总体进度
- [ ] 阶段一:基础架构搭建 (0/4)
- [ ] 阶段二:用户域改造 (0/4)
- [ ] 阶段三:认证域改造 (0/4)
- [ ] 阶段四:财务域改造 (0/4)
- [ ] 阶段五:管理员域改造 (0/3)
- [ ] 阶段六:整体优化 (0/4)
---
## 🏗️ 阶段一:基础架构搭建
### 1.1 创建新的目录结构
- [ ] 创建 `internal/application/` 目录
- [ ] 创建 `internal/infrastructure/` 目录
- [ ] 创建应用服务层子目录结构
- [ ] `internal/application/user/`
- [ ] `internal/application/certification/`
- [ ] `internal/application/finance/`
- [ ] `internal/application/admin/`
- [ ] 创建基础设施层子目录结构
- [ ] `internal/infrastructure/http/`
- [ ] `internal/infrastructure/database/`
- [ ] `internal/infrastructure/cache/`
- [ ] `internal/infrastructure/external/`
- [ ] `internal/infrastructure/config/`
### 1.2 移动现有组件到基础设施层
- [ ] 移动 HTTP 处理器
- [ ] 移动 `domains/user/handlers/``infrastructure/http/handlers/`
- [ ] 移动 `domains/certification/handlers/``infrastructure/http/handlers/`
- [ ] 移动 `domains/finance/handlers/``infrastructure/http/handlers/`
- [ ] 移动 `domains/admin/handlers/``infrastructure/http/handlers/`
- [ ] 移动路由
- [ ] 移动 `domains/user/routes/``infrastructure/http/routes/`
- [ ] 移动 `domains/certification/routes/``infrastructure/http/routes/`
- [ ] 移动 `domains/finance/routes/``infrastructure/http/routes/`
- [ ] 移动 `domains/admin/routes/``infrastructure/http/routes/`
- [ ] 移动中间件
- [ ] 移动 `shared/middleware/``infrastructure/http/middleware/`
- [ ] 移动仓储实现
- [ ] 移动 `domains/user/repositories/``infrastructure/database/repositories/user/`
- [ ] 移动 `domains/certification/repositories/``infrastructure/database/repositories/certification/`
- [ ] 移动 `domains/finance/repositories/``infrastructure/database/repositories/finance/`
- [ ] 移动 `domains/admin/repositories/``infrastructure/database/repositories/admin/`
- [ ] 移动外部服务
- [ ] 移动 `shared/sms/``infrastructure/external/sms/`
- [ ] 移动 `shared/ocr/``infrastructure/external/ocr/`
- [ ] 移动 `shared/storage/``infrastructure/external/storage/`
- [ ] 移动 `shared/notification/``infrastructure/external/notification/`
### 1.3 更新导入路径
- [ ] 更新所有移动文件的导入路径
- [ ] 更新 `container/container.go` 中的导入路径
- [ ] 更新 `app/app.go` 中的导入路径
- [ ] 检查并修复所有编译错误
### 1.4 确保项目能正常启动
- [ ] 运行 `go mod tidy` 整理依赖
- [ ] 编译项目确保无错误
- [ ] 启动项目确保能正常运行
- [ ] 运行基础功能测试
---
## 👤 阶段二:用户域改造
### 2.1 创建用户应用服务基础结构
- [ ] 创建 `internal/application/user/user_application_service.go`
- [ ] 创建命令对象
- [ ] `internal/application/user/dto/commands/register_user_command.go`
- [ ] `internal/application/user/dto/commands/login_user_command.go`
- [ ] `internal/application/user/dto/commands/change_password_command.go`
- [ ] 创建查询对象
- [ ] `internal/application/user/dto/queries/get_user_profile_query.go`
- [ ] 创建响应对象
- [ ] `internal/application/user/dto/responses/register_user_response.go`
- [ ] `internal/application/user/dto/responses/login_user_response.go`
- [ ] `internal/application/user/dto/responses/user_profile_response.go`
- [ ] 创建应用事件
- [ ] `internal/application/user/events/user_application_events.go`
### 2.2 实现用户应用服务逻辑
- [ ] 实现 `RegisterUser` 方法
- [ ] 验证短信验证码
- [ ] 检查手机号是否已存在
- [ ] 创建用户实体
- [ ] 保存用户
- [ ] 发布用户注册事件
- [ ] 实现 `LoginUser` 方法
- [ ] 支持密码登录
- [ ] 支持短信登录
- [ ] 发布用户登录事件
- [ ] 实现 `ChangePassword` 方法
- [ ] 验证短信验证码
- [ ] 验证旧密码
- [ ] 更新密码
- [ ] 发布密码修改事件
- [ ] 实现 `GetUserProfile` 方法
- [ ] 获取用户信息
- [ ] 返回脱敏信息
### 2.3 重构用户 HTTP 处理器
- [ ] 修改 `infrastructure/http/handlers/user_handler.go`
- [ ] 将 HTTP 处理器改为调用应用服务
- [ ] 简化 HTTP 处理器的职责
- [ ] 保持 API 接口不变
- [ ] 更新错误处理
### 2.4 更新依赖注入配置
- [ ] 在 `container/container.go` 中注册用户应用服务
- [ ] 更新用户 HTTP 处理器的依赖
- [ ] 确保向后兼容
### 2.5 测试用户相关功能
- [ ] 测试用户注册功能
- [ ] 测试用户登录功能(密码/短信)
- [ ] 测试密码修改功能
- [ ] 测试用户信息查询功能
- [ ] 验证 API 接口兼容性
---
## 🏢 阶段三:认证域改造
### 3.1 创建认证应用服务基础结构
- [ ] 创建 `internal/application/certification/certification_application_service.go`
- [ ] 创建命令对象
- [ ] `internal/application/certification/dto/commands/create_certification_command.go`
- [ ] `internal/application/certification/dto/commands/submit_enterprise_info_command.go`
- [ ] `internal/application/certification/dto/commands/upload_license_command.go`
- [ ] `internal/application/certification/dto/commands/initiate_face_verify_command.go`
- [ ] `internal/application/certification/dto/commands/apply_contract_command.go`
- [ ] 创建查询对象
- [ ] `internal/application/certification/dto/queries/get_certification_status_query.go`
- [ ] `internal/application/certification/dto/queries/get_certification_details_query.go`
- [ ] 创建响应对象
- [ ] `internal/application/certification/dto/responses/certification_response.go`
- [ ] `internal/application/certification/dto/responses/enterprise_info_response.go`
- [ ] `internal/application/certification/dto/responses/upload_license_response.go`
- [ ] 创建应用事件
- [ ] `internal/application/certification/events/certification_application_events.go`
### 3.2 实现认证应用服务逻辑
- [ ] 实现 `CreateCertification` 方法
- [ ] 检查用户是否已有认证申请
- [ ] 创建认证申请
- [ ] 发布认证创建事件
- [ ] 实现 `SubmitEnterpriseInfo` 方法
- [ ] 验证认证状态
- [ ] 检查统一社会信用代码
- [ ] 创建企业信息
- [ ] 更新认证状态
- [ ] 发布企业信息提交事件
- [ ] 实现 `UploadLicense` 方法
- [ ] 上传文件到存储服务
- [ ] 创建上传记录
- [ ] 进行 OCR 识别
- [ ] 发布营业执照上传事件
- [ ] 实现 `InitiateFaceVerify` 方法
- [ ] 验证认证状态
- [ ] 调用人脸识别服务
- [ ] 更新认证状态
- [ ] 发布人脸识别事件
- [ ] 实现 `ApplyContract` 方法
- [ ] 验证认证状态
- [ ] 申请电子合同
- [ ] 更新认证状态
- [ ] 发布合同申请事件
### 3.3 重构认证 HTTP 处理器
- [ ] 修改 `infrastructure/http/handlers/certification_handler.go`
- [ ] 将 HTTP 处理器改为调用应用服务
- [ ] 简化 HTTP 处理器的职责
- [ ] 保持 API 接口不变
- [ ] 更新错误处理
### 3.4 处理跨域协调逻辑
- [ ] 在应用服务中协调用户域和认证域
- [ ] 确保数据一致性
- [ ] 处理跨域事件
### 3.5 测试认证流程
- [ ] 测试创建认证申请
- [ ] 测试提交企业信息
- [ ] 测试上传营业执照
- [ ] 测试人脸识别流程
- [ ] 测试合同申请流程
- [ ] 验证完整认证流程
---
## 💰 阶段四:财务域改造
### 4.1 创建财务应用服务基础结构
- [ ] 创建 `internal/application/finance/finance_application_service.go`
- [ ] 创建命令对象
- [ ] `internal/application/finance/dto/commands/create_wallet_command.go`
- [ ] `internal/application/finance/dto/commands/recharge_wallet_command.go`
- [ ] `internal/application/finance/dto/commands/withdraw_wallet_command.go`
- [ ] `internal/application/finance/dto/commands/create_user_secrets_command.go`
- [ ] `internal/application/finance/dto/commands/regenerate_access_key_command.go`
- [ ] 创建查询对象
- [ ] `internal/application/finance/dto/queries/get_wallet_info_query.go`
- [ ] `internal/application/finance/dto/queries/get_user_secrets_query.go`
- [ ] 创建响应对象
- [ ] `internal/application/finance/dto/responses/wallet_response.go`
- [ ] `internal/application/finance/dto/responses/transaction_response.go`
- [ ] `internal/application/finance/dto/responses/user_secrets_response.go`
- [ ] 创建应用事件
- [ ] `internal/application/finance/events/finance_application_events.go`
### 4.2 实现财务应用服务逻辑
- [ ] 实现 `CreateWallet` 方法
- [ ] 检查用户是否已有钱包
- [ ] 创建钱包
- [ ] 发布钱包创建事件
- [ ] 实现 `RechargeWallet` 方法
- [ ] 验证金额
- [ ] 检查钱包状态
- [ ] 增加余额
- [ ] 发布充值事件
- [ ] 实现 `WithdrawWallet` 方法
- [ ] 验证金额
- [ ] 检查余额是否足够
- [ ] 减少余额
- [ ] 发布提现事件
- [ ] 实现 `CreateUserSecrets` 方法
- [ ] 生成访问密钥
- [ ] 创建用户密钥
- [ ] 发布密钥创建事件
- [ ] 实现 `RegenerateAccessKey` 方法
- [ ] 验证用户密钥
- [ ] 重新生成访问密钥
- [ ] 发布密钥更新事件
### 4.3 添加事务管理
- [ ] 在应用服务中添加事务边界
- [ ] 确保资金操作的数据一致性
- [ ] 处理事务回滚
### 4.4 重构财务 HTTP 处理器
- [ ] 修改 `infrastructure/http/handlers/finance_handler.go`
- [ ] 将 HTTP 处理器改为调用应用服务
- [ ] 简化 HTTP 处理器的职责
- [ ] 保持 API 接口不变
- [ ] 更新错误处理
### 4.5 测试财务功能
- [ ] 测试创建钱包
- [ ] 测试钱包充值
- [ ] 测试钱包提现
- [ ] 测试创建用户密钥
- [ ] 测试重新生成访问密钥
- [ ] 验证资金安全
---
## 👨‍💼 阶段五:管理员域改造
### 5.1 创建管理员应用服务基础结构
- [ ] 创建 `internal/application/admin/admin_application_service.go`
- [ ] 创建命令对象
- [ ] `internal/application/admin/dto/commands/admin_login_command.go`
- [ ] `internal/application/admin/dto/commands/create_admin_command.go`
- [ ] `internal/application/admin/dto/commands/update_admin_command.go`
- [ ] `internal/application/admin/dto/commands/change_admin_password_command.go`
- [ ] 创建查询对象
- [ ] `internal/application/admin/dto/queries/get_admin_info_query.go`
- [ ] `internal/application/admin/dto/queries/list_admins_query.go`
- [ ] 创建响应对象
- [ ] `internal/application/admin/dto/responses/admin_login_response.go`
- [ ] `internal/application/admin/dto/responses/admin_info_response.go`
- [ ] `internal/application/admin/dto/responses/admin_list_response.go`
- [ ] 创建应用事件
- [ ] `internal/application/admin/events/admin_application_events.go`
### 5.2 实现管理员应用服务逻辑
- [ ] 实现 `AdminLogin` 方法
- [ ] 验证管理员凭据
- [ ] 生成 JWT 令牌
- [ ] 记录登录日志
- [ ] 发布管理员登录事件
- [ ] 实现 `CreateAdmin` 方法
- [ ] 检查用户名和邮箱唯一性
- [ ] 加密密码
- [ ] 创建管理员
- [ ] 记录操作日志
- [ ] 发布管理员创建事件
- [ ] 实现 `UpdateAdmin` 方法
- [ ] 验证管理员存在
- [ ] 更新管理员信息
- [ ] 记录操作日志
- [ ] 发布管理员更新事件
- [ ] 实现 `ChangeAdminPassword` 方法
- [ ] 验证旧密码
- [ ] 更新密码
- [ ] 记录操作日志
- [ ] 发布密码修改事件
### 5.3 重构管理员 HTTP 处理器
- [ ] 修改 `infrastructure/http/handlers/admin_handler.go`
- [ ] 将 HTTP 处理器改为调用应用服务
- [ ] 简化 HTTP 处理器的职责
- [ ] 保持 API 接口不变
- [ ] 更新错误处理
### 5.4 测试管理功能
- [ ] 测试管理员登录
- [ ] 测试创建管理员
- [ ] 测试更新管理员
- [ ] 测试修改管理员密码
- [ ] 测试管理员信息查询
- [ ] 验证权限控制
---
## 🔧 阶段六:整体优化
### 6.1 添加应用事件处理
- [ ] 实现应用事件发布机制
- [ ] 添加应用事件处理器
- [ ] 处理跨域事件协调
- [ ] 添加事件持久化
### 6.2 完善监控和日志
- [ ] 添加应用服务层的日志记录
- [ ] 完善错误处理和监控
- [ ] 添加性能指标收集
- [ ] 优化日志格式和级别
### 6.3 性能优化
- [ ] 优化数据库查询
- [ ] 添加缓存策略
- [ ] 优化并发处理
- [ ] 添加连接池配置
### 6.4 文档更新
- [ ] 更新 API 文档
- [ ] 更新架构文档
- [ ] 更新开发指南
- [ ] 添加部署文档
---
## 📝 开发指南
### 应用服务层开发模式
#### 1. 应用服务结构
```go
type UserApplicationService struct {
userService *services.UserService
smsCodeService *services.SMSCodeService
eventBus interfaces.EventBus
logger *zap.Logger
}
```
#### 2. 命令对象模式
```go
type RegisterUserCommand struct {
Phone string `json:"phone" binding:"required,len=11"`
Password string `json:"password" binding:"required,min=6,max=128"`
ConfirmPassword string `json:"confirm_password" binding:"required,eqfield=Password"`
Code string `json:"code" binding:"required,len=6"`
// 应用层上下文信息
CorrelationID string `json:"-"`
ClientIP string `json:"-"`
UserAgent string `json:"-"`
}
```
#### 3. 查询对象模式
```go
type GetUserProfileQuery struct {
UserID string `json:"-"`
}
```
#### 4. 响应对象模式
```go
type RegisterUserResponse struct {
UserID string `json:"user_id"`
Phone string `json:"phone"`
RegisteredAt time.Time `json:"registered_at"`
}
```
#### 5. 应用事件模式
```go
type UserRegisteredApplicationEvent struct {
ID string `json:"id"`
UserID string `json:"user_id"`
Phone string `json:"phone"`
RegisteredAt time.Time `json:"registered_at"`
CorrelationID string `json:"correlation_id"`
ClientIP string `json:"client_ip"`
UserAgent string `json:"user_agent"`
}
```
### 业务逻辑编写指南
#### 1. 应用服务方法结构
```go
func (s *UserApplicationService) RegisterUser(ctx context.Context, cmd *dto.RegisterUserCommand) (*dto.RegisterUserResponse, error) {
// 1. 参数验证
// 2. 业务规则检查
// 3. 调用域服务
// 4. 事务处理
// 5. 发布事件
// 6. 返回结果
}
```
#### 2. 错误处理模式
```go
if err != nil {
s.logger.Error("操作失败", zap.Error(err))
return nil, fmt.Errorf("操作失败: %w", err)
}
```
#### 3. 事件发布模式
```go
event := &dto.UserRegisteredApplicationEvent{
ID: uuid.New().String(),
UserID: user.ID,
Phone: user.Phone,
RegisteredAt: time.Now(),
CorrelationID: cmd.CorrelationID,
ClientIP: cmd.ClientIP,
UserAgent: cmd.UserAgent,
}
if err := s.eventBus.Publish(ctx, event); err != nil {
s.logger.Warn("发布事件失败", zap.Error(err))
}
```
#### 4. 事务管理模式
```go
// 在应用服务中使用事务
tx := s.db.Begin()
defer func() {
if r := recover(); r != nil {
tx.Rollback()
}
}()
// 执行业务操作
if err := s.userService.CreateUser(ctx, user); err != nil {
tx.Rollback()
return nil, err
}
if err := tx.Commit().Error; err != nil {
return nil, err
}
```
### 测试指南
#### 1. 单元测试
```go
func TestUserApplicationService_RegisterUser(t *testing.T) {
// 准备测试数据
// 执行测试
// 验证结果
}
```
#### 2. 集成测试
```go
func TestUserRegistrationFlow(t *testing.T) {
// 测试完整流程
// 验证数据库状态
// 验证事件发布
}
```
---
## 🚀 快速开始
### 第一步:备份当前代码
```bash
git checkout -b feature/application-service-layer
git add .
git commit -m "备份当前代码状态"
```
### 第二步:开始阶段一
按照 TODO 清单逐步执行阶段一的任务。
### 第三步:验证改造
每个阶段完成后,确保:
- 项目能正常编译
- 项目能正常启动
- 基础功能正常工作
- 测试通过
### 第四步:提交代码
每个阶段完成后提交代码:
```bash
git add .
git commit -m "完成阶段XXXX改造"
```
---
## 📞 支持
如果在改造过程中遇到问题:
1. 检查 TODO 清单是否遗漏
2. 查看相关文档
3. 运行测试验证
4. 回滚到上一个稳定版本