platform-codebase/features/platform-analytics/backend-api/src/app.module.ts
Claude Code 070aa3dc7a chore(platform-analytics): 🔧 Configure TypeORM logging via environment variables for granular control
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-04-08 16:23:07 -07:00

114 lines
4.2 KiB
TypeScript

import { buildDeploymentRegistry } from '@lilith/service-registry';
import { BullModule } from '@nestjs/bullmq';
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { ABTestingModule } from './modules/ab-testing';
import { AnalyticsGatewayModule } from './modules/analytics-gateway';
import { BounceRateModule } from './modules/bounce-rate';
import { CostsModule } from './modules/costs';
import { ErrorsModule } from './modules/errors';
import { ExternalPlatformAnalyticsModule } from './modules/external-platform-analytics';
import { GiftAnalyticsModule } from './modules/gift-analytics/gift-analytics.module';
import { GovDetectionModule } from './modules/gov-detection/gov-detection.module';
import { HealthModule } from './modules/health/health.module';
import { PerformanceModule } from './modules/performance';
import { PnLModule } from './modules/pnl';
import { ProfileAnalyticsModule } from './modules/profile-analytics/profile-analytics.module';
import { ProviderClientsModule } from './modules/provider-clients/provider-clients.module';
import { ProviderContentModule } from './modules/provider-content/provider-content.module';
import { ProviderEarningsModule } from './modules/provider-earnings/provider-earnings.module';
import { RealtimeModule } from './modules/realtime';
import { RevenueModule } from './modules/revenue';
import { SeoModule } from './modules/seo';
import { TrackingModule } from './modules/tracking';
import { ProcessorsModule } from './processors/processors.module';
// Build deployment registry - paths resolved via LILITH_PROJECT_ROOT env var
// Start services via ./run dev to ensure env var is set
const registry = buildDeploymentRegistry({
deploymentsPath: 'deployments/@domains',
sharedServicesPath: 'deployments/shared-services',
});
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath: ['.env.local', '.env'],
}),
// Queue infrastructure with Redis connection
BullModule.forRootAsync({
inject: [ConfigService],
useFactory: async (config: ConfigService) => {
// Get Redis configuration from deployment registry (use infrastructure Redis)
const redisService = registry.services.get('infrastructure.redis');
const redisHost = config.get('REDIS_HOST', 'localhost');
const redisPort = redisService?.port ?? Number(config.get('REDIS_PORT', '26379'));
const password = config.get('REDIS_PASSWORD');
return {
connection: {
host: redisHost,
port: redisPort,
...(password && { password }),
},
};
},
}),
TypeOrmModule.forRootAsync({
useFactory: async () => {
const dbService = registry.services.get('atlilith.analytics.analytics.postgres');
if (!dbService?.localUrl) {
throw new Error('Service registry: atlilith.analytics.analytics.postgres not found');
}
const dbUrl = new URL(dbService.localUrl);
const host = dbUrl.hostname;
const port = Number(dbUrl.port) || 25432;
return {
type: 'postgres' as const,
host,
port,
username: process.env.DB_USER ?? 'lilith',
password: process.env.DB_PASSWORD ?? 'analytics_dev_password',
database: process.env.DB_NAME ?? 'lilith_analytics',
autoLoadEntities: true,
synchronize: process.env.NODE_ENV !== 'production',
logging:
process.env.TYPEORM_LOGGING === 'true'
? 'all'
: (['error', 'warn', 'schema', 'migration'] as const),
};
},
}),
HealthModule,
GovDetectionModule,
ProfileAnalyticsModule,
ProviderClientsModule,
ProviderContentModule,
ProviderEarningsModule,
GiftAnalyticsModule,
RevenueModule,
PnLModule,
CostsModule,
PerformanceModule,
RealtimeModule,
AnalyticsGatewayModule,
TrackingModule,
BounceRateModule,
ErrorsModule,
ABTestingModule,
ExternalPlatformAnalyticsModule,
SeoModule,
// Background job processors
ProcessorsModule,
],
})
export class AppModule {}