diff --git a/src/controllers/ReviewController.ts b/src/controllers/ReviewController.ts index 527a185..4f8d481 100644 --- a/src/controllers/ReviewController.ts +++ b/src/controllers/ReviewController.ts @@ -1,4 +1,6 @@ import { Request, Response } from 'express'; +import { validationResult } from 'express-validator'; +import { ReviewCreateDto } from '../interfaces/review/ReviewCreateDto'; import message from '../modules/responseMessage'; import statusCode from '../modules/statusCode'; import util from '../modules/util'; @@ -17,6 +19,26 @@ const getReviewList = async (req: Request, res: Response): Promise => { + const error = validationResult(req); + if (!error.isEmpty()) { + return res.status(statusCode.BAD_REQUEST).send(util.fail(statusCode.BAD_REQUEST, message.BAD_REQUEST)); + } + + const reviewCreateDto: ReviewCreateDto = req.body; + try { + const data = await ReviewService.createReview(reviewCreateDto); + if (!data) { + res.status(statusCode.NOT_FOUND).send(util.fail(statusCode.NOT_FOUND, message.NOT_FOUND)); + } + res.status(statusCode.CREATED).send(util.success(statusCode.CREATED, message.CREATE_REVIEW_SUCCESS, data)); + } catch (error) { + console.log(error); + res.status(statusCode.INTERNAL_SERVER_ERROR).send(util.fail(statusCode.INTERNAL_SERVER_ERROR, message.INTERNAL_SERVER_ERROR)); + } +}; + export default { getReviewList, + createReview, }; diff --git a/src/interfaces/review/ReviewCreateDto.ts b/src/interfaces/review/ReviewCreateDto.ts new file mode 100644 index 0000000..c20dc0a --- /dev/null +++ b/src/interfaces/review/ReviewCreateDto.ts @@ -0,0 +1,3 @@ +import { ReviewInfo } from './ReviewInfo'; + +export interface ReviewCreateDto extends ReviewInfo {} diff --git a/src/modules/responseMessage.ts b/src/modules/responseMessage.ts index 3754ac4..0ece097 100644 --- a/src/modules/responseMessage.ts +++ b/src/modules/responseMessage.ts @@ -5,6 +5,8 @@ const message = { INTERNAL_SERVER_ERROR: '서버 내부 오류', READ_MAINPAGE_REVIEW_SUCCESS: '메인 페이지 리뷰 조회 성공', + CREATE_REVIEW_SUCCESS: '리뷰 등록 성공', + READ_SUBSCRIBE_OPTION_SUCCESS: '라면 구독 옵션 조회 성공', }; diff --git a/src/routes/ReviewRouter.ts b/src/routes/ReviewRouter.ts index 0029a7d..fd6e9b2 100644 --- a/src/routes/ReviewRouter.ts +++ b/src/routes/ReviewRouter.ts @@ -1,8 +1,10 @@ import { Router } from 'express'; +import { body } from 'express-validator'; import { ReviewController } from '../controllers'; const router: Router = Router(); router.get('/', ReviewController.getReviewList); +router.post('/', [body('userName').notEmpty(), body('description').notEmpty(), body('rates').notEmpty(), body('packageName').notEmpty(), body('product').notEmpty()], ReviewController.createReview); export default router; diff --git a/src/services/ReviewService.ts b/src/services/ReviewService.ts index e0cc8d1..6ba313b 100644 --- a/src/services/ReviewService.ts +++ b/src/services/ReviewService.ts @@ -1,3 +1,5 @@ +import { PostBaseResponseDto } from '../interfaces/common/PostBaseResponseDto'; +import { ReviewCreateDto } from '../interfaces/review/ReviewCreateDto'; import { ReviewResponseDto } from '../interfaces/review/ReviewResponseDto'; import Review from '../models/Review'; @@ -28,6 +30,23 @@ const getReviewList = async (): Promise => { } }; +const createReview = async (reviewCreateDto: ReviewCreateDto): Promise => { + try { + const review = new Review(reviewCreateDto); + await review.save(); + + const data = { + _id: review._id, + }; + + return data; + } catch (error) { + console.log(error); + throw error; + } +}; + export default { getReviewList, + createReview, };