gcx/backend/migrations
hailin 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>
2026-02-12 21:11:24 -08:00
..
000_extensions.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
001_create_users.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
002_create_wallets.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
003_create_transactions.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
004_create_issuers.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
005_create_address_mappings.sql feat: 全12服务DDD重构 + 公告定向推送系统 (移植自rwadurian) 2026-02-12 21:11:24 -08:00
006_create_coupons.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
007_create_coupon_rules.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
008_create_stores.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
009_create_orders.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
010_create_trades.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
011_create_kyc_submissions.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
012_create_credit_metrics.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
013_create_aml_alerts.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
014_create_ofac_screening.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
015_create_travel_rule_records.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
016_create_breakage_records.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
017_create_journal_entries.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
018_create_settlements.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
019_create_refunds.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
020_create_messages.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
021_create_disputes.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
022_create_audit_logs.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
023_create_sar_reports.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
024_create_outbox.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
025_create_distributed_config.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
026_create_refresh_tokens.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
027_create_notifications.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
028_create_disputes.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
029_create_audit_logs.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
030_create_insurance_claims.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
031_create_reports.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
032_create_telemetry_events.sql feat: 新增用户遥测(Telemetry)与移动端OTA版本管理功能 2026-02-12 17:53:50 -08:00
033_create_daily_active_stats.sql feat: 新增用户遥测(Telemetry)与移动端OTA版本管理功能 2026-02-12 17:53:50 -08:00
034_create_online_snapshots.sql feat: 新增用户遥测(Telemetry)与移动端OTA版本管理功能 2026-02-12 17:53:50 -08:00
035_create_app_versions.sql feat: 新增用户遥测(Telemetry)与移动端OTA版本管理功能 2026-02-12 17:53:50 -08:00
036_create_blocks.sql feat: 全12服务DDD重构 + 公告定向推送系统 (移植自rwadurian) 2026-02-12 21:11:24 -08:00
037_create_chain_transactions.sql feat: 全12服务DDD重构 + 公告定向推送系统 (移植自rwadurian) 2026-02-12 21:11:24 -08:00
038_create_announcements.sql feat: 全12服务DDD重构 + 公告定向推送系统 (移植自rwadurian) 2026-02-12 21:11:24 -08:00
seed.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00
seed_data.sql feat: 完成全部后端微服务开发 (10服务/373文件/15586行代码) 2026-02-12 17:09:12 -08:00