feat: Swagger/OpenAPI 문서화 시스템 구축
- Swagger 패키지 설치 및 설정: * swagger-jsdoc, swagger-ui-express 패키지 추가 * /api-docs 엔드포인트에서 Swagger UI 제공 * /api-docs.json 엔드포인트에서 JSON 스펙 제공 - 포괄적인 Swagger 설정 파일 생성: * config/swagger.js: OpenAPI 3.0 스펙 정의 * 공통 스키마 정의 (User, Worker, Project, Task, DailyWorkReport) * 표준 응답 스키마 (SuccessResponse, ErrorResponse, PaginatedResponse) * JWT Bearer 인증 스키마 설정 - API 문서화 적용: * Authentication API: 로그인 엔드포인트 문서화 * Workers API: 전체 CRUD 작업 문서화 * 상세한 요청/응답 스키마 및 예시 포함 * 에러 코드별 응답 정의 - Swagger UI 커스터마이징: * 브랜딩 및 UI 개선 * 인증 토큰 지속성 설정 * 필터링 및 탐색 기능 활성화 - 접근 방법: * http://localhost:20005/api-docs - Swagger UI * http://localhost:20005/api-docs.json - JSON 스펙
This commit is contained in:
@@ -9,6 +9,10 @@ const rateLimit = require('express-rate-limit');
|
||||
const { errorMiddleware } = require('./utils/errorHandler');
|
||||
const { responseMiddleware } = require('./utils/responseFormatter');
|
||||
|
||||
// Swagger 설정
|
||||
const swaggerUi = require('swagger-ui-express');
|
||||
const swaggerSpec = require('./config/swagger');
|
||||
|
||||
const app = express();
|
||||
|
||||
// 헬스체크와 개발용 엔드포인트는 CORS 이후에 등록
|
||||
@@ -322,6 +326,27 @@ app.use('/api/tools', toolsRoute);
|
||||
// 📤 파일 업로드
|
||||
app.use('/api', uploadBgRoutes);
|
||||
|
||||
// ===== 📚 Swagger API 문서 =====
|
||||
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec, {
|
||||
explorer: true,
|
||||
customCss: '.swagger-ui .topbar { display: none }',
|
||||
customSiteTitle: 'TK Work Management API',
|
||||
swaggerOptions: {
|
||||
persistAuthorization: true,
|
||||
displayRequestDuration: true,
|
||||
docExpansion: 'none',
|
||||
filter: true,
|
||||
showExtensions: true,
|
||||
showCommonExtensions: true
|
||||
}
|
||||
}));
|
||||
|
||||
// Swagger JSON 스펙 제공
|
||||
app.get('/api-docs.json', (req, res) => {
|
||||
res.setHeader('Content-Type', 'application/json');
|
||||
res.send(swaggerSpec);
|
||||
});
|
||||
|
||||
// ===== 🚨 에러 핸들러 (모든 라우트 뒤에 위치) =====
|
||||
app.use(errorMiddleware);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user