diff --git a/src/router/auth/index.js b/src/router/auth/index.js index 0498ea2..89da3da 100644 --- a/src/router/auth/index.js +++ b/src/router/auth/index.js @@ -5,16 +5,38 @@ import controllers from './controllers' const router = Router() +/** + * 디미고 계정 정보를 받아 에코를 가입합니다. + * @route POST /auth/join + * @group Auth - 인증 관련 메소드 + * @returns {object} 200 - 사용자 정보 + * @returns {Error} 401 - 일치하는 계정이 디미고 API에 존재하지 않습니다. + */ router.post('/join', [ check('username').isString().not().isEmpty(), check('password').isString().not().isEmpty() ], checkValidation, controllers.Join) +/** + * 디미고 계정 정보를 받아 에코에서의 토큰을 발행합니다. + * @route POST /auth/login + * @group Auth - 인증 관련 메소드 + * @returns {object} 200 - Access 토큰과 Refresh 토큰을 반환합니다. + * @returns {Error} 401 - 일치하는 에코 계정 정보가 존재하지 않습니다. + * @returns {Error} 409 - 이미 가입된 계정입니다. + */ router.post('/login', [ check('username').isString().not().isEmpty(), check('password').isString().not().isEmpty() ], checkValidation, controllers.Login) +/** + * Refresh 토큰으로 새로운 Access 토큰과 Refresh 토큰을 발행합니다. + * @route POST /auth/refresh + * @group Auth - 인증 관련 메소드 + * @returns {object} 200 - Access 토큰과 Refresh 토큰을 반환합니다. + * @returns {Error} 401 - 토큰이 Refresh 용이 아니거나 인증에 실패했습니다. + */ router.post('/refresh', controllers.Refresh) export default router diff --git a/src/router/comment/index.js b/src/router/comment/index.js index f9342cf..06db53b 100644 --- a/src/router/comment/index.js +++ b/src/router/comment/index.js @@ -11,15 +11,38 @@ const router = Router() router.get('/:userId', (req, res, next) => {}) +/** + * 새로운 댓글을 생성합니다 + * @route POST /comment + * @group Comment - 댓글 관련 메소드 + * @returns {object} 200 - 생성한 댓글을 반환합니다. + * @returns {Error} 404 - 대상 게시물이 존재하지 않습니다. + */ router.post('/', [ check('content').isString().not().isEmpty(), check('target').custom(isObjectId) ], checkValidation, needAuthorization, controllers.CreateComment) +/** + * 댓글을 삭제합니다. + * @route DELETE /comment/:commentId + * @group Comment - 댓글 관련 메소드 + * @returns {null} 204 - 댓글이 정상적으로 삭제되었습니다. + * @returns {Error} 403 - 권한이 없습니다. + * @returns {Error} 404 - 댓글이 존재하지 않습니다. + */ router.delete('/:commentId', [ check('commentId').custom(isObjectId) ], checkValidation, needAuthorization, controllers.DeleteComment) +/** + * 댓글을 수정합니다. + * @route PUT /comment/:commentId + * @group Comment - 댓글 관련 메소드 + * @returns {null} 200 - 수정된 댓글을 반환합니다. + * @returns {Error} 403 - 권한이 없습니다. + * @returns {Error} 404 - 댓글이 존재하지 않습니다. + */ router.put('/:commentId', [ check('commentId').custom(isObjectId), check('content').isString().not().isEmpty() diff --git a/src/router/post/index.js b/src/router/post/index.js index 15b7ccd..172222b 100644 --- a/src/router/post/index.js +++ b/src/router/post/index.js @@ -12,11 +12,25 @@ router.get('/brief', (req, res, next) => {}) router.get('/start/:startPage/end/:endPage', (req, res, next) => {}) +/** + * 새로운 게시물을 생성합니다 + * @route POST /post + * @group Post - 게시물 관련 메소드 + * @returns {object} 200 - 생성한 게시물을 반환합니다. + */ router.post('/', [ check('title').isString().not().isEmpty(), check('content').isString().not().isEmpty() ], checkValidation, needAuthorization, controllers.CreatePost) +/** + * 게시물을 삭제합니다. + * @route DELETE /post/:postId + * @group Post - 게시물 관련 메소드 + * @returns {object} 204 - 게시물이 정상적으로 삭제되었습니다. + * @returns {Error} 403 - 권한이 없습니다. + * @returns {Error} 404 - 댓글이 존재하지 않습니다. + */ router.delete('/:postId', needAuthorization, controllers.DeletePost) router.put('/:postId', (req, res, next) => {}) diff --git a/src/router/subscription/index.js b/src/router/subscription/index.js index 57df16c..7cdeccb 100644 --- a/src/router/subscription/index.js +++ b/src/router/subscription/index.js @@ -9,10 +9,26 @@ import { const router = Router() +/** + * 태그를 구독합니다 + * @route POST /subscription/:tagId + * @group Subscription - 구독 관련 메소드 + * @returns {object} - 생성한 구독 모델을 반환합니다. + * @returns {Error} 403 - 권한이 없습니다. + * @returns {Error} 404 - 태그가 존재하지 않습니다. + * @returns {Error} 409 - 이미 구독한 태그입니다. + */ router.post('/:tagId', [ check('tagId').custom(isObjectId) ], checkValidation, needAuthorization, controllers.CreateSubscription) +/** + * 태그의 구독을 취소합니다 + * @route DELETE /subscription/:tagId + * @group Subscription - 구독 관련 메소드 + * @returns {object} 204 - 구독이 정상적으로 취소되었습니다. + * @returns {Error} 404 - 구독하지 않은 태그입니다. + */ router.delete('/:subscriptionId', [ check('subscriptionId').custom(isObjectId) ], checkValidation, needAuthorization, controllers.CancelSubscription) diff --git a/src/router/tag/index.js b/src/router/tag/index.js index fadfdf1..a07101d 100644 --- a/src/router/tag/index.js +++ b/src/router/tag/index.js @@ -8,14 +8,34 @@ import { const router = Router() +/** + * 자신이 볼 수 있는 태그를 모두 반환합니다. + * @route GET /tag + * @group Tag - 태그 관련 메소드 + * @returns {object} - 모든 태그를 반환합니다. + */ router.get('/', needAuthorization, controllers.GetAllTags) +/** + * 새로운 태그를 생성합니다. + * @route POST /tag + * @group Tag - 태그 관련 메소드 + * @returns {object} - 새로운 태그를 반환합니다. + */ router.post('/', [ check('name').isString().not().isEmpty(), check('description').isString().not().isEmpty(), check('joinOption').isIn(['P', 'R', 'O']) ], checkValidation, needAuthorization, controllers.CreateTag) +/** + * 태그를 삭제합니다. + * @route DELETE /tag + * @group Tag - 태그 관련 메소드 + * @returns {object} 204 - 태그를 정상적으로 삭제했습니다. + * @returns {Error} 403 - 권한이 없습니다. + * @returns {Error} 404 - 존재하지 않는 태그입니다. + */ router.delete('/:tagId', needAuthorization, controllers.DeleteTag) router.put('/:tagId', (req, res, next) => {}) diff --git a/swagger.json b/swagger.json index a04c029..d39fb42 100644 --- a/swagger.json +++ b/swagger.json @@ -9,7 +9,7 @@ "produces": [ "application/json" ], - "schemes": ["https"], + "schemes": ["http", "https"], "securityDefinitions": { "JWT": { "type": "apiKey",