diff --git a/Dockerfile b/Dockerfile index 2a66d38..c9f3e2c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,4 +11,4 @@ RUN ./gradlew bootJar FROM openjdk:11 COPY --from=builder build/libs/*.jar app.jar ENTRYPOINT ["java","-jar","/app.jar"] -EXPOSE 9100 +EXPOSE 9100 \ No newline at end of file diff --git a/build.gradle b/build.gradle index 9b6bf04..583f8a6 100644 --- a/build.gradle +++ b/build.gradle @@ -37,6 +37,10 @@ dependencies { //yml 파일 암호화 implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.3' + //https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui + implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2' + implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2' + } tasks.named('test') { diff --git a/src/main/java/umc/spring/ringleader/Notice/DTO/NoticeRes.java b/src/main/java/umc/spring/ringleader/Notice/DTO/NoticeRes.java new file mode 100644 index 0000000..9ca5082 --- /dev/null +++ b/src/main/java/umc/spring/ringleader/Notice/DTO/NoticeRes.java @@ -0,0 +1,2 @@ +package umc.spring.ringleader.Notice.DTO;public class NoticeRes { +} diff --git a/src/main/java/umc/spring/ringleader/Notice/DTO/PostNoticeReq.java b/src/main/java/umc/spring/ringleader/Notice/DTO/PostNoticeReq.java new file mode 100644 index 0000000..881822c --- /dev/null +++ b/src/main/java/umc/spring/ringleader/Notice/DTO/PostNoticeReq.java @@ -0,0 +1,2 @@ +package umc.spring.ringleader.Notice.DTO;public class PostNoticeReq { +} diff --git a/src/main/java/umc/spring/ringleader/Notice/DTO/PostNoticeRes.java b/src/main/java/umc/spring/ringleader/Notice/DTO/PostNoticeRes.java new file mode 100644 index 0000000..e97a930 --- /dev/null +++ b/src/main/java/umc/spring/ringleader/Notice/DTO/PostNoticeRes.java @@ -0,0 +1,2 @@ +package umc.spring.ringleader.Notice.DTO;public class PostNoticeRes { +} diff --git a/src/main/java/umc/spring/ringleader/Notice/NoticeController.java b/src/main/java/umc/spring/ringleader/Notice/NoticeController.java new file mode 100644 index 0000000..5858df3 --- /dev/null +++ b/src/main/java/umc/spring/ringleader/Notice/NoticeController.java @@ -0,0 +1,2 @@ +package umc.spring.ringleader.Notice;public class NoticeController { +} diff --git a/src/main/java/umc/spring/ringleader/Notice/NoticeDao.java b/src/main/java/umc/spring/ringleader/Notice/NoticeDao.java new file mode 100644 index 0000000..b6574fc --- /dev/null +++ b/src/main/java/umc/spring/ringleader/Notice/NoticeDao.java @@ -0,0 +1,2 @@ +package umc.spring.ringleader.Notice;public class NoticeDao { +} diff --git a/src/main/java/umc/spring/ringleader/Notice/NoticeService.java b/src/main/java/umc/spring/ringleader/Notice/NoticeService.java new file mode 100644 index 0000000..2590cec --- /dev/null +++ b/src/main/java/umc/spring/ringleader/Notice/NoticeService.java @@ -0,0 +1,2 @@ +package umc.spring.ringleader.Notice;public class NoticeService { +} diff --git a/src/main/java/umc/spring/ringleader/config/BaseResponse.java b/src/main/java/umc/spring/ringleader/config/BaseResponse.java index 2e4d78f..16ddf9f 100644 --- a/src/main/java/umc/spring/ringleader/config/BaseResponse.java +++ b/src/main/java/umc/spring/ringleader/config/BaseResponse.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Getter; @@ -13,10 +14,17 @@ @JsonPropertyOrder({"isSuccess", "code", "message", "result"}) public class BaseResponse { + @ApiModelProperty(example = "메시지") @JsonProperty("isSuccess") private final Boolean isSuccess; + + @ApiModelProperty(example = "메시지") private final String message; + + @ApiModelProperty(example = "상태코드") private final int code; + + @ApiModelProperty(example = "응답데이터") @JsonInclude(JsonInclude.Include.NON_NULL) private T result; diff --git a/src/main/java/umc/spring/ringleader/config/BaseResponseStatus.java b/src/main/java/umc/spring/ringleader/config/BaseResponseStatus.java index 998bb2b..914de8e 100644 --- a/src/main/java/umc/spring/ringleader/config/BaseResponseStatus.java +++ b/src/main/java/umc/spring/ringleader/config/BaseResponseStatus.java @@ -24,18 +24,20 @@ public enum BaseResponseStatus { /** * 3000 : Review관련 오류 */ + REVIEW_POST_TITLE_IS_NULL(false,3001,"리뷰 제목은 필수 항목 입니다."), + REVIEW_POST_HASHTAG_IS_NULL(false,3002,"최소 1개 이상의 해시태그를 포함하여야 합니다"), + REVIEW_POST_CONTENT_IS_NULL(false,3003,"내용은 필수 항목 입니다."), - + REVIEW_POST_CATEGORY_IS_NULL(false,3004,"카테고리 선택은 필수 입니다."), /** * 5000 : Region관련 오류 */ - /** * 6000 : Database, Server 오류 */ - REVIEW_NULL(false,6001,"존재하지 않는 리뷰입니다"); + REVIEW_NULL(false, 6001, "존재하지 않는 리뷰입니다"); diff --git a/src/main/java/umc/spring/ringleader/config/SwaggerConfig.java b/src/main/java/umc/spring/ringleader/config/SwaggerConfig.java new file mode 100644 index 0000000..3d5e27b --- /dev/null +++ b/src/main/java/umc/spring/ringleader/config/SwaggerConfig.java @@ -0,0 +1,32 @@ +package umc.spring.ringleader.config; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@Configuration +@EnableSwagger2 +public class SwaggerConfig { + @Bean + public Docket restAPI() { + return new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo()) + .select() + .apis(RequestHandlerSelectors.basePackage("umc.spring.ringleader")) + .paths(PathSelectors.any()) + .build(); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("RingLeader Spring Boot REST API") + .version("1.0.0") + .description("골목대장의 swagger api 입니다.") + .build(); + } +} diff --git a/src/main/java/umc/spring/ringleader/login/DTO/PostLoginRes.java b/src/main/java/umc/spring/ringleader/login/DTO/PostLoginRes.java index a59ef7f..bef683f 100644 --- a/src/main/java/umc/spring/ringleader/login/DTO/PostLoginRes.java +++ b/src/main/java/umc/spring/ringleader/login/DTO/PostLoginRes.java @@ -3,11 +3,13 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; +import io.swagger.annotations.ApiModelProperty; @Getter @Setter @AllArgsConstructor public class PostLoginRes { + @ApiModelProperty(required = true) private int userId; } diff --git a/src/main/java/umc/spring/ringleader/login/DTO/PostSignupRes.java b/src/main/java/umc/spring/ringleader/login/DTO/PostSignupRes.java index e61888b..59cf717 100644 --- a/src/main/java/umc/spring/ringleader/login/DTO/PostSignupRes.java +++ b/src/main/java/umc/spring/ringleader/login/DTO/PostSignupRes.java @@ -3,11 +3,13 @@ import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; +import io.swagger.annotations.ApiModelProperty; @Getter @Setter @AllArgsConstructor public class PostSignupRes { + @ApiModelProperty(required = true) private int userId; } diff --git a/src/main/java/umc/spring/ringleader/login/LoginController.java b/src/main/java/umc/spring/ringleader/login/LoginController.java index 46a5a8f..d0dabee 100644 --- a/src/main/java/umc/spring/ringleader/login/LoginController.java +++ b/src/main/java/umc/spring/ringleader/login/LoginController.java @@ -11,6 +11,9 @@ import umc.spring.ringleader.login.DTO.PostSignupReq; import umc.spring.ringleader.login.DTO.PostSignupRes; import umc.spring.ringleader.login.DTO.PostUserDetailReq; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; @Slf4j @RestController @@ -34,6 +37,11 @@ public LoginController(LoginService loginService) { */ @ResponseBody @PostMapping("/login") + @ApiOperation(value = "로그인") + @ApiImplicitParams({ + @ApiImplicitParam(name = "email", required = true), + @ApiImplicitParam(name = "password", required = true) + }) public BaseResponse login(@RequestBody PostLoginReq postLoginReq) { log.info("[Login][POST] : 로그인 API / email = {}", postLoginReq.getEmail()); PostLoginRes postLoginRes = loginService.retrievePwdByEmail(postLoginReq); @@ -59,7 +67,14 @@ public BaseResponse login(@RequestBody PostLoginReq postLoginReq) */ @ResponseBody @PostMapping("/") - public BaseResponse signup(@RequestBody PostSignupReq postSignupReq) { + @ApiOperation(value = "회원가입") + @ApiImplicitParams({ + @ApiImplicitParam(name = "email", required = true), + @ApiImplicitParam(name = "password", required = true), + @ApiImplicitParam(name = "re-password", required = true), + @ApiImplicitParam(name = "nickname", required = false) + }) + public BaseResponse signup(@RequestBody PostSignupReq postSignupReq) { log.info("[Login][POST] : 회원가입 API / email = {}", postSignupReq.getEmail()); PostSignupRes postSignupRes = loginService.retrieveEmail(postSignupReq); return new BaseResponse<>(postSignupRes); @@ -82,6 +97,8 @@ public BaseResponse signup(@RequestBody PostSignupReq postSignupR */ @ResponseBody @PostMapping("/signup/{nickname}") + @ApiOperation(value = "회원가입시 Nickname 중복 검사") + @ApiImplicitParam(name = "nickname", required = true) public BaseResponse retrieveNickname(@RequestBody PostSignupReq postSignupReq) { return new BaseResponse<>(loginService.retrieveNickname(postSignupReq.getNickname())); } @@ -89,6 +106,12 @@ public BaseResponse retrieveNickname(@RequestBody PostSignupReq postSign @ResponseBody @PatchMapping("{userId}") + @ApiOperation(value = "User 정보 추가") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", required = true), + @ApiImplicitParam(name = "nickname", required = true), + @ApiImplicitParam(name = "imgUrl", required = true) + }) public BaseResponse addUserDetail(@RequestBody PostUserDetailReq req, @PathVariable int userId) { return new BaseResponse<>(loginService.saveUserDetail(userId, req)); } diff --git a/src/main/java/umc/spring/ringleader/region/RegionController.java b/src/main/java/umc/spring/ringleader/region/RegionController.java index e73d22c..7acf699 100644 --- a/src/main/java/umc/spring/ringleader/region/RegionController.java +++ b/src/main/java/umc/spring/ringleader/region/RegionController.java @@ -1,6 +1,8 @@ package umc.spring.ringleader.region; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; @@ -30,6 +32,8 @@ public class RegionController { * @return */ @GetMapping("/{userId}/list") + @ApiOperation(value = "User 별 Region 리스트업") + @ApiImplicitParam(name = "userId", required = true) public BaseResponse getRegionList(@PathVariable("userId") int userId) { log.info("[Region][GET] : Region 전체조회 / userId = {}", userId); GetRegionTotalRes getRegionTotalRes = regionService.getRegionList(userId); @@ -43,6 +47,8 @@ public BaseResponse getRegionList(@PathVariable("userId") int * @return */ @GetMapping("/{regionId}/detail") + @ApiOperation(value = "Region 세부사항") + @ApiImplicitParam(name = "regionId", required = true) public BaseResponse getRegionDetail(@PathVariable("regionId") int regionId) { log.info("[Region][GET] : Region 세부사항 / regionId = {}", regionId); GetRegionRes getRegionRes = regionService.getRegionDetail(regionId); @@ -50,6 +56,7 @@ public BaseResponse getRegionDetail(@PathVariable("regionId") int } @GetMapping("/ranking/list") + @ApiOperation(value = "Region 활성도 랭킹조회") public BaseResponse> getRegionListOrderByActivity() { log.info("[Region][GET] : Region 활성도 랭킹"); List regionOrderByActivity = regionService.getRegionOrderByActivity(); diff --git a/src/main/java/umc/spring/ringleader/region/dto/GetRegionListRes.java b/src/main/java/umc/spring/ringleader/region/dto/GetRegionListRes.java index dd4d3ed..5dcfa3c 100644 --- a/src/main/java/umc/spring/ringleader/region/dto/GetRegionListRes.java +++ b/src/main/java/umc/spring/ringleader/region/dto/GetRegionListRes.java @@ -1,5 +1,6 @@ package umc.spring.ringleader.region.dto; +import io.swagger.annotations.ApiModelProperty; import lombok.*; @Getter @@ -7,7 +8,12 @@ @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class GetRegionListRes { + @ApiModelProperty(example = "Region ID") private int regionId; + + @ApiModelProperty(example = "Region 이름") private String placeName; + + @ApiModelProperty(example = "Region 활성도") private int regionActivity; } diff --git a/src/main/java/umc/spring/ringleader/region/dto/GetRegionRes.java b/src/main/java/umc/spring/ringleader/region/dto/GetRegionRes.java index 8993ccb..3eb7ba2 100644 --- a/src/main/java/umc/spring/ringleader/region/dto/GetRegionRes.java +++ b/src/main/java/umc/spring/ringleader/region/dto/GetRegionRes.java @@ -1,5 +1,6 @@ package umc.spring.ringleader.region.dto; +import io.swagger.annotations.ApiModelProperty; import lombok.*; @Getter @@ -7,10 +8,21 @@ @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class GetRegionRes { + @ApiModelProperty(example = "Region ID") private int regionId; + + @ApiModelProperty(example = "Region 활성도") private int regionActivity; + + @ApiModelProperty(example = "Region 이름") private String placeName; + + @ApiModelProperty(example = "Region 이미지") private String image; + + @ApiModelProperty(example = "Region 위치정보") private String location; + + @ApiModelProperty(example = "Region 상세정보") private String regionInfo; } diff --git a/src/main/java/umc/spring/ringleader/region/dto/GetRegionTotalRes.java b/src/main/java/umc/spring/ringleader/region/dto/GetRegionTotalRes.java index 7e5c85a..230610c 100644 --- a/src/main/java/umc/spring/ringleader/region/dto/GetRegionTotalRes.java +++ b/src/main/java/umc/spring/ringleader/region/dto/GetRegionTotalRes.java @@ -1,5 +1,6 @@ package umc.spring.ringleader.region.dto; +import io.swagger.annotations.ApiModelProperty; import lombok.*; import java.util.List; @@ -9,6 +10,9 @@ @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class GetRegionTotalRes { + @ApiModelProperty(example = "최근 방문 Region") GetRegionListRes lastVisitRegion; + + @ApiModelProperty(example = "나머지 Region") List listRegion; } diff --git a/src/main/java/umc/spring/ringleader/review/model/dto/PostReviewBookmark.java b/src/main/java/umc/spring/ringleader/review/model/dto/PostReviewBookmark.java index 35ca065..a70c96f 100644 --- a/src/main/java/umc/spring/ringleader/review/model/dto/PostReviewBookmark.java +++ b/src/main/java/umc/spring/ringleader/review/model/dto/PostReviewBookmark.java @@ -1,5 +1,6 @@ package umc.spring.ringleader.review.model.dto; +import io.swagger.annotations.ApiModelProperty; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Getter; @@ -11,6 +12,8 @@ @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class PostReviewBookmark { + @ApiModelProperty(required = true) private int userId; + @ApiModelProperty(required = true) private int reviewId; } diff --git a/src/main/java/umc/spring/ringleader/review/model/dto/PostReviewReq.java b/src/main/java/umc/spring/ringleader/review/model/dto/PostReviewReq.java index 96d9b40..8147491 100644 --- a/src/main/java/umc/spring/ringleader/review/model/dto/PostReviewReq.java +++ b/src/main/java/umc/spring/ringleader/review/model/dto/PostReviewReq.java @@ -1,5 +1,6 @@ package umc.spring.ringleader.review.model.dto; +import io.swagger.annotations.ApiModelProperty; import lombok.*; import java.util.List; @@ -9,12 +10,19 @@ @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class PostReviewReq { + @ApiModelProperty(required = true) private int userId; + @ApiModelProperty(required = true, example = "맛있는 음식점") private String title; + + @ApiModelProperty(required = true, example = "음식점") private String category; + @ApiModelProperty(required = true, example = "한식") private String hashtag1; private String hashtag2; private String hashtag3; + + @ApiModelProperty(required = true) private String contents; private int regionId; private List postImages; diff --git a/src/main/java/umc/spring/ringleader/review/web/ReviewController.java b/src/main/java/umc/spring/ringleader/review/web/ReviewController.java index 6dcdece..77d5d36 100644 --- a/src/main/java/umc/spring/ringleader/review/web/ReviewController.java +++ b/src/main/java/umc/spring/ringleader/review/web/ReviewController.java @@ -15,6 +15,10 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import umc.spring.ringleader.config.BaseException; import umc.spring.ringleader.config.BaseResponse; @@ -39,6 +43,8 @@ public ReviewController(ReviewService reviewService) { * @param postReviewReq * @return PostReviewRes */ + @ApiOperation(value = "Review 등록") + @ApiParam(name = "리뷰 정보", required = true) @ResponseBody @PostMapping("/") public BaseResponse addPost(@RequestBody PostReviewReq postReviewReq) { @@ -50,15 +56,21 @@ public BaseResponse addPost(@RequestBody PostReviewReq postReview 1. Title 2. hashTag1 3. contents + 4. category */ - - // if (reviewPostReq.getTitle() == null) { - // return new BaseResponse<>(); - // } else if (reviewPostReq.getHashtag1() == null) { - // return new BaseResponse<>(); - // } else if (reviewPostReq.getContents() == null) { - // return new BaseResponse<>(); - // } + try { + if (postReviewReq.getTitle() == null) { + throw new BaseException(REVIEW_POST_TITLE_IS_NULL); + } else if (postReviewReq.getHashtag1() == null) { + throw new BaseException(REVIEW_POST_HASHTAG_IS_NULL); + } else if (postReviewReq.getContents() == null) { + throw new BaseException(REVIEW_POST_CONTENT_IS_NULL); + } else if (postReviewReq.getCategory() == null) { + throw new BaseException(REVIEW_POST_CONTENT_IS_NULL); + } + } catch (BaseException e) { + return new BaseResponse<>(e.getStatus()); + } PostReviewRes res = reviewService.saveReview(postReviewReq); return new BaseResponse<>(res); @@ -70,6 +82,8 @@ public BaseResponse addPost(@RequestBody PostReviewReq postReview * @param reviewId reviewId에 해당하는 이미지도 모두 삭제 * @return */ + @ApiOperation(value = "Review ID로 리뷰 삭제") + @ApiImplicitParam(name = "reviewId", required = true) @ResponseBody @DeleteMapping("/delete/{reviewId}") public BaseResponse deletePost(@PathVariable int reviewId) { @@ -94,11 +108,16 @@ public BaseResponse deletePost(@PathVariable int reviewId) { * @param loginUserId (Nullable) * @return */ + @ApiOperation(value = "Region ID로 리뷰 조회") + @ApiImplicitParams({ + @ApiImplicitParam(name = "regionId", required = true), + @ApiImplicitParam(name = "loginUserId", required = false) + }) @ResponseBody @GetMapping("/{regionId}") public BaseResponse> getRegionReviewsLately( - @PathVariable int regionId, - @RequestParam(required = false) Integer loginUserId + @PathVariable int regionId, + @RequestParam(required = false) Integer loginUserId ) { log.info("[Review][GET] : RegionId로 리뷰 조회 (최신순으로 정렬) / regionId = {}", regionId); log.info("[Review][GET] : 로그인 유저 / category = {}", loginUserId); @@ -120,13 +139,27 @@ public BaseResponse> getRegionReviewsLately( * @param loginUserId (Nullable, Login하지 않은 회원에 대해서) * @return */ + @ApiOperation(value = "RegionId, Category로 리뷰 조회") + @ApiImplicitParams({ + @ApiImplicitParam(name = "category", required = true), + @ApiImplicitParam(name = "regionId", required = true), + @ApiImplicitParam(name = "loginUserId", required = false) + }) @ResponseBody @GetMapping("/{regionId}/category") public BaseResponse> getRegionReviewsByCategory( - @RequestParam String category, - @PathVariable Integer regionId, - @RequestParam(required = false) Integer loginUserId + @RequestParam String category, + @PathVariable Integer regionId, + @RequestParam(required = false) Integer loginUserId ) { + + try { + if (category == null) { + throw new BaseException(REVIEW_POST_CATEGORY_IS_NULL); + } + } catch (BaseException e) { + return new BaseResponse<>(e.getStatus()); + } log.info("[Review][GET] : category필터 추가하여 리뷰 조회 / category = {} ,regionId = {}", category, regionId); log.info("[Review][GET] : 로그인 유저 / category = {}", loginUserId); @@ -143,12 +176,18 @@ public BaseResponse> getRegionReviewsByCategory( * @param loginUserId (Nullable, Login하지 않은 회원에 대해서) * @return */ + @ApiOperation(value = "해당 사용자가 작성한 리뷰 중 지역별로 조회") + @ApiImplicitParams({ + @ApiImplicitParam(name = "userId", required = true), + @ApiImplicitParam(name = "regionId", required = true), + @ApiImplicitParam(name = "loginUserId", required = false) + }) @ResponseBody @GetMapping("/profile/{userId}") - public BaseResponse> getRegionReviewsByCategory( - @PathVariable int userId, - @RequestParam Integer regionId, - @RequestParam(required = false) Integer loginUserId + public BaseResponse> getUserRegionReviews( + @PathVariable int userId, + @RequestParam Integer regionId, + @RequestParam(required = false) Integer loginUserId ) { log.info("[Review][GET] : 해당 User의 지역별 Review조회 / userId = {} ,regionId = {}", userId, regionId); log.info("[Review][GET] : 로그인 유저 / category = {}", loginUserId); @@ -164,20 +203,24 @@ public BaseResponse> getRegionReviewsByCategory( * @param req * @return */ + @ApiOperation(value = "사용자(UserId)가 리뷰(ReviewId)의 북마크 버튼을 눌렀을 때, 처리하는 API") @ResponseBody @PostMapping("/bookmark") public BaseResponse updateReviewToBookmark(@RequestBody PostReviewBookmark req) { log.info( - "[Review][POST] : 해당 User가 해당 Review에 북마크 버튼 클릭 / userId = {}, reviewId = {}", - req.getUserId(), req.getReviewId() + "[Review][POST] : 해당 User가 해당 Review에 북마크 버튼 클릭 / userId = {}, reviewId = {}", + req.getUserId(), req.getReviewId() ); String updateResultMessage = reviewService.updateReviewToBookmark(req); return new BaseResponse<>(updateResultMessage); } + @ApiOperation(value = "리뷰(ReviewId) 상세 조회") + @ApiImplicitParam(name = "reviewId", required = true) @GetMapping("/details/{reviewId}/") - public BaseResponse gerReviewByReviewId(@PathVariable int reviewId,@RequestParam(required = false) Integer loginUserId) { + public BaseResponse getReviewByReviewId(@PathVariable int reviewId, + @RequestParam(required = false) Integer loginUserId) { log.info("[Review][GET] : 해당 User의 지역별 Review조회 / userId = {}, reviewId = {} ", loginUserId, reviewId); ReviewRes reviewByReviewId = reviewService.getReviewByReviewId(loginUserId, reviewId); return new BaseResponse<>(reviewByReviewId);