gcx/backend/services/telemetry-service/src/telemetry.module.ts

95 lines
4.1 KiB
TypeScript

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { JwtModule } from '@nestjs/jwt';
import { PassportModule } from '@nestjs/passport';
import { ScheduleModule } from '@nestjs/schedule';
import { JwtStrategy } from './infrastructure/strategies/jwt.strategy';
// Domain entities
import { TelemetryEvent } from './domain/entities/telemetry-event.entity';
import { OnlineSnapshot } from './domain/entities/online-snapshot.entity';
import { DailyActiveStats } from './domain/entities/daily-active-stats.entity';
// Domain repositories
import { TELEMETRY_EVENT_REPOSITORY } from './domain/repositories/telemetry-event.repository.interface';
import { ONLINE_SNAPSHOT_REPOSITORY } from './domain/repositories/online-snapshot.repository.interface';
import { DAILY_ACTIVE_STATS_REPOSITORY } from './domain/repositories/daily-active-stats.repository.interface';
// Domain ports
import { PRESENCE_SERVICE } from './domain/ports/presence.service.interface';
import { TELEMETRY_METRICS_SERVICE } from './domain/ports/telemetry-metrics.service.interface';
import { TELEMETRY_PRODUCER_SERVICE } from './domain/ports/telemetry-producer.service.interface';
// Infrastructure
import { TelemetryEventRepository } from './infrastructure/persistence/telemetry-event.repository';
import { OnlineSnapshotRepository } from './infrastructure/persistence/online-snapshot.repository';
import { DailyActiveStatsRepository } from './infrastructure/persistence/daily-active-stats.repository';
import { PresenceRedisService } from './infrastructure/redis/presence-redis.service';
import { TelemetryProducerService } from './infrastructure/kafka/telemetry-producer.service';
import { TelemetryMetricsService } from './infrastructure/metrics/telemetry-metrics.service';
// Application services
import { TelemetryService } from './application/services/telemetry.service';
import { TelemetrySchedulerService } from './application/services/telemetry-scheduler.service';
// Shared guards
import { JwtAuthGuard } from './shared/guards/jwt-auth.guard';
import { AdminGuard } from './shared/guards/admin.guard';
// Interface - Controllers
import { TelemetryController } from './interface/http/controllers/telemetry.controller';
import { AdminTelemetryController } from './interface/http/controllers/admin-telemetry.controller';
import { MetricsController } from './interface/http/controllers/metrics.controller';
import { HealthController } from './interface/http/controllers/health.controller';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'postgres',
host: process.env.DB_HOST || 'localhost',
port: parseInt(process.env.DB_PORT || '5432', 10),
username: process.env.DB_USERNAME || 'genex',
password: process.env.DB_PASSWORD || 'genex_dev_password',
database: process.env.DB_NAME || 'genex',
autoLoadEntities: true,
synchronize: false,
logging: process.env.NODE_ENV === 'development',
extra: {
max: parseInt(process.env.DB_POOL_MAX || '20', 10),
min: parseInt(process.env.DB_POOL_MIN || '5', 10),
},
}),
TypeOrmModule.forFeature([
TelemetryEvent,
OnlineSnapshot,
DailyActiveStats,
]),
PassportModule.register({ defaultStrategy: 'jwt' }),
JwtModule.register({
secret: process.env.JWT_ACCESS_SECRET || 'dev-access-secret',
}),
ScheduleModule.forRoot(),
],
controllers: [
TelemetryController,
AdminTelemetryController,
MetricsController,
HealthController,
],
providers: [
JwtStrategy,
JwtAuthGuard,
AdminGuard,
{ provide: TELEMETRY_EVENT_REPOSITORY, useClass: TelemetryEventRepository },
{ provide: ONLINE_SNAPSHOT_REPOSITORY, useClass: OnlineSnapshotRepository },
{ provide: DAILY_ACTIVE_STATS_REPOSITORY, useClass: DailyActiveStatsRepository },
{ provide: PRESENCE_SERVICE, useClass: PresenceRedisService },
{ provide: TELEMETRY_PRODUCER_SERVICE, useClass: TelemetryProducerService },
{ provide: TELEMETRY_METRICS_SERVICE, useClass: TelemetryMetricsService },
TelemetryService,
TelemetrySchedulerService,
],
exports: [TelemetryService],
})
export class TelemetryModule {}