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

62 lines
2.0 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 { MiningAccountRepository } from './persistence/repositories/mining-account.repository';
import { MiningConfigRepository } from './persistence/repositories/mining-config.repository';
import { BlackHoleRepository } from './persistence/repositories/black-hole.repository';
import { PriceSnapshotRepository } from './persistence/repositories/price-snapshot.repository';
import { RedisService } from './redis/redis.service';
@Global()
@Module({
imports: [
PrismaModule,
ClientsModule.registerAsync([
{
name: 'KAFKA_CLIENT',
imports: [ConfigModule],
useFactory: (configService: ConfigService) => ({
transport: Transport.KAFKA,
options: {
client: {
clientId: 'mining-service',
brokers: configService.get<string>('KAFKA_BROKERS', 'localhost:9092').split(','),
},
producer: {
allowAutoTopicCreation: true,
},
},
}),
inject: [ConfigService],
},
]),
],
providers: [
MiningAccountRepository,
MiningConfigRepository,
BlackHoleRepository,
PriceSnapshotRepository,
{
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', 1),
}),
inject: [ConfigService],
},
RedisService,
],
exports: [
MiningAccountRepository,
MiningConfigRepository,
BlackHoleRepository,
PriceSnapshotRepository,
RedisService,
ClientsModule,
],
})
export class InfrastructureModule {}