import { SeederModule } from '@app/common/seed/seeder.module'; import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core'; import { WinstonModule } from 'nest-winston'; import { AuthenticationModule } from './auth/auth.module'; import { AutomationModule } from './automation/automation.module'; import { ClientModule } from './client/client.module'; import { DeviceCommissionModule } from './commission-device/commission-device.module'; import { CommunityModule } from './community/community.module'; import config from './config'; import { DeviceMessagesSubscriptionModule } from './device-messages/device-messages.module'; import { DeviceModule } from './device/device.module'; import { DoorLockModule } from './door-lock/door.lock.module'; import { GroupModule } from './group/group.module'; import { HealthModule } from './health/health.module'; import { LoggingInterceptor } from './interceptors/logging.interceptor'; import { InviteUserModule } from './invite-user/invite-user.module'; import { PermissionModule } from './permission/permission.module'; import { PowerClampModule } from './power-clamp/power-clamp.module'; import { PrivacyPolicyModule } from './privacy-policy/privacy-policy.module'; import { ProductModule } from './product'; import { ProjectModule } from './project'; import { RegionModule } from './region/region.module'; import { RoleModule } from './role/role.module'; import { SceneModule } from './scene/scene.module'; import { ScheduleModule } from './schedule/schedule.module'; import { SpaceModelModule } from './space-model'; import { SpaceModule } from './space/space.module'; import { TagModule } from './tags/tags.module'; import { TermsConditionsModule } from './terms-conditions/terms-conditions.module'; import { TimeZoneModule } from './timezone/timezone.module'; import { UserDevicePermissionModule } from './user-device-permission/user-device-permission.module'; import { UserNotificationModule } from './user-notification/user-notification.module'; import { UserModule } from './users/user.module'; import { VisitorPasswordModule } from './vistor-password/visitor-password.module'; import { ThrottlerGuard } from '@nestjs/throttler'; import { ThrottlerModule } from '@nestjs/throttler/dist/throttler.module'; import { isArray } from 'class-validator'; import { winstonLoggerOptions } from '../libs/common/src/logger/services/winston.logger'; import { AqiModule } from './aqi/aqi.module'; import { OccupancyModule } from './occupancy/occupancy.module'; import { WeatherModule } from './weather/weather.module'; import { ScheduleModule as NestScheduleModule } from '@nestjs/schedule'; import { SchedulerModule } from './scheduler/scheduler.module'; @Module({ imports: [ ConfigModule.forRoot({ load: config, }), ThrottlerModule.forRoot({ throttlers: [{ ttl: 60000, limit: 100 }], generateKey: (context) => { const req = context.switchToHttp().getRequest(); console.log('Real IP:', req.headers['x-forwarded-for']); return req.headers['x-forwarded-for'] ? isArray(req.headers['x-forwarded-for']) ? req.headers['x-forwarded-for'][0].split(':')[0] : req.headers['x-forwarded-for'].split(':')[0] : req.ip; }, }), WinstonModule.forRoot(winstonLoggerOptions), ClientModule, AuthenticationModule, UserModule, InviteUserModule, CommunityModule, SpaceModule, SpaceModelModule, GroupModule, DeviceModule, DeviceMessagesSubscriptionModule, UserDevicePermissionModule, UserNotificationModule, SeederModule, SceneModule, AutomationModule, DoorLockModule, RegionModule, TimeZoneModule, VisitorPasswordModule, ScheduleModule, ProductModule, ProjectModule, PermissionModule, RoleModule, TermsConditionsModule, PrivacyPolicyModule, TagModule, DeviceCommissionModule, PowerClampModule, HealthModule, OccupancyModule, WeatherModule, AqiModule, SchedulerModule, NestScheduleModule.forRoot(), ], providers: [ { provide: APP_INTERCEPTOR, useClass: LoggingInterceptor, }, { provide: APP_GUARD, useClass: ThrottlerGuard, }, ], }) export class AppModule {}