rwadurian/backend/services/leaderboard-service/src/modules/infrastructure.module.ts

64 lines
2.5 KiB
TypeScript

import { Module, Global } from '@nestjs/common';
import { HttpModule } from '@nestjs/axios';
import { ConfigModule } from '@nestjs/config';
import { PrismaService } from '../infrastructure/database/prisma.service';
import { RedisService } from '../infrastructure/cache/redis.service';
import { LeaderboardCacheService } from '../infrastructure/cache/leaderboard-cache.service';
import { KafkaService } from '../infrastructure/messaging/kafka.service';
import { EventPublisherService } from '../infrastructure/messaging/event-publisher.service';
import { EventConsumerService } from '../infrastructure/messaging/event-consumer.service';
import { ReferralServiceClient } from '../infrastructure/external/referral-service.client';
import { IdentityServiceClient } from '../infrastructure/external/identity-service.client';
import { LeaderboardRankingRepositoryImpl } from '../infrastructure/repositories/leaderboard-ranking.repository.impl';
import { LeaderboardConfigRepositoryImpl } from '../infrastructure/repositories/leaderboard-config.repository.impl';
import { VirtualAccountRepositoryImpl } from '../infrastructure/repositories/virtual-account.repository.impl';
import { LEADERBOARD_RANKING_REPOSITORY } from '../domain/repositories/leaderboard-ranking.repository.interface';
import { LEADERBOARD_CONFIG_REPOSITORY } from '../domain/repositories/leaderboard-config.repository.interface';
import { VIRTUAL_ACCOUNT_REPOSITORY } from '../domain/repositories/virtual-account.repository.interface';
@Global()
@Module({
imports: [
ConfigModule,
HttpModule.register({
timeout: 5000,
maxRedirects: 5,
}),
],
providers: [
PrismaService,
RedisService,
LeaderboardCacheService,
KafkaService,
EventPublisherService,
EventConsumerService,
ReferralServiceClient,
IdentityServiceClient,
{
provide: LEADERBOARD_RANKING_REPOSITORY,
useClass: LeaderboardRankingRepositoryImpl,
},
{
provide: LEADERBOARD_CONFIG_REPOSITORY,
useClass: LeaderboardConfigRepositoryImpl,
},
{
provide: VIRTUAL_ACCOUNT_REPOSITORY,
useClass: VirtualAccountRepositoryImpl,
},
],
exports: [
PrismaService,
RedisService,
LeaderboardCacheService,
KafkaService,
EventPublisherService,
ReferralServiceClient,
IdentityServiceClient,
LEADERBOARD_RANKING_REPOSITORY,
LEADERBOARD_CONFIG_REPOSITORY,
VIRTUAL_ACCOUNT_REPOSITORY,
],
})
export class InfrastructureModule {}