4.3 KiB
4.3 KiB
Identity Service
RWA平台用户身份管理微服务 - 基于NestJS + Prisma + Clean Architecture
技术栈
- 框架: NestJS 10
- ORM: Prisma 5
- 数据库: PostgreSQL 15
- 缓存: Redis 7 (ioredis)
- 消息队列: Kafka
- 区块链: ethers.js 6
- 架构: Clean Architecture / Hexagonal Architecture / DDD / CQRS
功能特性
- ✅ 自动创建账户(首次打开APP)
- ✅ 多设备支持(最多5个设备同时登录)
- ✅ 助记词生成与恢复
- ✅ 手机号绑定与恢复
- ✅ 三链钱包地址派生(KAVA/DST/BSC)
- ✅ JWT Token认证
- ✅ Token自动刷新(账户永不过期)
- ✅ Kafka事件发布
- ✅ 死信队列与自动重试
目录结构
src/
├── api/ # 表现层
│ ├── controllers/ # HTTP控制器
│ └── dto/ # 数据传输对象
├── application/ # 应用层
│ ├── commands/ # 命令处理器
│ ├── queries/ # 查询处理器
│ └── services/ # 应用服务
├── domain/ # 领域层
│ ├── aggregates/ # 聚合根
│ ├── entities/ # 实体
│ ├── value-objects/ # 值对象
│ ├── events/ # 领域事件
│ ├── repositories/ # 仓储接口
│ └── services/ # 领域服务
├── infrastructure/ # 基础设施层
│ ├── persistence/ # 数据持久化
│ ├── redis/ # Redis缓存
│ ├── kafka/ # Kafka消息
│ └── external/ # 外部服务
└── shared/ # 共享层
├── decorators/ # 装饰器
├── guards/ # 守卫
├── filters/ # 过滤器
└── exceptions/ # 异常
快速开始
1. 安装依赖
npm install
2. 配置环境变量
cp .env.example .env
# 编辑.env文件配置数据库连接等
3. 数据库迁移
# 生成Prisma客户端
npm run prisma:generate
# 运行迁移
npm run prisma:migrate
4. 启动服务
# 开发模式
npm run start:dev
# 生产模式
npm run build
npm run start:prod
Docker部署
启动所有服务
docker-compose up -d
仅启动依赖服务
docker-compose up -d postgres redis kafka zookeeper
API文档
启动服务后访问: http://localhost:3000/api/docs
主要API接口
| 方法 | 路径 | 描述 | 认证 |
|---|---|---|---|
| POST | /api/v1/user/auto-create | 自动创建账户 | 否 |
| POST | /api/v1/user/recover-by-mnemonic | 助记词恢复 | 否 |
| POST | /api/v1/user/recover-by-phone | 手机号恢复 | 否 |
| POST | /api/v1/user/refresh-token | 刷新Token | 否 |
| POST | /api/v1/user/send-sms-code | 发送验证码 | 否 |
| POST | /api/v1/user/bind-phone | 绑定手机号 | 是 |
| GET | /api/v1/user/my-profile | 我的资料 | 是 |
| GET | /api/v1/user/my-devices | 我的设备 | 是 |
| DELETE | /api/v1/user/remove-device | 移除设备 | 是 |
| POST | /api/v1/user/logout | 退出登录 | 是 |
Kafka Topics
| Topic | 描述 |
|---|---|
| identity.user-account.created | 用户账户创建 |
| identity.device.added | 设备添加 |
| identity.device.removed | 设备移除 |
| identity.phone.bound | 手机号绑定 |
| identity.kyc.submitted | KYC提交 |
| identity.kyc.approved | KYC通过 |
| identity.kyc.rejected | KYC拒绝 |
| identity.account.frozen | 账户冻结 |
| identity.wallet.bound | 钱包绑定 |
测试
# 单元测试
npm run test
# E2E测试
npm run test:e2e
# 测试覆盖率
npm run test:cov
开发命令
# 格式化代码
npm run format
# Lint检查
npm run lint
# 打开Prisma Studio
npm run prisma:studio
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
| PORT | 服务端口 | 3000 |
| DATABASE_URL | 数据库连接 | - |
| REDIS_HOST | Redis主机 | localhost |
| REDIS_PORT | Redis端口 | 6379 |
| JWT_SECRET | JWT密钥 | - |
| JWT_ACCESS_EXPIRATION | AccessToken有效期 | 2h |
| JWT_REFRESH_EXPIRATION | RefreshToken有效期 | 30d |
| KAFKA_BROKERS | Kafka地址 | localhost:9092 |
License
MIT