rwadurian/backend/services/identity-service
hailin dc16a616a5 fix(identity-service): 修复并发auto-login请求导致的唯一约束冲突
- 在创建新token前先撤销该设备的旧token
- 使用upsert替代create避免并发时refresh_token_hash唯一约束冲突

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 23:27:21 -08:00
..
.claude feat(identity): store complete deviceInfo JSON from frontend 2025-12-07 11:08:37 -08:00
database refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
docs refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
prisma feat(kyc): 实现完整三层KYC认证功能 2025-12-24 07:14:11 -08:00
scripts refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
src fix(identity-service): 修复并发auto-login请求导致的唯一约束冲突 2025-12-27 23:27:21 -08:00
test feat: 实现手机号+密码登录和账号恢复功能 2025-12-20 20:35:44 -08:00
.dockerignore refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.env.development refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.env.example docs(identity-service): 添加阿里云KYC实人认证环境变量配置说明 2025-12-24 22:45:29 -08:00
.env.production refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.env.test refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.eslintrc.js refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.gitignore refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
.prettierrc refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
Dockerfile fix: 添加 -m 参数创建用户home目录 2025-12-21 18:01:19 -08:00
Identity_Service_Context_dir_Architecture.png first commit 2025-11-23 21:21:44 -08:00
README.md refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
deploy.sh . 2025-12-07 00:40:19 -08:00
docker-compose.yml refactor: unify docker-compose configs to use shared infrastructure 2025-12-07 00:35:56 -08:00
nest-cli.json refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
package-lock.json chore(identity): add nodemailer dependency for email service 2025-12-23 21:05:26 -08:00
package.json chore(identity): add nodemailer dependency for email service 2025-12-23 21:05:26 -08:00
tsconfig.build.json refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00
tsconfig.json refactor(mpc-system): migrate to party-driven architecture with PartyID-based routing 2025-12-05 08:11:28 -08:00

README.md

Identity Service

RWA用户身份上下文微服务 - 基于DDD架构的NestJS实现

技术栈

  • 框架: NestJS + TypeScript
  • ORM: Prisma
  • 消息队列: Kafka
  • 缓存: Redis (ioredis)
  • 区块链: ethers.js + @scure/bip32 + bech32

项目结构

src/
├── api/                    # 表现层
│   ├── controllers/        # 控制器
│   └── dto/               # 请求/响应DTO
├── application/           # 应用层
│   ├── commands/          # 命令对象
│   └── services/          # 应用服务
├── domain/                # 领域层
│   ├── aggregates/        # 聚合根
│   ├── entities/          # 实体
│   ├── events/            # 领域事件
│   ├── repositories/      # 仓储接口
│   ├── services/          # 领域服务
│   └── value-objects/     # 值对象
├── infrastructure/        # 基础设施层
│   ├── persistence/       # 持久化
│   ├── redis/            # Redis服务
│   ├── kafka/            # Kafka事件发布
│   └── external/         # 外部服务
├── shared/               # 共享层
│   ├── decorators/       # 装饰器
│   ├── guards/           # 守卫
│   ├── filters/          # 过滤器
│   └── exceptions/       # 异常类
└── config/               # 配置

核心功能

  • 用户账户自动创建(首次打开APP)
  • 多设备管理与授权(最多5个设备)
  • 三链钱包地址生成(KAVA/DST/BSC)
  • 助记词生成与加密存储
  • 序列号+助记词恢复账户
  • 序列号+手机号恢复账户
  • KYC实名认证
  • 推荐码生成与验证
  • Token自动刷新机制

快速开始

1. 安装依赖

npm install

2. 配置环境变量

cp .env.example .env
# 编辑 .env 文件配置数据库等信息

3. 初始化数据库

npm run prisma:generate
npm run prisma:migrate

4. 启动服务

# 开发模式
npm run start:dev

# 生产模式
npm run build
npm run start:prod

5. Docker部署

docker-compose up -d

API文档

启动服务后访问: http://localhost:3000/api/docs

主要API

方法 路径 说明
POST /user/auto-create 自动创建账户
POST /user/recover-by-mnemonic 助记词恢复
POST /user/recover-by-phone 手机号恢复
POST /user/auto-login 自动登录
GET /user/my-profile 我的资料
GET /user/my-devices 我的设备
POST /user/bind-phone 绑定手机号
POST /user/submit-kyc 提交KYC

领域不变式

  1. 手机号在系统内唯一(可为空)
  2. 账户序列号全局唯一且递增
  3. 每个账户最多5个设备同时登录
  4. KYC认证通过后身份信息不可修改
  5. 每个区块链地址只能绑定一个账户
  6. 推荐人序列号一旦设置终生不可修改
  7. 助记词必须加密存储,只在创建时返回一次
  8. 三条链的钱包地址必须从同一个助记词派生

License

Proprietary