Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE][Feat] : swagger 문서 작성 및 수정 #149

Merged
merged 2 commits into from
Nov 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions backend/src/routes/channelRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,32 @@ import { validationMiddleware } from '../middleware/validationMiddleware.js';

export const channelRouter = express.Router();

/**
* @swagger
* /channels:
* post:
* summary: 'Create a new channel'
* description: 'Create a new channel with guests and their respective locations and paths.'
* operationId: 'createChannel'
* requestBody:
* description: 'Channel data to be created'
* content:
* application/json:
* schema:
* $ref: '#/components/schemas/CreateChannelRequest'
* required: true
* responses:
* 201:
* description: 'Channel created successfully'
* content:
* application/json:
* schema:
* $ref: '#/components/schemas/CreateChannelResponse'
* 400:
* description: 'Invalid input data'
* 500:
* description: 'Server error'
*/
channelRouter.post(
'/',
[
Expand Down
211 changes: 205 additions & 6 deletions backend/swaggerConfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,40 +9,239 @@ const swaggerDefinition = {
},
servers: [
{
url: 'http://localhost:3001',
url: 'http://localhost:3001/api',
},
],
components: {
schemas: {
// 로그인 요청 스키마
LoginRequest: {
type: 'object',
properties: {
id: {
type: 'string',
description: 'User ID',
description: '사용자 ID',
},
password: {
type: 'string',
description: 'User password',
description: '사용자 비밀번호',
},
},
},
// 로그인 응답 스키마
LoginResponse: {
type: 'object',
properties: {
token: {
type: 'string',
description: 'Authentication token',
description: '인증 토큰',
},
userId: {
type: 'string',
description: 'User ID',
description: '사용자 ID',
},
},
},

// 채널 생성 요청 스키마
CreateChannelRequest: {
type: 'object',
properties: {
name: {
type: 'string',
description: '채널 이름',
},
host_id: {
type: 'string',
description: '채널의 호스트 ID (user 테이블의 ID)',
},
guests: {
type: 'array',
items: {
type: 'object',
properties: {
name: {
type: 'string',
description: '게스트의 이름',
},
start_location: {
type: 'object',
properties: {
lat: {
type: 'number',
description: '출발지 마커의 위도',
},
lng: {
type: 'number',
description: '출발지 마커의 경도',
},
},
},
end_location: {
type: 'object',
properties: {
lat: {
type: 'number',
description: '도착지 마커의 위도',
},
lng: {
type: 'number',
description: '도착지 마커의 경도',
},
},
},
path: {
type: 'array',
items: {
type: 'object',
properties: {
lat: {
type: 'number',
description: '경로 n번째 지점의 위도',
},
lng: {
type: 'number',
description: '경로 n번째 지점의 경도',
},
},
},
description: '해당 사용자의 경로 (위도, 경도)를 담은 배열',
},
marker_style: {
type: 'object',
properties: {
color: {
type: 'string',
description: '사용자 구분 색상 스타일',
},
},
},
},
},
description: '채널의 사용자 object를 담은 배열',
},
},
},

// 채널 생성 응답 스키마
CreateChannelResponse: {
type: 'object',
properties: {
id: {
type: 'string',
description: '생성된 채널의 고유 ID (UUID 형태)',
},
name: {
type: 'string',
description: '생성된 채널의 이름',
},
host_id: {
type: 'string',
description: '생성된 채널의 host ID (user 테이블의 ID)',
},
guests: {
type: 'array',
items: {
type: 'object',
properties: {
id: {
type: 'string',
description: '생성된 채널의 guest ID (UUID 타입)',
},
name: {
type: 'string',
description: '생성된 채널의 guest 이름',
},
},
},
description: '생성된 채널의 guest 배열',
},
created_at: {
type: 'string',
format: 'date-time',
description: '채널 생성 시각',
},
},
},
},
},
paths: {
'/auth/login': {
post: {
summary: '사용자 로그인 API',
description: '사용자가 로그인할 수 있도록 ID와 비밀번호를 통해 인증 후 토큰을 반환합니다.',
operationId: 'login',
requestBody: {
description: '로그인을 위한 ID와 비밀번호를 포함한 요청 body',
content: {
'application/json': {
schema: {
$ref: '#/components/schemas/LoginRequest',
},
},
},
required: true,
},
responses: {
200: {
description: '로그인 성공, 토큰 및 사용자 정보 반환',
content: {
'application/json': {
schema: {
$ref: '#/components/schemas/LoginResponse',
},
},
},
},
400: {
description: '잘못된 요청, 필수 정보 누락 또는 형식 오류',
},
401: {
description: '잘못된 ID나 비밀번호',
},
500: {
description: '서버 에러',
},
},
},
},
'/channel': {
post: {
summary: '새로운 채널 생성 API',
description: '채널 이름, 주인, 게스트 정보를 포함하여 채널을 생성합니다.',
operationId: 'createChannel',
requestBody: {
description: '채널 생성에 필요한 데이터',
content: {
'application/json': {
schema: {
$ref: '#/components/schemas/CreateChannelRequest',
},
},
},
required: true,
},
responses: {
201: {
description: '채널 생성 성공',
content: {
'application/json': {
schema: {
$ref: '#/components/schemas/CreateChannelResponse',
},
},
},
},
400: {
description: '입력 데이터 유효성 검증 실패',
},
500: {
description: '서버 에러',
},
},
},
},
},
paths: {},
};

const options = {
Expand Down
Loading