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

98 lines
4.1 KiB
TypeScript

import { Module, Global } from '@nestjs/common';
import { HttpModule } from '@nestjs/axios';
import { PrismaService } from './persistence/prisma/prisma.service';
import { PlantingOrderRepositoryImpl } from './persistence/repositories/planting-order.repository.impl';
import { PlantingPositionRepositoryImpl } from './persistence/repositories/planting-position.repository.impl';
import { PoolInjectionBatchRepositoryImpl } from './persistence/repositories/pool-injection-batch.repository.impl';
import { ContractTemplateRepositoryImpl } from './persistence/repositories/contract-template.repository.impl';
import { ContractSigningTaskRepositoryImpl } from './persistence/repositories/contract-signing-task.repository.impl';
import { OutboxRepository } from './persistence/repositories/outbox.repository';
import { PaymentCompensationRepository } from './persistence/repositories/payment-compensation.repository';
import { UnitOfWork, UNIT_OF_WORK } from './persistence/unit-of-work';
import { WalletServiceClient } from './external/wallet-service.client';
import { ReferralServiceClient } from './external/referral-service.client';
import { IdentityServiceClient } from './external/identity-service.client';
import { KafkaModule } from './kafka/kafka.module';
import { OutboxPublisherService } from './kafka/outbox-publisher.service';
import { EventAckController } from './kafka/event-ack.controller';
import { ContractSigningEventConsumer } from './kafka/contract-signing-event.consumer';
import { KycVerifiedEventConsumer } from './kafka/kyc-verified-event.consumer';
import { PdfGeneratorService } from './pdf/pdf-generator.service';
import { MinioStorageService } from './storage/minio-storage.service';
import { PLANTING_ORDER_REPOSITORY } from '../domain/repositories/planting-order.repository.interface';
import { PLANTING_POSITION_REPOSITORY } from '../domain/repositories/planting-position.repository.interface';
import { POOL_INJECTION_BATCH_REPOSITORY } from '../domain/repositories/pool-injection-batch.repository.interface';
import { CONTRACT_TEMPLATE_REPOSITORY } from '../domain/repositories/contract-template.repository.interface';
import { CONTRACT_SIGNING_TASK_REPOSITORY } from '../domain/repositories/contract-signing-task.repository.interface';
import { PaymentCompensationService } from '../application/services/payment-compensation.service';
import { ContractSigningService } from '../application/services/contract-signing.service';
@Global()
@Module({
imports: [
HttpModule.register({
timeout: 5000,
maxRedirects: 5,
}),
KafkaModule,
],
controllers: [EventAckController, ContractSigningEventConsumer, KycVerifiedEventConsumer],
providers: [
PrismaService,
{
provide: PLANTING_ORDER_REPOSITORY,
useClass: PlantingOrderRepositoryImpl,
},
{
provide: PLANTING_POSITION_REPOSITORY,
useClass: PlantingPositionRepositoryImpl,
},
{
provide: POOL_INJECTION_BATCH_REPOSITORY,
useClass: PoolInjectionBatchRepositoryImpl,
},
{
provide: CONTRACT_TEMPLATE_REPOSITORY,
useClass: ContractTemplateRepositoryImpl,
},
{
provide: CONTRACT_SIGNING_TASK_REPOSITORY,
useClass: ContractSigningTaskRepositoryImpl,
},
{
provide: UNIT_OF_WORK,
useClass: UnitOfWork,
},
OutboxRepository,
PaymentCompensationRepository,
OutboxPublisherService,
PaymentCompensationService,
ContractSigningService,
PdfGeneratorService,
MinioStorageService,
WalletServiceClient,
ReferralServiceClient,
IdentityServiceClient,
],
exports: [
PrismaService,
PLANTING_ORDER_REPOSITORY,
PLANTING_POSITION_REPOSITORY,
POOL_INJECTION_BATCH_REPOSITORY,
CONTRACT_TEMPLATE_REPOSITORY,
CONTRACT_SIGNING_TASK_REPOSITORY,
UNIT_OF_WORK,
OutboxRepository,
PaymentCompensationRepository,
OutboxPublisherService,
PaymentCompensationService,
ContractSigningService,
PdfGeneratorService,
MinioStorageService,
WalletServiceClient,
ReferralServiceClient,
IdentityServiceClient,
],
})
export class InfrastructureModule {}