import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { join } from 'path'; import { TypeOrmModule } from '@nestjs/typeorm'; import { JwtModule } from '@nestjs/jwt'; import { PassportModule } from '@nestjs/passport'; import { typeormConfig } from './config/typeorm.config'; import { redisConfig } from './config/redis.config'; import { appConfig } from './config/app.config'; import { authConfig } from './config/auth.config'; import { Home } from './core/domain/entities/home.entity'; import { User } from './core/domain/entities/user.entity'; import { Device } from './core/domain/entities/device.entity'; import { AuthService } from './core/services/auth.service'; import { UserService } from './core/services/user.service'; import { HomeService } from './core/services/home.service'; import { DeviceService } from './core/services/device.service'; import { ConversationService } from './core/services/conversation.service'; import { JwtStrategy } from './adapters/inbound/rest/auth/strategies/jwt.strategy'; import { AuthController } from './adapters/inbound/rest/auth/auth.controller'; import { DeviceController } from './adapters/inbound/rest/device/device.controller'; import { RobotGateway } from './adapters/inbound/websocket/robot.gateway'; import { DeepgramAdapter } from './adapters/outbound/stt/deepgram.adapter'; import { CONVERSATION_PORT } from './core/ports/inbound/conversation.port'; import { STT_PORT } from './core/ports/outbound/stt.port'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, envFilePath: join(__dirname, '..', '..', '..', '.env'), load: [appConfig, redisConfig, authConfig], }), TypeOrmModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (configService: ConfigService) => typeormConfig(configService), }), TypeOrmModule.forFeature([Home, User, Device]), PassportModule, JwtModule.registerAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (configService: ConfigService) => ({ secret: configService.get('auth.jwtSecret', 'dev-secret-change-in-production'), }), }), ], controllers: [AuthController, DeviceController], providers: [ AuthService, UserService, HomeService, DeviceService, JwtStrategy, RobotGateway, { provide: CONVERSATION_PORT, useClass: ConversationService, }, { provide: STT_PORT, useClass: DeepgramAdapter, }, ], }) export class AppModule { }