rwadurian/backend/services/contribution-service/src/pre-planting/pre-planting-cdc.module.ts

89 lines
4.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { Module } from '@nestjs/common';
import { ScheduleModule } from '@nestjs/schedule';
import { InfrastructureModule } from '../infrastructure/infrastructure.module';
// Pre-planting Prisma (独立 schema)
import { PrePlantingPrismaModule } from './infrastructure/prisma/pre-planting-prisma.module';
// CDC Consumer (独立 Kafka consumer group)
import { PrePlantingCdcConsumerService } from './infrastructure/kafka/pre-planting-cdc-consumer.service';
// CDC Event Handlers
import { PrePlantingOrderSyncedHandler } from './application/handlers/pre-planting-order-synced.handler';
import { PrePlantingPositionSyncedHandler } from './application/handlers/pre-planting-position-synced.handler';
import { PrePlantingCdcDispatcher } from './application/handlers/pre-planting-cdc-dispatcher';
// Application Services
import { PrePlantingContributionService } from './application/services/pre-planting-contribution.service';
// Schedulers
import { PrePlantingFreezeScheduler } from './application/schedulers/pre-planting-freeze.scheduler';
// 现有 Application Services直接提供不 import ApplicationModule 避免引入现有 CDCEventDispatcher
// 这些服务是无状态的,仅依赖 InfrastructureModule 的 providers重复实例化无副作用。
import { ContributionRateService } from '../application/services/contribution-rate.service';
import { ContributionDistributionPublisherService } from '../application/services/contribution-distribution-publisher.service';
import { BonusClaimService } from '../application/services/bonus-claim.service';
/**
* 预种 CDC 集成模块
*
* [2026-02-17] 新增:将预种数据集成到 contribution-service 2.0 算力体系
*
* === 功能概述 ===
* 1. 通过独立 CDC consumer 消费预种表变更cdc.pre-planting.public.*
* 2. 同步预种订单/持仓到独立追踪表PrePlantingPrismaService
* 3. 为每份预种订单计算 1/5 算力(复用现有领域计算器)
* 4. 在 synced_adoptions 中插入 marker 记录(让现有 unlock 逻辑自然计入预种用户)
* 5. 每日检查冻结/解冻条件1 年未满 5 份 → 冻结;满 5 份 → 解冻 + 2 年有效期)
*
* === 隔离保证 ===
* - 独立 Kafka consumer groupcontribution-pre-planting-cdc不影响现有 contribution-service-cdc-group
* - 独立 CDC topicscdc.pre-planting.public.*(不影响现有 cdc.planting.public.* topics
* - 独立 Debezium connector / replication slot / publication
* - 独立 Prisma schemaprisma/pre-planting/schema.prisma追踪表与现有表完全分离
* - 幂等性共用主 PrismaService 的 ProcessedCdcEvent 表(同 DB 事务保证一致性)
*
* === 对现有系统的影响 ===
* - 零修改现有代码文件。本模块是纯新增。
* - 算力写入现有 contribution_accounts / contribution_records 表(挖矿系统可见)
* - sourceAdoptionId 使用 10,000,000,000 偏移,永远不会与正常认种 ID 冲突
* - synced_adoptions 中的 marker 记录设置 contributionDistributed=true + treeCount=0
* 现有调度器不会处理,即使误处理也不会产生算力
* - 不更新 NetworkAdoptionProgress预种份额不推高全网算力系数
*
* === 依赖关系 ===
* - InfrastructureModule提供 PrismaService、Repositories、UnitOfWork、Redis 等
* - PrePlantingPrismaModule提供独立的 PrePlantingPrismaService
* - ScheduleModule提供 @Cron 装饰器支持(冻结调度器)
*/
@Module({
imports: [
ScheduleModule.forRoot(),
InfrastructureModule,
PrePlantingPrismaModule,
],
providers: [
// CDC Consumer (独立 consumer group)
PrePlantingCdcConsumerService,
// CDC Event Handlers
PrePlantingOrderSyncedHandler,
PrePlantingPositionSyncedHandler,
PrePlantingCdcDispatcher,
// Application Services (预种)
PrePlantingContributionService,
// Application Services (现有,直接提供以避免 import ApplicationModule)
// ApplicationModule 内含 CDCEventDispatcherimport 会导致现有 CDC 被二次注册
ContributionRateService,
ContributionDistributionPublisherService,
BonusClaimService,
// Schedulers
PrePlantingFreezeScheduler,
],
})
export class PrePlantingCdcModule {}