61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
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 {}
|