Я использую NestJS (v11) и @nestjs/swagger (v11.0.3).
У меня модульная структура приложения, где некоторые контроллеры предназначены для публичных клиентов (мобильное приложение, фронтенд), а другие — для админ-панели.
Когда я генерирую документацию Swagger с помощью
SwaggerModule.createDocument()
, в неё попадают все контроллеры модуля.
Я хочу разделить Swagger на два отдельных документа:
/docs → для публичного API (клиенты)
/docs-admin → для админского API
Текущая конфигурация Swagger (main.ts)
const config = new DocumentBuilder()
.setTitle('API')
.setDescription('API Documentation')
.addServer(`${baseUrl}/${apiPrefix}`)
.setVersion('1.0')
.build();
const document = SwaggerModule.createDocument(app, config);
SwaggerModule.setup('docs', app, document, {
swaggerOptions: {
search: true,
},
});
App.module.ts
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
}),
CacheModule.register({
isGlobal: true,
}),
TypeOrmModule.forRootAsync({
inject: [ConfigService],
useFactory: createTypeOrmConfig,
}),
ApiModule,
],
})
export class AppModule {}
api.module.ts
@Module({
imports: [PerkProvidersModule, PerksModule],
})
export class MarketplaceDomainModule {}
perks.module.ts
@Module({
imports: [TypeOrmModule.forFeature([Perk]), PerkProvidersModule],
providers: [PerksService],
controllers: [PerksController, AdminPerksController],
})
export class PerksModule {}
Проблема:
В массиве controllers я указываю сразу и PerksController, и AdminPerksController.
Из-за этого я не могу просто передать в конфигурацию Swagger:
include: [PerksModule]
Потому что в Swagger попадут оба контроллера, а мне нужно их разделить.
Вопрос:
Какой здесь лучший подход для решения этой задачи?
Стоит ли полностью разделить модули (например, создать PerksModule и AdminPerksModule) только ради раздельной генерации Swagger-документов?