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

82 lines
2.9 KiB
TypeScript

import { Module, Global } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { ClientsModule, Transport } from '@nestjs/microservices';
import { PrismaModule } from './persistence/prisma/prisma.module';
import { TradingAccountRepository } from './persistence/repositories/trading-account.repository';
import { OrderRepository } from './persistence/repositories/order.repository';
import { OutboxRepository } from './persistence/repositories/outbox.repository';
import { TradingConfigRepository } from './persistence/repositories/trading-config.repository';
import { BlackHoleRepository } from './persistence/repositories/black-hole.repository';
import { SharePoolRepository } from './persistence/repositories/share-pool.repository';
import { CirculationPoolRepository } from './persistence/repositories/circulation-pool.repository';
import { PriceSnapshotRepository } from './persistence/repositories/price-snapshot.repository';
import { ProcessedEventRepository } from './persistence/repositories/processed-event.repository';
import { RedisService } from './redis/redis.service';
import { KafkaProducerService } from './kafka/kafka-producer.service';
import { UserRegisteredConsumer } from './kafka/consumers/user-registered.consumer';
@Global()
@Module({
imports: [
PrismaModule,
ClientsModule.registerAsync([
{
name: 'KAFKA_CLIENT',
imports: [ConfigModule],
useFactory: (configService: ConfigService) => ({
transport: Transport.KAFKA,
options: {
client: {
clientId: 'trading-service',
brokers: configService
.get<string>('KAFKA_BROKERS', 'localhost:9092')
.split(','),
},
producer: { allowAutoTopicCreation: true },
},
}),
inject: [ConfigService],
},
]),
],
controllers: [UserRegisteredConsumer],
providers: [
TradingAccountRepository,
OrderRepository,
OutboxRepository,
TradingConfigRepository,
BlackHoleRepository,
SharePoolRepository,
CirculationPoolRepository,
PriceSnapshotRepository,
ProcessedEventRepository,
KafkaProducerService,
{
provide: 'REDIS_OPTIONS',
useFactory: (configService: ConfigService) => ({
host: configService.get<string>('REDIS_HOST', 'localhost'),
port: configService.get<number>('REDIS_PORT', 6379),
password: configService.get<string>('REDIS_PASSWORD'),
db: configService.get<number>('REDIS_DB', 12),
}),
inject: [ConfigService],
},
RedisService,
],
exports: [
TradingAccountRepository,
OrderRepository,
OutboxRepository,
TradingConfigRepository,
BlackHoleRepository,
SharePoolRepository,
CirculationPoolRepository,
PriceSnapshotRepository,
ProcessedEventRepository,
KafkaProducerService,
RedisService,
ClientsModule,
],
})
export class InfrastructureModule {}