Skip to content

Commit

Permalink
#33 [Add] Exception, Bean Validation
Browse files Browse the repository at this point in the history
  • Loading branch information
JSoi committed Aug 5, 2022
1 parent ecd8717 commit 4792a71
Show file tree
Hide file tree
Showing 10 changed files with 58 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import org.springframework.security.core.userdetails.User;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

@RequiredArgsConstructor
Expand All @@ -30,7 +31,7 @@ public class FolderController {

/** 폴더 신규 생성 */
@PostMapping("/folder")
public SuccessResponse folder (@RequestBody FolderRequestDto folderRequestDto,
public SuccessResponse folder (@RequestBody @Valid FolderRequestDto folderRequestDto,
@AuthenticationPrincipal User user){
if(user==null){
throw new CustomException(ErrorCode.NO_USER_FOUND);
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/mpnp/baechelin/bookmark/domain/Folder.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
import com.mpnp.baechelin.user.domain.User;
import com.mpnp.baechelin.util.TimeStamped;
import lombok.*;
import org.hibernate.validator.constraints.Length;

import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.List;

Expand All @@ -28,6 +30,8 @@ public class Folder extends TimeStamped {
private User userId;

@Column(nullable = false)
@Length(max = 15, message = "15자 이하로 입력해 주세요")
@NotBlank(message = "빈 칸을 입력하지 마세요")
private String folderName;

@JsonIgnore
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,19 @@
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;

@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Valid
public class FolderRequestDto {

@Length(max = 15, message = "15자 이하로 입력해 주세요")
@NotBlank(message = "빈 칸을 입력하지 마세요")
private String folderName;
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package com.mpnp.baechelin.exception;

import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindException;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import javax.validation.ConstraintViolationException;
import java.util.List;

@RestControllerAdvice
@Slf4j
public class BeanValidationException {
// Bean Validation ExceptionHandler
@ExceptionHandler(ConstraintViolationException.class)
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/mpnp/baechelin/exception/ErrorCode.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public enum ErrorCode {
NO_USER_FOUND(500, "E-NUF", "유저가 존재하지 않습니다."),
NO_REVIEW_FOUND(500, "E-NRF", "리뷰가 존재하지 않습니다."),
BAD_IMAGE_INPUT(400, "E-BII", "올바르지 않은 이미지 형식입니다"),
IMAGE_SIZE_EXCESS(400, "E-ISE", "이미지 크기(3MB)를 초과했습니다.")
IMAGE_SIZE_EXCESS(400, "E-ISE", "이미지 크기(3MB)를 초과했습니다."),
;

private final int status;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import javax.validation.ConstraintViolationException;
import java.time.LocalDateTime;
import java.util.Map;

@Getter
@Builder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,34 @@
import com.mpnp.baechelin.common.SuccessResponse;
import com.mpnp.baechelin.exception.CustomException;
import com.mpnp.baechelin.exception.ErrorCode;
import com.mpnp.baechelin.review.domain.Review;
import com.mpnp.baechelin.exception.ErrorResponse;
import com.mpnp.baechelin.review.dto.PageInfoResponseDto;
import com.mpnp.baechelin.review.dto.ReviewMainResponseDto;
import com.mpnp.baechelin.review.dto.ReviewRequestDto;
import com.mpnp.baechelin.review.dto.ReviewResponseDto;
import com.mpnp.baechelin.review.repository.ReviewQueryRepository;
import com.mpnp.baechelin.review.repository.ReviewRepository;
import com.mpnp.baechelin.review.service.ReviewService;
import com.mpnp.baechelin.store.domain.Store;
import com.mpnp.baechelin.store.repository.StoreRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.data.domain.Page;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.web.PageableDefault;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.core.userdetails.User;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.annotation.MultipartConfig;
import javax.validation.Valid;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import java.util.Map;

@RestController
@RequiredArgsConstructor
@Slf4j
public class ReviewController {

private final ReviewService reviewService;
Expand Down Expand Up @@ -64,27 +61,29 @@ public ResponseEntity<PageInfoResponseDto> getStoreReview(@PathVariable int stor
* 리뷰 작성
*/
@PostMapping("/review")
public SuccessResponse review(@ModelAttribute ReviewRequestDto reviewRequestDto,
public ResponseEntity<?> review(@ModelAttribute @Valid ReviewRequestDto reviewRequestDto,
BindingResult bindingResult,
@AuthenticationPrincipal User user) throws IOException {
if (user == null) {
throw new CustomException(ErrorCode.ACCESS_DENIED);
}
reviewService.review(reviewRequestDto, user.getUsername());
return new SuccessResponse("리뷰 등록 성공");
return ResponseEntity.ok("리뷰 등록 성공");
}

/**
* 리뷰 수정
*/
@PatchMapping("/review/{reviewId}")
public SuccessResponse reviewUpdate(@ModelAttribute ReviewRequestDto reviewRequestDto,
@AuthenticationPrincipal User user,
@PathVariable int reviewId) {
public ResponseEntity<?> reviewUpdate(@ModelAttribute @Valid ReviewRequestDto reviewRequestDto,
BindingResult bindingResult,
@AuthenticationPrincipal User user,
@PathVariable int reviewId) {
if (user == null) {
throw new CustomException(ErrorCode.ACCESS_DENIED);
}
reviewService.reviewUpdate(reviewRequestDto, user.getUsername(), reviewId);
return new SuccessResponse("리뷰 수정 성공");
return ResponseEntity.ok("리뷰 수정 성공");
}


Expand All @@ -103,14 +102,14 @@ public SuccessResponse reviewUpdate(@ModelAttribute ReviewRequestDto reviewReque
* 리뷰 삭제
*/
@DeleteMapping("/review/{reviewId}")
public SuccessResponse reviewDelete(@AuthenticationPrincipal User user,
public ResponseEntity<?> reviewDelete(@AuthenticationPrincipal User user,
@PathVariable int reviewId) {

if (user == null) {
throw new CustomException(ErrorCode.ACCESS_DENIED);
}
reviewService.reviewDelete(user.getUsername(), reviewId);
return new SuccessResponse("리뷰 삭제 완료");
return ResponseEntity.ok("리뷰 삭제 성공");
}

// 반경 넓히기
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/com/mpnp/baechelin/review/domain/Review.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
import com.mpnp.baechelin.user.domain.User;
import com.mpnp.baechelin.util.TimeStamped;
import lombok.*;
import org.hibernate.validator.constraints.Length;

import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
Expand All @@ -26,6 +28,8 @@ public class Review extends TimeStamped {
private int id;

//평가(댓글)내용
@NotBlank(message = "내용을 입력해주세요")
@Length(min = 20, max = 200, message = "20자 이상, 200자 이하로 작성해주세요")
@Column(nullable = false)
private String content;

Expand Down
19 changes: 11 additions & 8 deletions src/main/java/com/mpnp/baechelin/review/dto/ReviewRequestDto.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package com.mpnp.baechelin.review.dto;

import com.mpnp.baechelin.exception.CustomException;
import com.mpnp.baechelin.exception.ErrorCode;
import lombok.*;
import org.hibernate.validator.constraints.Length;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.multipart.MultipartFile;

Expand All @@ -12,21 +16,20 @@
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Size;
import java.util.List;
import java.util.Optional;


@Getter @Setter
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Valid
public class ReviewRequestDto {
//review 테이블 컬럼
private long storeId; //업장 아이디
@NotBlank(message = "내용을 입력해주세요")
@Length(min = 20, max = 200, message = "20자 이상, 200자 이하로 작성해주세요")
private String content; //리뷰 코멘트
private double point; //별점
private List<String> tagList; //태그
private long storeId; //업장 아이디
private String content; //리뷰 코멘트
private double point; //별점
private List<String> tagList; //태그
private List<MultipartFile> imageFile; //리뷰 이미지 사진

public List<String> Tags() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.validation.BindingResult;
import org.springframework.web.multipart.MultipartFile;

import javax.transaction.Transactional;
Expand Down Expand Up @@ -51,11 +52,9 @@ public class ReviewService {
* 리뷰 작성
*/
public void review(ReviewRequestDto reviewRequestDto, String socialId) throws IOException {


for(String tag: reviewRequestDto.getTagList()){
for(String tagsList: reviewRequestDto.Tags()){
if(tag != tagsList){
for (String tag : reviewRequestDto.getTagList()) {
for (String tagsList : reviewRequestDto.Tags()) {
if (tag != tagsList) {
new Exception("해당 태그명으로 리뷰 등록할 수 없습니다");
}
}
Expand Down

0 comments on commit 4792a71

Please sign in to comment.