Commit Graph

4 Commits

Author SHA1 Message Date
hailin ee94f1420d fix(snapshot): 前端 API 改走 Next.js rewrites 代理 + WebSocket 改 REST 轮询
- snapshot.api.ts: 从直连 localhost:port 改为 /api/snapshots/* 走 Next.js 代理
- next.config: 两个前端都添加 /api/snapshots/:path* → snapshot-service 代理规则
- docker-compose.2.0-snapshot.yml: overlay 中追加 mining-admin-web 的 SNAPSHOT_SERVICE_URL
- useSnapshotWebSocket → useSnapshotPolling: 2秒轮询 GET /snapshots/:id 获取进度
- 移除 socket.io-client 依赖(Next.js standalone 不支持 WebSocket proxy)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-24 00:37:41 -08:00
hailin cf07eb03be feat(snapshot): 数据快照备份服务全量实现(纯新增,零侵入)
一套代码两处部署的在线备份编排服务,为 1.0 认种分配系统和 2.0 算力挖矿系统
分别提供 PostgreSQL / Redis / Kafka / ZooKeeper / MinIO / Uploads 的在线备份能力。
管理员在 admin-web / mining-admin-web 中选择备份目标和存储方式,点击备份后系统
串行执行各组件备份,通过 Socket.IO WebSocket 实时推送进度到前端。

## 后端 snapshot-service(NestJS 10 + Prisma 5 + SQLite)

架构: DDD 四层(api / application / domain / infrastructure)

- api 层:
  · SnapshotController — REST API(创建/查询/删除/下载)含 Range/206 断点续传
  · SnapshotGateway — Socket.IO WebSocket 实时推送 5 类事件
  · HealthController — 健康检查
  · CreateSnapshotDto — class-validator 验证
  · toSnapshotResponse — BigInt→string 序列化

- application 层:
  · SnapshotOrchestratorService — 核心编排引擎
    - startSnapshot() 异步启动,不阻塞 HTTP
    - 按 PG→Redis→Kafka→ZK→MinIO→Uploads 顺序串行执行
    - 单目标失败不中断整体任务
    - MinIO 模式: 备份完上传到 MinIO 后删除本地临时文件
    - LOCAL 模式: 保留在服务器临时目录供下载
    - @Cron(EVERY_HOUR) 自动清理过期本地备份(默认 72h)
    - runningTaskId 防止并发执行

- domain 层:
  · BackupTarget 枚举(6 种目标)+ BACKUP_TARGET_ORDER 执行顺序
  · SnapshotStatus 枚举(PENDING/RUNNING/COMPLETED/FAILED)
  · StorageType 枚举(MINIO/LOCAL)
  · BackupHandler 接口 + BACKUP_HANDLER_TOKEN

- infrastructure 层:
  · 6 个备份 Handler(均实现 BackupHandler 接口):
    - PostgresBackupHandler: pg_basebackup 通过网络流式备份,解析 stderr 进度
    - RedisBackupHandler: BGSAVE + LASTSAVE 轮询 + 打包 dump.rdb/AOF
    - KafkaBackupHandler: archiver 打包数据卷,按字节计算进度
    - ZookeeperBackupHandler: archiver 打包 data/ + log/
    - MinioBackupHandler: SDK 列举并下载所有桶(排除备份桶)后打包
    - UploadsBackupHandler: archiver 打包上传文件目录
  · 2 个存储适配器:
    - MinioStorageAdapter: fPutObject 上传 / removeObjects 批量删除
    - LocalStorageAdapter: 本地临时目录管理 + 过期清理
  · PrismaService (SQLite) + SnapshotRepository (完整 CRUD)
  · BACKUP_HANDLER_TOKEN 工厂: 根据 AVAILABLE_TARGETS 环境变量过滤可用 handler

- Prisma Schema (SQLite):
  · SnapshotTask: 主表,targets 存 JSON 字符串,totalSize 用 BigInt
  · SnapshotDetail: 明细表,每个目标一行,@@index([taskId])
  · onDelete: Cascade 级联删除

- Dockerfile: 多阶段构建,生产镜像安装 postgresql-client + mc (MinIO CLI)
  SQLite 使用 prisma db push 而非 migrate deploy

- 部署端口: 1.0 系统 = 3099,2.0 系统 = 3199

## Docker Compose overlay(纯新增,不修改现有 docker-compose)

- docker-compose.snapshot.yml (1.0):
  · 挂载 redis_data/kafka_data/zookeeper_data/zookeeper_log/admin_uploads_data 只读卷
  · AVAILABLE_TARGETS=POSTGRES,REDIS,KAFKA,ZOOKEEPER,MINIO,UPLOADS
  · 依赖 postgres + redis 健康检查

- docker-compose.2.0-snapshot.yml (2.0 standalone):
  · 挂载 redis_2_data/mining-admin-uploads/trading-uploads 只读卷
  · AVAILABLE_TARGETS=POSTGRES,REDIS,UPLOADS
  · 依赖 postgres-2 + redis-2 健康检查

## 前端 admin-web(Next.js 15 + SCSS)

- 新增 /snapshots 页面: 创建备份表单 + 实时进度条 + 历史列表 + 下载/删除
- 新增 useSnapshotWebSocket hook: Socket.IO 连接 + 5 类事件监听
- 新增 snapshot.api.ts: 独立 fetch(不走通用 apiClient,snapshot 服务独立端口)
- 新增 snapshot.types.ts: 共享类型定义
- 新增 page.module.scss: 表单/进度条/表格样式
- 修改 Sidebar.tsx: 添加「数据快照」菜单项
- package.json: 添加 socket.io-client 依赖

## 前端 mining-admin-web(Next.js 14 + Tailwind CSS)

- 新增 /snapshots 页面: 同 admin-web 功能,Tailwind CSS 风格
- 新增 useSnapshotWebSocket hook
- 新增 snapshot.api.ts + snapshot.types.ts
- 修改 sidebar.tsx: 添加「数据快照」菜单项 + HardDrive 图标
- package.json: 添加 socket.io-client 依赖

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 21:53:09 -08:00
hailin 58feec255d feat(market-maker): 实现做市商区块链充提功能
- 扩展 mining-blockchain-service 支持 eUSDT/fUSDT 转账
- 添加 trading-service 区块链提现 API(自动回滚失败交易)
- 前端支持中心化和区块链充提两种模式(Tab切换)
- 区块链充值显示钱包地址和二维码
- 区块链提现支持输入目标地址直接转账

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 17:56:15 -08:00
hailin a17f408653 feat(mining-ecosystem): 添加挖矿生态系统完整微服务与前端
## 概述
为榴莲生态2.0添加完整的挖矿系统,包含3个后端微服务、1个管理后台和1个用户端App。

---

## 后端微服务

### 1. mining-service (挖矿服务) - Port 3021
**核心功能:**
- 积分股每日分配(基于算力快照)
- 每分钟定时销毁(进入黑洞)
- 价格计算:价格 = 积分股池 ÷ (100.02亿 - 黑洞 - 流通池)
- 全局状态管理(黑洞量、流通池、价格)

**关键文件:**
- src/application/services/mining-distribution.service.ts - 挖矿分配核心逻辑
- src/application/schedulers/mining.scheduler.ts - 定时任务调度
- src/domain/services/mining-calculator.service.ts - 分配计算
- src/infrastructure/persistence/repositories/black-hole.repository.ts - 黑洞管理

### 2. trading-service (交易服务) - Port 3022
**核心功能:**
- 积分股买卖撮合
- K线数据生成
- 手续费处理(10%买入/卖出)
- 流通池管理
- 卖出倍数计算:倍数 = (100亿 - 销毁量) ÷ (200万 - 流通池量)

**关键文件:**
- src/domain/services/matching-engine.service.ts - 撮合引擎
- src/application/services/order.service.ts - 订单处理
- src/application/services/transfer.service.ts - 划转服务
- src/domain/aggregates/order.aggregate.ts - 订单聚合根

### 3. mining-admin-service (挖矿管理服务) - Port 3023
**核心功能:**
- 系统配置管理(分配参数、手续费率等)
- 老用户数据初始化
- 系统监控仪表盘
- 审计日志

**关键文件:**
- src/application/services/config.service.ts - 配置管理
- src/application/services/initialization.service.ts - 数据初始化
- src/application/services/dashboard.service.ts - 仪表盘数据

---

## 前端应用

### 1. mining-admin-web (管理后台) - Next.js 14
**技术栈:**
- Next.js 14 + React 18
- TailwindCSS + Radix UI
- React Query + Zustand
- ECharts 图表

**功能模块:**
- 登录认证
- 仪表盘(实时数据、价格走势)
- 用户查询(算力详情、挖矿记录、交易订单)
- 系统配置管理
- 数据初始化任务
- 审计日志查看

### 2. mining-app (用户端App) - Flutter 3.x
**技术栈:**
- Flutter 3.x + Dart
- Riverpod 状态管理
- GoRouter 路由
- Clean Architecture (3层)

**功能模块:**
- 首页资产总览
- 实时收益显示(每秒更新)
- 贡献值展示(个人/团队)
- 积分股买卖交易
- K线图与价格显示
- 个人中心

---

## 架构文档
- docs/mining-ecosystem-architecture.md - 系统架构总览
  - 服务职责与端口分配
  - 数据流向图
  - Kafka Topics 定义
  - 跨服务关联(account_sequence)
  - 配置参数说明
  - 开发顺序建议

---

## .gitignore 更新
- 添加 Flutter/Dart 构建文件忽略
- 添加 iOS/Android 构建产物忽略
- 添加 Next.js 构建目录忽略
- 添加 TypeScript 缓存文件忽略

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 17:45:46 -08:00