12 Commits
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
c1681085b8 |
feat(admin): App 版本管理 — 多应用支持 + 管理后台页面
为 admin-service 添加 appType 维度,支持管理 genex-mobile (用户端)
和 admin-app (发行方管理端) 两个 Flutter 应用的版本发布。
同时在 admin-web 新增完整的版本管理页面。
### 后端改动 (admin-service)
数据模型:
- 新增 AppType 枚举: GENEX_MOBILE | ADMIN_APP
- app_versions 表添加 app_type 列 (VARCHAR(20), 默认 GENEX_MOBILE)
- 重建唯一索引: (app_type, platform, version_code)
- Migration 046: ALTER TABLE + 索引重建
DDD 各层更新:
- Repository 接口/实现: 所有查询方法增加 appType 参数
- Service: checkUpdate/listVersions/createVersion 支持按 appType 过滤
重复检测范围: 同一 appType + platform 内的 versionCode 唯一
- AdminVersionController:
- GET /admin/versions 增加 ?appType= 查询参数
- POST /admin/versions body 增加 appType 字段
- POST /admin/versions/upload body 增加 appType 字段
- AppVersionController (移动端):
- GET /app/version/check 增加 ?app_type= 参数 (默认 GENEX_MOBILE)
### 前端改动 (admin-web)
新增页面 /app-versions:
- App 选择器 Tab: Genex 用户端 / 发行方管理端
- 平台过滤器: 全部 / Android / iOS
- 版本列表表格: 版本号、代码、平台、构建号、文件大小、强制更新、状态、发布日期
- 操作列: 编辑 / 启用|禁用 / 删除
- 上传对话框: 文件选择 → 自动解析包信息 → 填写表单 → 上传到 MinIO
- 编辑对话框: 更新日志、最低系统版本、强制更新、启用状态
- i18n: zh-CN / en-US / ja-JP 各 28 个新翻译键
- 侧边栏: 在「系统管理」前增加「📱 应用版本」菜单项
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
|
|
8a12bc225d |
fix(seed): 修复 address_mappings 种子数据匹配实际 schema
- address_mappings: 添加 internal_address + chain_type, 移除不存在的 signature 列 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
|
|
|
4651edae35 |
fix(seed): 更新 disputes + audit_logs 种子数据匹配新 schema
- disputes: buyer_id/seller_id → plaintiff_id/defendant_id, 移除已删除列 - audit_logs: actor_id/actor_role/resource_type → admin_id/admin_name/resource - 枚举值对齐: buyer_complaint → buyer_claim, evidence_collection → processing Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
|
|
|
686bf6c395 |
fix(schema): 统一 disputes + audit_logs 迁移与实体定义
- 新增 045_align_disputes_audit_logs.sql: ALTER迁移对齐021/022旧schema到实体期望schema - disputes: buyer_id→plaintiff_id, seller_id→defendant_id, 添加amount+version列 - audit_logs: actor_id→admin_id, resource_type→resource, 添加admin_name+result+updated_at+version列 - 将028/029改为no-op (已被045取代) - Dispute entity: enum类型改为varchar (匹配CHECK约束而非PostgreSQL原生enum) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
|
|
|
7fc3123b5a |
fix(auth): 补全部署前置条件 — version列迁移 + docker-compose优化
- 新增 044_add_users_version_column.sql 迁移 (TypeORM @VersionColumn 需要) - auth-service 移除 Kafka 硬依赖 (EventPublisher 已有 graceful no-op) - docker-compose 添加 SMS_ENABLED/SMS_CODE_EXPIRE_SECONDS/SMS_DAILY_LIMIT 环境变量 - 新增 auth-service/.env.example 文档化所有必需环境变量 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
|
|
|
e89ec82406 |
feat(auth): 完整实现 SMS 手机注册/登录/验证系统
参考 rwadurian 项目的成熟实现,在 Genex auth-service 上全面增强短信验证体系。
## 新增功能
### Domain 层
- Phone Value Object: E.164 标准化、中国大陆格式自动补+86、掩码显示(138****8000)
- SmsCode Value Object: crypto 安全随机6位生成、格式验证
- SmsVerification Entity: 验证码记录持久化,支持4种类型(REGISTER/LOGIN/RESET_PASSWORD/CHANGE_PHONE)
- SmsLog Entity: SMS发送日志审计追踪(provider/status/error)
- User Entity 增强: loginFailCount + lockedUntil 字段,指数退避锁定策略(1→2→4→8...→1440分钟)
- 5个新 Domain Events: SmsCodeSent, SmsCodeVerified, AccountLocked, PhoneChanged, PasswordReset
### Infrastructure 层
- 3个 SQL 迁移: users表锁定字段(041), sms_verifications表(042), sms_logs表(043)
- SmsVerification/SmsLog TypeORM Repository 实现
- SMS Provider 抽象层: ISmsProvider 接口 + ConsoleSmsProvider(开发) + AliyunSmsProvider(生产)
- Redis SmsCodeService 增强: 类型前缀 auth:sms:{type}:{phone},保留向后兼容
### Application 层
- 独立 SmsService: 发送验证码(日限额10条+业务规则校验) + 验证验证码(尝试限制5次)
- AuthService 重构: 注册需SMS验证、密码登录带锁定检查、+resetPassword/changePhone
### Interface 层
- 新端点: POST /auth/sms/send, POST /auth/reset-password, POST /auth/change-phone
- DTO 更新: RegisterDto 增加 smsCode 必填, SendSmsCodeDto 增加 type 枚举
- 全部端点 Swagger 文档
### 配置
- .env.example: SMS_ENABLED, ALIYUN_SMS_*, SMS_DAILY_LIMIT, LOGIN_MAX_FAIL_ATTEMPTS
- auth.module: SMS_PROVIDER 按 SMS_ENABLED 环境变量自动切换
## API 端点一览
- POST /api/v1/auth/sms/send — 发送验证码(4种类型)
- POST /api/v1/auth/register — 手机注册(phone+smsCode+password)
- POST /api/v1/auth/login — 密码登录(带锁定检查)
- POST /api/v1/auth/login-phone — 短信验证码登录
- POST /api/v1/auth/reset-password — 重置密码
- POST /api/v1/auth/change-phone — 换绑手机(需登录)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
|
|
3a57b0fd4d |
feat: 全平台API对齐 — 4个前端应用55+页面接入真实后端API
跨越 genex-mobile、admin-app、admin-web、miniapp 四个前端应用,
将所有页面从 mock 硬编码数据替换为真实后端 API 调用,
同时补建后端缺失的 27+ 个端点,实现前后端完整联通。
## 后端新增 (4个微服务, 27+端点)
### issuer-service — 5个新Controller, 19个新文件
- IssuerStatsController: GET /issuers/me/stats, /credit (发行商仪表盘统计+信用)
- IssuerFinanceController: GET/POST balance/stats/transactions/withdraw/reconciliation
- IssuerStoreController: CRUD /issuers/me/stores + /employees (门店+员工管理)
- RedemptionController: POST scan/manual/batch, GET history/today-stats (核销)
- CouponBatchController: POST issue/recall/price-adjust, GET operations (批量操作)
- CouponController扩展: GET /search, /:id/nearby-stores, /:id/similar
- 新实体: Employee, Redemption; Store 增加 level/parentId
- 新迁移: 032_create_stores_employees_redemptions.sql
### trading-service (Go)
- GET /api/v1/trades/my/orders — 用户订单列表(分页+状态筛选)
- POST /api/v1/trades/coupons/:id/transfer — 券转赠
### user-service
- GET/PUT /api/v1/users/me/settings — 用户偏好设置(语言/货币/通知)
### auth-service
- POST /api/v1/auth/send-sms-code — 发送短信验证码(Redis存储, 5分钟TTL)
- POST /api/v1/auth/login-phone — 手机号+验证码登录(自动注册)
### Kong 路由
- 新增5条路由: issuers/me, redemptions, coupons/batch, trades/my, trades/coupons
## genex-mobile (Flutter, 2页)
- HomePage: 接入 CouponApiService.getFeaturedCoupons() + getHoldingsSummary()
- WalletCouponsPage: 接入持仓列表API, 支持Tab状态筛选
- 修复 NotificationService/PushService 7+2个路径缺少 /api/v1/ 前缀
- 新增 CouponApiService, CouponModel, HoldingsSummaryModel
## admin-app (Flutter发行商控制台, 11页 + router + i18n)
- 修复 NotificationService 7个路径 + PushService 2个路径前缀
- 新增9个Service: auth, issuer, coupon, finance, credit, store, redemption, analytics, ai_chat
- 11页全部从 StatelessWidget→StatefulWidget, mock→API:
IssuerLoginPage(SMS登录), Dashboard(统计), CouponList(分页+筛选),
CreateCoupon(提交审核), CouponDetail(详情), Redemption(扫码/手动/批量核销),
Finance(余额/流水/对账), Credit(评分), StoreManagement(门店+员工),
AiAgent(真实AI对话), Settings(资料+登出)
- 所有页面添加 loading/error/pull-to-refresh 状态
## admin-web (Next.js 15管理后台, 24页)
- 新建API基础设施: api-client.ts(axios), auth-context.tsx, use-api.ts(react-query)
- providers.tsx 接入 QueryClientProvider + AuthProvider
- 24页全部替换 useState(mockArray) 为 useApi<T>('/api/v1/admin/...'):
Dashboard, Users, Issuers, Coupons, Trading, Risk, Finance, System,
Compliance(SAR/SEC/License/SOX/Tax/IPO), Analytics(User/Coupon/MM/Consumer),
Disputes, Chain, Reports, Merchant, Agent, Insurance
- 所有页面添加 TypeScript 接口, loading/error 状态, 'use client' 指令
- 状态比较改用原始API字符串(非t()翻译值)
## miniapp (Taro/React小程序, 20页)
- 新建API基础设施: config/index.ts, utils/request.ts(Taro.request封装), store/auth.ts
- 新增8个Service: auth, coupon, my-coupon, user, trading, wallet, notification, ai
- 20页全部替换硬编码数据为Service调用:
Home, Search, Detail, Purchase, PaymentSuccess,
MyCoupons, MyCouponDetail, Redeem, Transfer,
Profile, Orders, Messages, Wallet, Settings, KYC, AIChat,
Login, H5Share, H5Activity, H5Register
- 统一 useState+useEffect 数据获取模式, 错误处理, 加载状态
## 统计
- 新建文件: ~51个 (后端26 + 前端25)
- 修改文件: ~93个 (后端24 + 前端69)
- 新增后端端点: 27+
- 前端页面接入API: 55+ (genex-mobile 2 + admin-app 11 + admin-web 24 + miniapp 20)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
|
|
127f2cdd81 |
feat: Debezium CDC 安全加固 + WAL 防护 (来自 rwadurian 生产事故经验)
## 背景 rwadurian 2.0 服务器发生 Debezium CDC 事故: - DBZ-7316 bug: Debezium ≤2.4 的 searchWalPosition 循环不推进 confirmed_flush_lsn - PostgreSQL WAL 从正常涨到 306GB, 磁盘占用 23% → 修复后降至 6% - Kafka Connect REST API 暴露公网, 被注入 3 个恶意 SSRF connector - pg_logical_emit_message 心跳无效: 写入 WAL 但不经过 publication ## 变更内容 ### 1. Debezium 版本锁定 (docker-compose.yml) - debezium/connect:2.5 → debezium/connect:2.5.4.Final - 2.5.1 修复 DBZ-7316, 2.5.4 为该系列最终稳定版 ### 2. PostgreSQL WAL 安全阀 (docker-compose.yml) - 新增 max_slot_wal_keep_size=10GB - 限制单个 replication slot 最多保留 10GB WAL - 超限后 PostgreSQL 使 slot 失效, 防止磁盘被吃满 ### 3. 端口安全加固 (docker-compose.yml) 绑定 127.0.0.1, 禁止公网访问: - PostgreSQL 5432 (数据库直连) - Redis 6379 (无密码保护) - Kafka Connect 8083 (SSRF 注入风险) - Kafka 29092 (外部访问端口) - Kong Admin 8001 (路由篡改风险) - MinIO Console 9001 (默认密码) ### 4. 基础设施可用性 (docker-compose.yml) - 所有基础设施服务添加 restart: unless-stopped - Kafka Connect 添加 OFFSET_FLUSH_INTERVAL_MS=10s (默认 60s) ### 5. Debezium 支持表 (040_create_debezium_support.sql) - debezium_heartbeat: 心跳表, singleton 约束, INSERT...ON CONFLICT DO UPDATE - debezium_signal: 信号表, 用于增量快照等运维操作 - debezium_outbox_publication: 包含 outbox + heartbeat + signal 三表 ### 6. Connector 配置 (scripts/debezium/outbox-connector.json) - heartbeat TABLE 方式 (非 pg_logical_emit_message) - publication.autocreate.mode=disabled (使用预建 publication) - signal.enabled.channels=source,kafka (支持增量快照重放) - ExtractNewRecordState + RegexRouter transforms ### 7. 部署脚本 (scripts/debezium/register-connectors.sh) - 等待 Kafka Connect 就绪 - 支持创建和更新 connector - 验证 connector 状态 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
|
|
|
8adead23b6 |
feat: 设备推送系统 — FCM/APNs/HMS/小米/OPPO/vivo 多通道推送 + PROMOTION广告类型
新增设备推送通道架构,支持6大推送平台的多通道路由: 【SQL迁移】 - 039_create_device_tokens.sql: device_tokens表 (userId, platform, channel, token, deviceId等) - announcements表新增 PROMOTION 类型约束 【Domain层 — 实体/接口/端口】 - DeviceToken实体: DevicePlatform枚举(ANDROID/IOS) + PushChannel枚举(FCM/APNS/HMS/XIAOMI/OPPO/VIVO) - IDeviceTokenRepository: 6个仓储方法 (findActive/upsert/deactivate/countByChannel) - IPushChannelProvider端口: PushPayload/PushResult类型 + 6个DI Symbol - AnnouncementType枚举: 新增 PROMOTION (广告/促销推送) 【Infrastructure层 — 持久化/推送通道】 - DeviceTokenRepositoryImpl: TypeORM实现,支持批量IN查询(每批500)、token upsert - 6个推送通道Provider (mock骨架,结构完整可直接替换为真实SDK): · FcmPushProvider — Google FCM (firebase-admin) · ApnsPushProvider — Apple APNs (HTTP/2直连,中国区必需) · HmsPushProvider — 华为HMS Push Kit · XiaomiPushProvider — 小米Mi Push · OppoPushProvider — OPPO Push · VivoPushProvider — vivo Push - PushNotificationProvider重构: 从mock改为委托PushDispatcherService 【Application层 — 服务】 - PushDispatcherService: 核心调度器 · sendToUser/sendToUsers → 查device tokens → 按channel分组 → 路由到对应provider · 自动清理无效token (shouldDeactivateToken) - DeviceTokenService: 设备token注册/注销/查询 - AnnouncementService: 公告创建后自动触发设备推送 · BY_TAG → 解析tag对应userIds → pushDispatcher.sendToUsers · SPECIFIC → 直接推送指定userIds 【Interface层 — DTO/Controller】 - RegisterDeviceTokenDto/UnregisterDeviceTokenDto: Swagger + class-validator - DeviceTokenController: POST/DELETE/GET /device-tokens (JWT认证) 【Module注册】 - notification.module.ts: 新增DeviceToken实体、DEVICE_TOKEN_REPOSITORY、 6个push channel provider DI绑定、PushDispatcherService、DeviceTokenService、 DeviceTokenController 推送链路: 公告创建 → triggerPush → PushDispatcher → 查token → 按channel分组 → FCM/APNs/HMS/小米/OPPO/vivo Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
|
|
|
acaec56849 |
feat: 全12服务DDD重构 + 公告定向推送系统 (移植自rwadurian)
## 一、DDD + Clean Architecture 重构 (全12服务) 对全部12个微服务(9 NestJS + 3 Go)实施严格的DDD分层: ### NestJS 服务 (9个): - auth-service: JWT策略已在domain层 - user-service: 新增 5 个 repository interface + implementation, 5 个 value objects (Email/Phone/KycLevel/Money), 3 组 domain events - issuer-service: 新增 5 个 repository interface + implementation, 3 个 value objects, 2 组 domain events, external AI client port - clearing-service: 新增 5 个 repository interface + implementation, 2 个 value objects, domain events - compliance-service: 新增 7 个 repository interface + implementation, 2 个 value objects, domain events, audit logger service - ai-service: 新增 conversation repository + TypeORM entity, AI agent client port 移至 domain/ports/ - notification-service: 新增 notification repository interface + implementation, channel providers, value objects - telemetry-service: 新增 3 个 repository interface + implementation - admin-service: 新增 app-version repository interface + implementation ### Go 服务 (3个): - trading-service: 重构为 domain/application/infrastructure 分层, 新增 repository interface + postgres 实现, matching engine 移入 application/service, 新增 value objects (Price/Quantity/OrderSide/OrderType), Kafka event publisher - translate-service: 新增 repository interface + postgres 实现, value objects (Address/ChainType) - chain-indexer: 新增 repository interface + postgres 实现, value objects (BlockHeight/TxHash), Kafka event publisher ### 关键模式: - NestJS: Symbol token DI (provide: Symbol → useClass: Impl) - Go: compile-time interface check (var _ Interface = (*Impl)(nil)) - TypeORM entity 保留 domain methods (pragmatic DDD) - Repository interface 在 domain/, 实现在 infrastructure/persistence/ ## 二、公告定向推送系统 (ported from rwadurian) 在 notification-service 中新增 Announcement 公告体系, 支持管理端向全体/标签/指定用户推送消息: ### 数据库: - 038_create_announcements.sql: 5张新表 - announcements (公告主表) - announcement_tag_targets (标签定向) - announcement_user_targets (用户定向) - announcement_reads (已读记录) - user_tags (用户标签) ### 三种定向模式: - ALL: 推送给全体用户 - BY_TAG: 按标签筛选用户 (用户标签与公告标签有交集) - SPECIFIC: 指定用户ID列表 ### 新增文件 (15个): - 5 个 TypeORM entity (Announcement + Read + TagTarget + UserTarget + UserTag) - 2 个 repository interface (IAnnouncementRepository 11方法, IUserTagRepository 6方法) - 2 个 repository 实现 (TypeORM QueryBuilder, targeting filter SQL) - 2 个 application service (AnnouncementService, UserTagService) - 2 个 DTO 文件 (announcement.dto.ts, user-tag.dto.ts) - 1 个 controller 文件 (含3个controller: AdminAnnouncement/AdminUserTag/UserAnnouncement) - 1 个 migration SQL ### API 端点: 管理端: POST /admin/announcements 创建公告(含定向配置) GET /admin/announcements 公告列表 GET /admin/announcements/:id 公告详情 PUT /admin/announcements/:id 更新公告 DELETE /admin/announcements/:id 删除公告 GET /admin/user-tags 所有标签(含用户数) POST /admin/user-tags/:userId 添加用户标签 DELETE /admin/user-tags/:userId 移除用户标签 PUT /admin/user-tags/:userId/sync 同步用户标签 用户端: GET /announcements 用户公告(按定向过滤+已读状态) GET /announcements/unread-count 未读数 PUT /announcements/:id/read 标记已读 PUT /announcements/read-all 全部已读 ### 设计决策: - Announcement 与现有 Notification 并存 (双轨): Notification = 事件驱动1:1通知, Announcement = 管理端广播/定向 - rwadurian accountSequences → gcx userIds (UUID) - rwadurian Prisma → gcx TypeORM Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
|
|
|
5a66b3071f |
feat: 新增用户遥测(Telemetry)与移动端OTA版本管理功能
## 遥测系统 (Telemetry) - 心跳检测: 客户端60s上报心跳,Redis Sorted Set实时计算在线用户数(180s窗口) - 事件采集: 批量上报客户端事件(会话/页面/操作),写入PostgreSQL telemetry_events表 - DAU统计: 基于app_session_start事件按userId/installId去重 - 实时近似: Redis HyperLogLog (PFADD/PFCOUNT) - 精确计算: 每天凌晨1:00从事件表聚合,支持平台/地区维度 - 在线快照: 每分钟记录在线用户数快照,支持1m/5m/1h区间聚合查询 - 定时任务: @nestjs/schedule驱动 (每分钟快照/每小时清理/凌晨DAU/滚动DAU) ## 版本管理 (App Version / OTA Update) - 版本CRUD: 管理员创建/编辑/删除/启禁用版本记录 - 文件上传: APK/IPA上传至MinIO(app-releases bucket),自动计算SHA256 - 强制更新: isForceUpdate标志,客户端据此决定是否阻断使用 - 检查更新API: GET /app/version/check?platform=android¤t_version_code=200 - 预签名下载: MinIO presigned URL (24h有效) ## 新增文件清单 (18个新文件 + 3个修改) 数据库迁移 (4): - 032_create_telemetry_events.sql — 事件日志表(append-only, BIGSERIAL) - 033_create_daily_active_stats.sql — DAU日统计表(day PK, JSONB平台/地区) - 034_create_online_snapshots.sql — 在线快照表(每分钟记录) - 035_create_app_versions.sql — 应用版本表(platform CHECK, 唯一索引) TypeORM实体 (4): - telemetry-event.entity.ts — 遥测事件(userId, installId, eventName, properties) - online-snapshot.entity.ts — 在线快照(ts, onlineCount, windowSeconds) - daily-active-stats.entity.ts — DAU统计(day PK, dauByPlatform/Region JSONB) - app-version.entity.ts — 应用版本(Platform enum, @VersionColumn乐观锁) Redis基础设施 (1): - presence-redis.service.ts — ZADD心跳 + ZCOUNT在线 + PFADD/PFCOUNT DAU 业务服务 (4): - telemetry.service.ts — 批量事件入库 + 心跳记录 + 在线/DAU查询 - telemetry-scheduler.service.ts — 4个Cron定时任务 - app-version.service.ts — checkUpdate + CRUD + toggle + 重复检测 - file-storage.service.ts — MinIO上传(SHA256) + presigned下载URL HTTP控制器 (4): - telemetry.controller.ts — POST events(无需认证) + POST heartbeat + GET online - admin-telemetry.controller.ts — GET /admin/telemetry/dau|events|realtime - app-version.controller.ts — GET /app/version/check (移动端) - admin-version.controller.ts — 完整CRUD + multipart上传 + toggle启禁用 修改文件 (3): - user.module.ts — 注册4实体+4控制器+5服务+ScheduleModule - package.json — 新增@nestjs/schedule, minio, @types/multer - kong.yml — 新增4条Kong路由(telemetry, admin/telemetry, app/version, admin/versions) 文档 (1): - docs/guides/07-遥测与版本管理开发指南.md — 完整开发指导(参考rwadurian适配) 注: admin遥测路径为/admin/telemetry,避免与issuer-service的/admin/analytics冲突 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |
|
|
|
ad93bc728f |
feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码)
## 架构概览 - 10个微服务: 7 NestJS + 3 Go/Gin - DDD + Clean Architecture (Domain/Application/Infrastructure/Interface 四层) - Kong API Gateway (8080) 统一入口 - PostgreSQL + Redis + Kafka(KRaft) + MinIO 基础设施 ## 微服务清单 | 服务 | 技术 | 端口 | 职责 | |------|------|------|------| | auth-service | NestJS | 3010 | JWT双Token认证(15min+7d)、注册/登录/刷新/登出 | | user-service | NestJS | 3001 | 用户Profile、KYC审核、钱包(充值/提现)、消息 | | issuer-service | NestJS | 3002 | 发行方入驻、券CRUD/搜索/购买、定价引擎、信用评分 | | trading-service | Go/Gin | 3003 | 撮合引擎(价格-时间优先)、订单簿、做市商API | | clearing-service | NestJS | 3004 | 交易结算、退款、Breakage、ASC 606会计分录 | | compliance-service | NestJS | 3005 | AML(5模式)、OFAC筛查、Travel Rule、SAR报告 | | ai-service | NestJS | 3006 | ACL反腐败层→外部AI Agent集群(含本地降级) | | translate-service | Go/Gin | 3007 | 区块链地址映射翻译 | | notification-service | NestJS | 3008 | 推送/短信/邮件/站内通知、事件消费 | | chain-indexer | Go/Gin | 3009 | 区块链索引器(Mock) | ## Admin API (18个管理模块) 覆盖admin-web全部18+页面: Dashboard、用户管理、系统管理、用户分析、发行方管理、券管理、 券分析、商户核销、交易监控、做市商管理、财务管理、报表中心、 风控中心、合规审计、争议处理、保险理赔、AI Agent面板、通知管理 ## 数据库 - 31个SQL迁移 (000-031) + 种子数据 - 乐观锁(@VersionColumn) + 悲观锁(SELECT FOR UPDATE) + Redis分布式锁 - Outbox Pattern保证消息可靠投递 + 24h幂等窗口 ## 共享包 - @genex/common: Guards/Decorators/DTOs/Outbox/Health/Locking/AI-Client - @genex/kafka-client: 生产者/消费者/Topic定义/KRaft集群支持 ## 部署与测试 - docker-compose.yml: 全栈一键启动 - Swagger文档: 7个NestJS服务 /docs 端点 - E2E测试脚本: scripts/run-e2e.sh (Auth→Profile→Wallet→Trading→Admin) - 迁移脚本: scripts/migrate.sh + scripts/test-setup.sh Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> |