ti-pote/apps/backend/src/app.module.ts
2026-03-27 11:57:52 +01:00

69 lines
2.5 KiB
TypeScript

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<string>('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 { }