rwadurian/backend/services/identity-service/docs/FIXES_APPLIED.md

124 lines
4.5 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.

# 修复总结
## 已修复的错误 (27个)
### 1. Prisma Schema 缺失表定义
**已修复**: 在 `prisma/schema.prisma` 中添加了:
- `DeadLetterEvent` 模型 - 用于死信队列事件存储
- `SmsCode` 模型 - 用于短信验证码存储
### 2. DTO 命名不一致
**已修复**:
- `SubmitKycDto` -> 添加了 `SubmitKYCDto` 别名导出
- `UserProfileDto` -> 添加了 `UserProfileResponseDto` 别名导出
- `DeviceDto` -> 添加了 `DeviceResponseDto` 别名导出
### 3. 领域模块导入路径错误
**已修复**: [wallet-generator.service.ts](src/infrastructure/external/blockchain/wallet-generator.service.ts)
-`@domain/...` 修改为 `@/domain/...`
-`@shared/...` 修改为 `@/shared/...`
### 4. ethers.js 类型错误
**已修复**: [wallet-generator.service.ts:172](src/infrastructure/external/blockchain/wallet-generator.service.ts#L172)
-`Uint8Array` 私钥转换为十六进制字符串格式
- 添加 `0x` 前缀以符合 ethers.js 要求
### 5. Kafka 事件发布接口缺失
**已修复**: [event-publisher.service.ts](src/infrastructure/kafka/event-publisher.service.ts)
- 添加了 `DomainEventMessage` 接口定义(包含 aggregateType 字段)
- 添加了 `IDENTITY_TOPICS` 常量导出
-`publish` 方法添加了重载,支持两种调用方式:
- `publish(event: DomainEvent)` - 发布领域事件
- `publish(topic: string, message: DomainEventMessage)` - 直接发布到指定主题(用于重试)
### 6. @nestjs/schedule 依赖移除
**已修复**: [event-retry.service.ts](src/infrastructure/kafka/event-retry.service.ts)
- 移除了 `@Cron` 装饰器和 `CronExpression` 导入
- 保留了重试逻辑,可通过 API 手动触发
### 7. Kafka 模块重复导出
**已修复**: [event-publisher.service.ts](src/infrastructure/kafka/event-publisher.service.ts)
- 删除了文件末尾错误的 `KafkaModule` 类定义
- 保留了 `kafka.module.ts` 中的正确定义
### 8. package.json 缺失依赖
**已修复**: [package.json](package.json)
- 添加了 `@nestjs/passport: ^10.0.0`
- 添加了 `@nestjs/schedule: ^4.0.0`
- 添加了 `passport-jwt: ^4.0.1`
- 添加了 `@types/passport-jwt: ^4.0.0`
## 接下来需要做的步骤
### 1. 安装依赖
```bash
npm install
```
### 2. 生成 Prisma Client
```bash
npm run prisma:generate
```
### 3. 运行数据库迁移(如果需要)
```bash
npm run prisma:migrate
```
### 4. 启动开发服务器
```bash
npm run start:dev
```
## 注意事项
1. **数据库迁移**: 由于修改了 Prisma Schema添加了两个新表你需要
- 如果是开发环境:运行 `npm run prisma:migrate` 创建并应用迁移
- 如果是生产环境:运行 `npm run prisma:migrate:prod` 应用迁移
2. **环境变量**: 确保 `.env` 文件中配置了所有必需的环境变量:
```env
DATABASE_URL=postgresql://...
JWT_SECRET=...
JWT_ACCESS_EXPIRES_IN=2h
JWT_REFRESH_EXPIRES_IN=30d
REDIS_HOST=localhost
REDIS_PORT=6379
KAFKA_BROKERS=localhost:9092
WALLET_ENCRYPTION_SALT=...
```
3. **定时任务**: `EventRetryService` 的定时任务功能已移除。如果需要自动重试失败事件,你可以:
- 使用外部调度器(如 cron、Kubernetes CronJob调用相应的 API
- 或者重新添加 `@Cron` 装饰器(需要在 AppModule 中导入 ScheduleModule
4. **passport-jwt**: 如果你的项目使用了 JWT 认证策略,确保 `JwtStrategy` 正确配置在 `SharedModule``AuthModule` 中。
## 文件修改清单
- ✏️ [prisma/schema.prisma](prisma/schema.prisma)
- ✏️ [src/api/dto/request/submit-kyc.dto.ts](src/api/dto/request/submit-kyc.dto.ts)
- ✏️ [src/api/dto/response/user-profile.dto.ts](src/api/dto/response/user-profile.dto.ts)
- ✏️ [src/api/dto/response/device.dto.ts](src/api/dto/response/device.dto.ts)
- ✏️ [src/infrastructure/external/blockchain/wallet-generator.service.ts](src/infrastructure/external/blockchain/wallet-generator.service.ts)
- ✏️ [src/infrastructure/kafka/event-publisher.service.ts](src/infrastructure/kafka/event-publisher.service.ts)
- ✏️ [src/infrastructure/kafka/event-retry.service.ts](src/infrastructure/kafka/event-retry.service.ts)
- ✏️ [package.json](package.json)
## 验证修复
运行以下命令验证所有错误已修复:
```bash
# 编译检查
npm run build
# 运行测试
npm run test
# 启动开发服务器
npm run start:dev
```
如果编译成功且没有错误,说明所有问题都已解决!