rwadurian/backend/services/contribution-service/src/infrastructure/infrastructure.module.ts

67 lines
2.0 KiB
TypeScript

import { Module } from '@nestjs/common';
import { PrismaModule } from './persistence/prisma/prisma.module';
import { UnitOfWork } from './persistence/unit-of-work/unit-of-work';
import {
ContributionAccountRepository,
ContributionRecordRepository,
SyncedDataRepository,
UnallocatedContributionRepository,
SystemAccountRepository,
OutboxRepository,
} from './persistence/repositories';
import { KafkaModule } from './kafka/kafka.module';
import { KafkaProducerService } from './kafka/kafka-producer.service';
import { CDCConsumerService } from './kafka/cdc-consumer.service';
import { RedisModule } from './redis/redis.module';
import { SYNCED_DATA_REPOSITORY } from '../domain/repositories/synced-data.repository.interface';
// Repository injection tokens
export const CONTRIBUTION_ACCOUNT_REPOSITORY = 'CONTRIBUTION_ACCOUNT_REPOSITORY';
export const CONTRIBUTION_RECORD_REPOSITORY = 'CONTRIBUTION_RECORD_REPOSITORY';
@Module({
imports: [PrismaModule, KafkaModule, RedisModule],
providers: [
UnitOfWork,
// Repositories
ContributionAccountRepository,
ContributionRecordRepository,
SyncedDataRepository,
UnallocatedContributionRepository,
SystemAccountRepository,
OutboxRepository,
// Repository interface bindings
{
provide: CONTRIBUTION_ACCOUNT_REPOSITORY,
useClass: ContributionAccountRepository,
},
{
provide: CONTRIBUTION_RECORD_REPOSITORY,
useClass: ContributionRecordRepository,
},
{
provide: SYNCED_DATA_REPOSITORY,
useClass: SyncedDataRepository,
},
// Kafka
KafkaProducerService,
CDCConsumerService,
],
exports: [
UnitOfWork,
ContributionAccountRepository,
ContributionRecordRepository,
SyncedDataRepository,
UnallocatedContributionRepository,
SystemAccountRepository,
OutboxRepository,
CONTRIBUTION_ACCOUNT_REPOSITORY,
CONTRIBUTION_RECORD_REPOSITORY,
SYNCED_DATA_REPOSITORY,
KafkaProducerService,
CDCConsumerService,
RedisModule,
],
})
export class InfrastructureModule {}