oa_based/src/setup-swagger.ts

44 lines
1.4 KiB
TypeScript

import { INestApplication, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { API_SECURITY_AUTH } from './common/decorators/swagger.decorator';
import { CommonEntity } from './common/entity/common.entity';
import { ResOp, TreeResult } from './common/model/response.model';
import { ConfigKeyPaths, IAppConfig, ISwaggerConfig } from './config';
import { Pagination } from './helper/paginate/pagination';
export function setupSwagger(
app: INestApplication,
configService: ConfigService<ConfigKeyPaths>
): void {
const { name, port } = configService.get<IAppConfig>('app')!;
const { enable, path } = configService.get<ISwaggerConfig>('swagger')!;
if (!enable) return;
const documentBuilder = new DocumentBuilder()
.setTitle(name)
.setDescription(`${name} API document`)
.setVersion('1.0');
// auth security
documentBuilder.addSecurity(API_SECURITY_AUTH, {
description: 'Auth',
type: 'apiKey',
in: 'header',
name: 'Authorization'
});
const document = SwaggerModule.createDocument(app, documentBuilder.build(), {
ignoreGlobalPrefix: false,
extraModels: [CommonEntity, ResOp, Pagination, TreeResult]
});
SwaggerModule.setup(path, app, document);
// started log
const logger = new Logger('SwaggerModule');
logger.log(`Document running on http://127.0.0.1:${port}/${path}`);
}