72 lines
3.0 KiB
TypeScript
72 lines
3.0 KiB
TypeScript
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 { ORGANIZATION_REPOSITORY } from '@domain/ports/out/organization.repository';
|
|
import { INVITATION_TOKEN_REPOSITORY } from '@domain/ports/out/invitation-token.repository';
|
|
import { TypeOrmUserRepository } from '../../infrastructure/persistence/typeorm/repositories/typeorm-user.repository';
|
|
import { TypeOrmOrganizationRepository } from '../../infrastructure/persistence/typeorm/repositories/typeorm-organization.repository';
|
|
import { TypeOrmInvitationTokenRepository } from '../../infrastructure/persistence/typeorm/repositories/typeorm-invitation-token.repository';
|
|
import { UserOrmEntity } from '../../infrastructure/persistence/typeorm/entities/user.orm-entity';
|
|
import { OrganizationOrmEntity } from '../../infrastructure/persistence/typeorm/entities/organization.orm-entity';
|
|
import { InvitationTokenOrmEntity } from '../../infrastructure/persistence/typeorm/entities/invitation-token.orm-entity';
|
|
import { InvitationService } from '../services/invitation.service';
|
|
import { InvitationsController } from '../controllers/invitations.controller';
|
|
import { EmailModule } from '../../infrastructure/email/email.module';
|
|
import { SubscriptionsModule } from '../subscriptions/subscriptions.module';
|
|
|
|
@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<string>('JWT_SECRET'),
|
|
signOptions: {
|
|
expiresIn: configService.get<string>('JWT_ACCESS_EXPIRATION', '15m'),
|
|
},
|
|
}),
|
|
}),
|
|
|
|
// 👇 Add this to register TypeORM repositories
|
|
TypeOrmModule.forFeature([UserOrmEntity, OrganizationOrmEntity, InvitationTokenOrmEntity]),
|
|
|
|
// Email module for sending invitations
|
|
EmailModule,
|
|
|
|
// Subscriptions module for license checks
|
|
SubscriptionsModule,
|
|
],
|
|
controllers: [AuthController, InvitationsController],
|
|
providers: [
|
|
AuthService,
|
|
JwtStrategy,
|
|
InvitationService,
|
|
{
|
|
provide: USER_REPOSITORY,
|
|
useClass: TypeOrmUserRepository,
|
|
},
|
|
{
|
|
provide: ORGANIZATION_REPOSITORY,
|
|
useClass: TypeOrmOrganizationRepository,
|
|
},
|
|
{
|
|
provide: INVITATION_TOKEN_REPOSITORY,
|
|
useClass: TypeOrmInvitationTokenRepository,
|
|
},
|
|
],
|
|
exports: [AuthService, JwtStrategy, PassportModule],
|
|
})
|
|
export class AuthModule {}
|