it0/packages/services/referral-service/src/referral.module.ts

86 lines
3.9 KiB
TypeScript

import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { DatabaseModule } from '@it0/database';
// Domain Entities
import { ReferralCode } from './domain/entities/referral-code.entity';
import { ReferralRelationship } from './domain/entities/referral-relationship.entity';
import { ReferralReward } from './domain/entities/referral-reward.entity';
import { ReferralStat } from './domain/entities/referral-stat.entity';
import { ProcessedEvent } from './domain/entities/processed-event.entity';
// Infrastructure Repositories
import { ReferralCodeRepository } from './infrastructure/repositories/referral-code.repository';
import { ReferralRelationshipRepository } from './infrastructure/repositories/referral-relationship.repository';
import { ReferralRewardRepository } from './infrastructure/repositories/referral-reward.repository';
import { ReferralStatRepository } from './infrastructure/repositories/referral-stat.repository';
import { ProcessedEventRepository } from './infrastructure/repositories/processed-event.repository';
// User-level repositories
import { UserReferralCodeRepository } from './infrastructure/repositories/user-referral-code.repository';
import { UserReferralRelationshipRepository } from './infrastructure/repositories/user-referral-relationship.repository';
import { UserPointRepository } from './infrastructure/repositories/user-point.repository';
// Application Use Cases
import { GetMyReferralInfoUseCase } from './application/use-cases/get-my-referral-info.use-case';
import { ValidateReferralCodeUseCase } from './application/use-cases/validate-referral-code.use-case';
import { RegisterWithCodeUseCase } from './application/use-cases/register-with-code.use-case';
import { ConsumePaymentReceivedUseCase } from './application/use-cases/consume-payment-received.use-case';
import { GetReferralListUseCase } from './application/use-cases/get-referral-list.use-case';
import { GetPendingCreditsUseCase } from './application/use-cases/get-pending-credits.use-case';
// User-level use cases
import { RegisterUserReferralUseCase } from './application/use-cases/register-user-referral.use-case';
import { ConsumeUserPaymentUseCase } from './application/use-cases/consume-user-payment.use-case';
import { GetMyUserReferralInfoUseCase } from './application/use-cases/get-my-user-referral-info.use-case';
import { GetMyCircleUseCase } from './application/use-cases/get-my-circle.use-case';
// Controllers
import { ReferralController } from './interfaces/rest/controllers/referral.controller';
import { ReferralInternalController } from './interfaces/rest/controllers/referral-internal.controller';
import { ReferralAdminController } from './interfaces/rest/controllers/referral-admin.controller';
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
DatabaseModule.forRoot(),
TypeOrmModule.forFeature([
ReferralCode,
ReferralRelationship,
ReferralReward,
ReferralStat,
ProcessedEvent,
]),
],
controllers: [
ReferralController,
ReferralInternalController,
ReferralAdminController,
],
providers: [
// Tenant-level repositories (B2B)
ReferralCodeRepository,
ReferralRelationshipRepository,
ReferralRewardRepository,
ReferralStatRepository,
ProcessedEventRepository,
// User-level repositories (C2C personal circle + points)
UserReferralCodeRepository,
UserReferralRelationshipRepository,
UserPointRepository,
// Tenant-level use cases
GetMyReferralInfoUseCase,
ValidateReferralCodeUseCase,
RegisterWithCodeUseCase,
ConsumePaymentReceivedUseCase,
GetReferralListUseCase,
GetPendingCreditsUseCase,
// User-level use cases
RegisterUserReferralUseCase,
ConsumeUserPaymentUseCase,
GetMyUserReferralInfoUseCase,
GetMyCircleUseCase,
],
})
export class ReferralModule {}