import { Module } from '@nestjs/common'; import { APP_INTERCEPTOR } from '@nestjs/core'; import { JwtModule } from '@nestjs/jwt'; import { PassportModule } from '@nestjs/passport'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { MembershipsModule } from '../memberships/memberships.module'; import { BillingModule } from '../billing/billing.module'; import { AttendanceModule } from '../attendance/attendance.module'; import { WorkdayInterceptor } from '../attendance/workday.interceptor'; import { AuthService } from './auth.service'; import { AuthController } from './auth.controller'; import { JwtStrategy } from './jwt.strategy'; import { RolesGuard } from './roles.guard'; import { ViewAsReadOnlyInterceptor } from './view-as-readonly.interceptor'; @Module({ imports: [ ConfigModule, MembershipsModule, BillingModule, AttendanceModule, PassportModule.register({ defaultStrategy: 'jwt' }), JwtModule.registerAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (config: ConfigService) => ({ secret: config.get('JWT_SECRET') ?? 'dev-secret', signOptions: { expiresIn: (config.get('JWT_EXPIRES_IN') ?? '7d') as `${number}d`, }, }), }), ], controllers: [AuthController], providers: [ AuthService, JwtStrategy, RolesGuard, { provide: APP_INTERCEPTOR, useClass: ViewAsReadOnlyInterceptor, }, { provide: APP_INTERCEPTOR, useClass: WorkdayInterceptor, }, ], exports: [AuthService, RolesGuard, JwtModule], }) export class AuthModule {}