124 lines
4.5 KiB
Markdown
124 lines
4.5 KiB
Markdown
# 修复总结
|
||
|
||
## 已修复的错误 (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
|
||
```
|
||
|
||
如果编译成功且没有错误,说明所有问题都已解决!
|