import { Module } from '@nestjs/common'; import { JwtModule } from '@nestjs/jwt'; import { PassportModule } from '@nestjs/passport'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { TypeOrmModule } from '@nestjs/typeorm'; import { AuthService } from './auth.service'; import { JwtStrategy } from './jwt.strategy'; import { AuthController } from '../controllers/auth.controller'; // Import domain and infrastructure dependencies import { USER_REPOSITORY } from '@domain/ports/out/user.repository'; import { TypeOrmUserRepository } from '../../infrastructure/persistence/typeorm/repositories/typeorm-user.repository'; import { UserOrmEntity } from '../../infrastructure/persistence/typeorm/entities/user.orm-entity'; @Module({ imports: [ // Passport configuration PassportModule.register({ defaultStrategy: 'jwt' }), // JWT configuration with async factory JwtModule.registerAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: async (configService: ConfigService) => ({ secret: configService.get('JWT_SECRET'), signOptions: { expiresIn: configService.get('JWT_ACCESS_EXPIRATION', '15m'), }, }), }), // 👇 Add this to register TypeORM repository for UserOrmEntity TypeOrmModule.forFeature([UserOrmEntity]), ], controllers: [AuthController], providers: [ AuthService, JwtStrategy, { provide: USER_REPOSITORY, useClass: TypeOrmUserRepository, }, ], exports: [AuthService, JwtStrategy, PassportModule], }) export class AuthModule {}