# 剩余步骤说明

所有源代码错误已修复！现在需要执行以下步骤来解决 Prisma Client 和依赖包的问题。

## 🔧 需要执行的命令（按顺序）

### 1. 安装新增的依赖包
```bash
npm install
```

这将安装以下新增的包：
- `@nestjs/passport@^10.0.0`
- `@nestjs/schedule@^4.0.0`
- `passport-jwt@^4.0.1`
- `@types/passport-jwt@^4.0.0`

### 2. 生成 Prisma Client
```bash
npm run prisma:generate
```

这将根据更新后的 `schema.prisma` 生成新的 Prisma Client，包括：
- `DeadLetterEvent` 模型
- `SmsCode` 模型

### 3. 创建并应用数据库迁移
```bash
npm run prisma:migrate
```

这将创建并应用新表的数据库迁移。如果提示输入迁移名称，可以使用：
```
add_dead_letter_and_sms_tables
```

### 4. 启动开发服务器
```bash
npm run start:dev
```

## ✅ 已修复的所有错误（共 21 个）

### 代码层面的修复：

1. ✅ **DomainException → DomainError** (3 处)
   - [wallet-generator.service.ts:131](src/infrastructure/external/blockchain/wallet-generator.service.ts#L131)
   - [wallet-generator.service.ts:153](src/infrastructure/external/blockchain/wallet-generator.service.ts#L153)
   - [wallet-generator.service.ts:169](src/infrastructure/external/blockchain/wallet-generator.service.ts#L169)

2. ✅ **UserId 类型问题** (2 处)
   - 修改为使用 `UserId.create(params.userId)` 并使用 `WalletAddress.createFromMnemonic()`
   - [wallet-generator.service.ts:54-65](src/infrastructure/external/blockchain/wallet-generator.service.ts#L54-L65)
   - [wallet-generator.service.ts:84-95](src/infrastructure/external/blockchain/wallet-generator.service.ts#L84-L95)

3. ✅ **Seed Buffer 类型问题** (2 处)
   - 添加 `Buffer.from()` 转换
   - [wallet-generator.service.ts:102](src/infrastructure/external/blockchain/wallet-generator.service.ts#L102)

4. ✅ **IDENTITY_TOPICS 缺失主题** (2 处)
   - 添加 `KYC_APPROVED` 和 `ACCOUNT_FROZEN`
   - [event-publisher.service.ts:28-31](src/infrastructure/kafka/event-publisher.service.ts#L28-L31)

5. ✅ **DomainEventMessage 缺失字段** (2 处)
   - 添加 `eventId` 和 `occurredAt` 字段
   - [event-retry.service.ts:40-47](src/infrastructure/kafka/event-retry.service.ts#L40-L47)
   - [event-retry.service.ts:77-84](src/infrastructure/kafka/event-retry.service.ts#L77-L84)

### 需要命令解决的问题：

6. ⏳ **Prisma Client 未生成** (10 处)
   - 需要运行 `npm run prisma:generate`
   - 涉及所有 `prisma.deadLetterEvent` 和 `prisma.smsCode` 的调用

7. ⏳ **依赖包未安装** (2 处)
   - 需要运行 `npm install`
   - `@nestjs/passport` 和 `passport-jwt`

## 📝 修改的文件列表

- ✏️ [prisma/schema.prisma](prisma/schema.prisma) - 添加 DeadLetterEvent 和 SmsCode 模型
- ✏️ [package.json](package.json) - 添加依赖包
- ✏️ [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) - 修复 DomainEventMessage 参数

## 🎯 验证步骤

完成上述命令后，验证所有问题已解决：

```bash
# 1. 检查编译
npm run build

# 2. 运行测试
npm test

# 3. 启动开发服务器
npm run start:dev
```

如果一切正常，你应该看到类似以下的输出：
```
[Nest] 12345  - 2025/11/24, 9:43:00 AM     LOG [NestFactory] Starting Nest application...
[Nest] 12345  - 2025/11/24, 9:43:00 AM     LOG [InstanceLoader] AppModule dependencies initialized
...
[Nest] 12345  - 2025/11/24, 9:43:01 AM     LOG [NestApplication] Nest application successfully started
```

## 🔍 如果遇到问题

### Prisma 迁移失败
如果数据库迁移失败，可以尝试：
```bash
# 重置数据库（开发环境）
npm run prisma:migrate reset

# 或手动创建迁移
npx prisma migrate dev --create-only
# 然后编辑迁移文件
# 最后应用迁移
npx prisma migrate dev
```

### 依赖安装失败
如果 npm install 失败，尝试：
```bash
# 清理缓存
npm cache clean --force

# 删除 node_modules 和 lock 文件
rm -rf node_modules package-lock.json

# 重新安装
npm install
```

## 📚 相关文档

- [Prisma 迁移文档](https://www.prisma.io/docs/concepts/components/prisma-migrate)
- [Passport JWT 文档](http://www.passportjs.org/packages/passport-jwt/)
- [NestJS Passport 文档](https://docs.nestjs.com/security/authentication)
- [NestJS 定时任务文档](https://docs.nestjs.com/techniques/task-scheduling)
