import { Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { APP_GUARD } from '@nestjs/core'; import { ThrottlerGuard, ThrottlerModule } from '@nestjs/throttler'; import { PrismaModule } from './prisma/prisma.module'; import { AuthModule } from './auth/auth.module'; import { RolesGuard } from './auth/guards/roles.guard'; import { CountriesModule } from './countries/countries.module'; import { CategoriesModule } from './categories/categories.module'; import { TagsModule } from './tags/tags.module'; import { TagGroupsModule } from './tag-groups/tag-groups.module'; import { PositionsModule } from './positions/positions.module'; import { OriginGoodsModule } from './origin-goods/origin-goods.module'; import { ProductFamiliesModule } from './product-families/product-families.module'; import { GoodsModule } from './goods/goods.module'; import { SyncModule } from './sync/sync.module'; import { PublicModule } from './public/public.module'; import { UploadModule } from './upload/upload.module'; @Module({ imports: [ ConfigModule.forRoot({ isGlobal: true, }), // Global rate limiting: 120 req/min per IP. Stricter limits are set // per-endpoint with @Throttle (auth, upload). ThrottlerModule.forRoot([ { ttl: 60_000, limit: Number(process.env.THROTTLE_LIMIT ?? 120), }, ]), PrismaModule, AuthModule, CountriesModule, CategoriesModule, TagsModule, TagGroupsModule, PositionsModule, OriginGoodsModule, ProductFamiliesModule, GoodsModule, SyncModule, PublicModule, UploadModule, ], providers: [ { provide: APP_GUARD, useClass: ThrottlerGuard, }, { // Enforces the ADMIN role on every authenticated route unless the // route widens access with @Roles(...). provide: APP_GUARD, useClass: RolesGuard, }, ], }) export class AppModule {}