Skip to content

Commit

Permalink
11# [update]
Browse files Browse the repository at this point in the history
리뷰 삭제, 수정, 생성 리팩터링
  • Loading branch information
kokoa322 committed Jul 16, 2022
1 parent ee263f6 commit 060dea9
Show file tree
Hide file tree
Showing 5 changed files with 119 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,11 @@ public ResponseEntity<List<ReviewResponseDto>> getStoreReview(@PathVariable int
@PostMapping("/review")
public ResponseEntity<?> review(@ModelAttribute ReviewRequestDto reviewRequestDto,
@AuthenticationPrincipal User user) throws IOException {
if(user==null){
throw new IllegalArgumentException("해당하는 회원 정보가 없습니다.");
}


if(user==null){ throw new IllegalArgumentException("해당하는 회원 정보가 없습니다.");}
reviewService.review(reviewRequestDto, user.getUsername());

return new ResponseEntity<>(HttpStatus.OK);
}

Expand All @@ -54,7 +55,6 @@ public ResponseEntity<?> reviewUpdate(@ModelAttribute ReviewRequestDto reviewReq
@PathVariable int reviewId) throws IOException {

if(user==null){ throw new IllegalArgumentException("해당하는 회원 정보가 없습니다."); }

reviewService.reviewUpdate(reviewRequestDto, user.getUsername(), reviewId);

return new ResponseEntity<>(HttpStatus.OK);
Expand All @@ -66,7 +66,6 @@ public ResponseEntity<?> reviewDelete(@AuthenticationPrincipal User user,
@PathVariable int reviewId) throws IOException {

if(user==null){ throw new IllegalArgumentException("해당하는 회원 정보가 없습니다."); }

reviewService.reviewDelete(user.getUsername(), reviewId);

return new ResponseEntity<>(HttpStatus.OK);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
package com.mpnp.baechelin.review.repository;

import com.mpnp.baechelin.review.domain.Review;
import com.mpnp.baechelin.review.domain.ReviewImage;
import org.springframework.data.jpa.repository.JpaRepository;

public interface ReviewImageRepository extends JpaRepository<ReviewImage, Integer> {
void deleteAllByReviewId(Review review);

void deleteByReviewId(Review review);
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,5 @@
import java.util.Optional;

public interface ReviewRepository extends JpaRepository<Review, Integer> {

List<Review> findAllByStoreId(Store store);

}
162 changes: 101 additions & 61 deletions src/main/java/com/mpnp/baechelin/review/service/ReviewService.java
Original file line number Diff line number Diff line change
Expand Up @@ -30,108 +30,148 @@
@RequiredArgsConstructor
@Transactional
public class ReviewService {
private final ReviewRepository reviewRepository;
private final UserRepository userRepository;
private final StoreRepository storeRepository;
private final TagRepository tagRepository;
private final AwsS3Manager awsS3Manager;
private final TagRepository tagRepository;
private final UserRepository userRepository;
private final StoreRepository storeRepository;
private final ReviewRepository reviewRepository;
private final ReviewImageRepository reviewImageRepository;
private final AwsS3Manager awsS3Manager;



/** 리뷰 작성 */
public void review(ReviewRequestDto reviewRequestDto, String socialId) throws IOException {

int storeId = reviewRequestDto.getStoreId(); //리뷰 업장 ID
int storeId = reviewRequestDto.getStoreId();
Store store = storeRepository.findById(storeId).orElseThrow(() -> new IllegalArgumentException("해당하는 업장이 존재하지 않습니다."));
User user = userRepository.findBySocialId(socialId);
Review review = new Review(reviewRequestDto, store, user);


// todo 태크 매핑
List<Tag> tagList = new ArrayList<>();
for (String s : reviewRequestDto.getTagList()) {
System.out.println("tag --> "+ s);
tagList.add(new Tag(s, review));
} // 태그 -> 엔티티 변환


List<ReviewImage> reviewImageUrlList = new ArrayList<>();
List<MultipartFile> newReviewImage = reviewRequestDto.getImageFile();

for (MultipartFile reviewImage : reviewRequestDto.getImageFile()) {
reviewImageUrlList.add(ReviewImage.builder().reviewId(review).reviewImageUrl(awsS3Manager.uploadFile(reviewImage)).build());
} // 리뷰이미지 -> url -> 엔티티 변환

tagRepository.saveAll(tagList);
reviewImageRepository.saveAll(reviewImageUrlList);
// todo 이미지가 널값이 아니라면 업로드 실행
if(newReviewImage != null) {
for (MultipartFile reviewImageFile : newReviewImage) {
String fileDir = awsS3Manager.uploadFile(reviewImageFile);
log.info("upload --> "+ fileDir);
reviewImageUrlList.add(ReviewImage.builder().reviewId(review).reviewImageUrl(fileDir).build());
} // 리뷰이미지 -> url -> 엔티티 변환
}

reviewRepository.save(review);

storeRepository.save(store.updatePointAvg(reviewRequestDto.getPoint()));
tagRepository .saveAll(tagList);
reviewImageRepository.saveAll(reviewImageUrlList);
reviewRepository .save(review); // 아래의 {store.updatePointAvg()} 보다 리뷰가 먼저 처리되게 해야한다.
storeRepository.save(store.updatePointAvg(reviewRequestDto.getPoint())); //별점 평균 구하는 코드
}



public List<ReviewResponseDto> getReview(int storeId) {
Store store = storeRepository.findById(storeId).orElseThrow(() -> new IllegalArgumentException("해당 가게가 없습니다"));
return reviewRepository.findAllByStoreId(store)
.stream().map(ReviewResponseDto::new).collect(Collectors.toList());
}




/** 리뷰 수정 */
public void reviewUpdate(ReviewRequestDto reviewRequestDto, String socialId, int reviewId) throws IOException {

// int storeId = reviewRequestDto.getStoreId();
// User user = userRepository.findBySocialId(socialId); if(user == null){ new IllegalArgumentException("해당하는 소셜아이디를 찾을 수 없습니다."); }
// Store store = storeRepository.findById(storeId).orElseThrow(() -> new IllegalArgumentException("해당하는 업장이 존재하지 않습니다."));
// Review review = reviewRepository.findById(reviewId).orElseThrow(() -> new IllegalArgumentException("해당하는 리뷰가 없습니다."));
//
//
// // 리뷰이미지 변환
// List<MultipartFile> imageFileList = reviewRequestDto.getImageFile();
// List<ReviewImage> reviewImageUrlList = new ArrayList<>();
//
// if(imageFileList != null && review.getReviewImageList() != null) {
// int index = 0;
// for (MultipartFile reviewImage : imageFileList) {
// awsS3Manager.deleteFile(review.getReviewImageList().get(index).getReviewImageUrl());
// reviewImageUrlList.add(ReviewImage.builder().reviewImageUrl(awsS3Manager.uploadFile(reviewImage)).build());
// index++;
// }
// } else if(imageFileList != null && review.getReviewImageList() != null){
//
// }
//
//
// review.update(reviewRequestDto);
// List<Tag> tags = new ArrayList<>();
// List<String> tagList = reviewRequestDto.getTagList();
//
//
// if (tagList != null) {
// for (String tagObj : tagList) {
// Tag tag = new Tag(tagObj, review);
// review.addSingleTag(tag);
// tags.add(tag);
// }
// tagRepository.saveAll(tags);
// }
//
// reviewRepository.save(review); // 아래의 {store.updatePointAvg()} 보다 리뷰가 먼저 처리되게 해야한다.
// storeRepository .save(store.updatePointAvg(reviewRequestDto.getPoint()));
int storeId = reviewRequestDto.getStoreId();
User user = userRepository.findBySocialId(socialId); if(user == null){ new IllegalArgumentException("해당하는 소셜아이디를 찾을 수 없습니다."); }
Store store = storeRepository.findById(storeId) .orElseThrow(() -> new IllegalArgumentException("해당하는 업장이 존재하지 않습니다."));
Review review = reviewRepository.findById(reviewId) .orElseThrow(() -> new IllegalArgumentException("해당하는 리뷰가 없습니다."));


List<MultipartFile> newImageFileList = reviewRequestDto.getImageFile(); // 새로운 이미지 파일
List<ReviewImage> oldImageFileList = review.getReviewImageList(); // 기존에 이미지 파일
List<ReviewImage> reviewImageUrlList = new ArrayList<>(); // 이미지 파일을 담을 리스트


// todo 이미지 삭제 후 수정 작업 (1 -> 2)
// 1.기존리뷰에 기존 이미지가 있다면 삭제
if(oldImageFileList != null) {
for (ReviewImage reviewImage : oldImageFileList) {
System.out.println("check -> " + reviewImage.getReviewImageUrl());
System.out.println("delete -> " + reviewImage.getReviewImageUrl().substring(reviewImage.getReviewImageUrl().indexOf("com/") + 4));
awsS3Manager.deleteFile(reviewImage.getReviewImageUrl().substring(reviewImage.getReviewImageUrl().indexOf("com/") + 4));

}
reviewImageRepository.deleteByReviewId(review);
}


// 2.수정할 이미지가 있다면 업로드
if(newImageFileList != null) {
System.out.println("newImageFileList != null");
for (MultipartFile reviewImageFile : newImageFileList) {
String fileDir = awsS3Manager.uploadFile(reviewImageFile);
System.out.println("update --> " + fileDir);
reviewImageUrlList.add(ReviewImage.builder().reviewId(review).reviewImageUrl(fileDir).build());
} // 리뷰이미지 -> url -> 엔티티 변환
}


List<Tag> tagList = new ArrayList<>(); // 태그를 담는 리스트
List<String> newTagList = reviewRequestDto.getTagList(); // 새로운 태그


// todo 태그 수정 작업
List<Tag> oldTagList = tagRepository.findAllByReviewId(review);
System.out.println("log Tag SIZE --> "+ oldTagList.size());
// 1. 기존 태그 내용이 있다면 전체 삭제
if (oldTagList != null){
System.out.println("oldTagList != null");
tagRepository.deleteAByReviewId(review); }
// 2. 태그 내용이 있다면 태그 수정
if (newTagList != null) {
for (String newTag : newTagList) {
Tag tag = new Tag(newTag, review);
review.addSingleTag(tag);
tagList.add(tag);
}
tagRepository.saveAll(tagList);
}


review.update(reviewRequestDto);
reviewRepository.save(review); // 아래의 store.updatePointAvg() 보다 리뷰가 먼저 처리되게 해야한다.
storeRepository .save(store.updatePointAvg(reviewRequestDto.getPoint())); // 별점 평점 구하는 코드
reviewImageRepository.saveAll(reviewImageUrlList);
}

/** 리뷰 삭제 */
public void reviewDelete(String socialId, int reviewId) {

User user = userRepository.findBySocialId(socialId); // 유저 매핑
Optional<Review> review = reviewRepository.findById(reviewId); // 리뷰 매핑

User user = userRepository.findBySocialId(socialId);
Optional<Review> review = reviewRepository.findById(reviewId);
List<ReviewImage> imageList = review.get().getReviewImageList();

if(user == null){ new IllegalArgumentException("해당하는 소셜아이디를 찾을 수 없습니다."); } // 유저 유무 확인 예외처리
review.orElseThrow(() -> new IllegalArgumentException("해당하는 리뷰가 이미 삭제 되었습니다.")); // 리뷰 유무 확인 예외처리

// 1.유저 유무 예외처리 -> 2.리뷰 유무 예외처리
if(user == null){ new IllegalArgumentException("해당하는 소셜아이디를 찾을 수 없습니다."); }
review.orElseThrow(() -> new IllegalArgumentException("해당하는 리뷰가 이미 삭제 되었습니다."));

List<ReviewImage> imageList = review.get().getReviewImageList();


// 1.리뷰삭제 -> 2.이미지 삭제
reviewRepository.deleteById(review.get().getId());
if(!review.get().getReviewImageList().isEmpty()) {
// todo 1.리뷰삭제 -> 2.이미지 삭제
reviewRepository.deleteById(review.get().getId()); // 1
if(!review.get().getReviewImageList().isEmpty()) { // 2
for (ReviewImage reviewImage : imageList) {
System.out.println(reviewImage.getReviewImageUrl().substring(reviewImage.getReviewImageUrl().indexOf("com/")+4));
System.out.println("delete -> "+reviewImage.getReviewImageUrl().substring(reviewImage.getReviewImageUrl().indexOf("com/")+4));
awsS3Manager.deleteFile(reviewImage.getReviewImageUrl().substring(reviewImage.getReviewImageUrl().indexOf("com/")+4));
}
}
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/com/mpnp/baechelin/tag/repository/TagRepository.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,17 @@
package com.mpnp.baechelin.tag.repository;

import com.mpnp.baechelin.review.domain.Review;
import com.mpnp.baechelin.tag.domain.Tag;
import com.mpnp.baechelin.user.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
import java.util.Optional;

public interface TagRepository extends JpaRepository<Tag, Integer> {
void deleteAllByReviewId(Review review);

List<Tag> findAllByReviewId(Review review);

void deleteAByReviewId(Review review);
}

0 comments on commit 060dea9

Please sign in to comment.