Skip to content

Commit

Permalink
#28 [update]
Browse files Browse the repository at this point in the history
북마크 조회 리팩토링,
  • Loading branch information
kokoa322 committed Jul 29, 2022
1 parent b242e1a commit 6152d96
Show file tree
Hide file tree
Showing 7 changed files with 242 additions and 80 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ public BookmarkInfoDto(Bookmark bookmark){
this.bookmarkId = bookmark.getId();
this.storeId = (int) bookmark.getStoreId().getId();

if(bookmark.getStoreId().getStoreImageList() == null) {
if(!bookmark.getStoreId().getStoreImageList().isEmpty()) {
this.storeImageList = bookmark.getStoreId().getStoreImageList().get(0).getStoreImageUrl();

} else if(bookmark.getStoreId().getStoreImageList() != null) {
} else if(bookmark.getStoreId().getStoreImageList().isEmpty()) {
this.storeImageList = "";
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;

import javax.transaction.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -56,6 +57,7 @@ public void bookmarkDelete(int bookmarkId, String socialId) {

}

@Transactional
public List<BookmarkInfoDto> bookmarkTop(String socialId, Pageable pageable) {

User user = userRepository.findBySocialId(socialId);
Expand All @@ -64,22 +66,7 @@ public List<BookmarkInfoDto> bookmarkTop(String socialId, Pageable pageable) {

List<BookmarkInfoDto> bookmarkList = new ArrayList<>();
for(Bookmark bookmark: bookmarkPage){
Optional<Store> store = storeRepository.findById(bookmark.getStoreId().getId());
List<StoreImage> storeImageList = storeImgRepository.findAllByStoreId(store.get().getId());

BookmarkInfoDto bookmarkInfoDto = BookmarkInfoDto
.builder()
.bookmarkId(bookmark.getId())
.name(store.get().getName())
.phoneNumber(store.get().getPhoneNumber())
.category(store.get().getCategory())
.address(store.get().getAddress())
.pointAvg(Math.round(store.get().getPointAvg()*10)/10.0)
.storeId((int) store.get().getId())
.storeImageList(!storeImageList.isEmpty() ? storeImageList.get(0).getStoreImageUrl():"")
.build();

// BookmarkInfoDto bookmarkInfoDto = new BookmarkInfoDto(bookmark);
BookmarkInfoDto bookmarkInfoDto = new BookmarkInfoDto(bookmark);
bookmarkList.add(bookmarkInfoDto);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,16 @@ public ResponseEntity<?> reviewUpdate(@ModelAttribute ReviewRequestDto reviewReq
return new ResponseEntity<>(HttpStatus.OK);
}

@PostMapping("/review/imageUpload")
public ResponseEntity<?> imageUpload(@AuthenticationPrincipal User user,
@RequestParam MultipartFile imageFile){

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

reviewService.imageUpload(imageFile, user.getUsername());
return new ResponseEntity<>(HttpStatus.OK);
}

/** 리뷰 삭제 */
@DeleteMapping("/review/{reviewId}")
public ResponseEntity<?> reviewDelete(@AuthenticationPrincipal User user,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import com.mpnp.baechelin.review.domain.ReviewImage;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface ReviewImageRepository extends JpaRepository<ReviewImage, Integer> {

void deleteAllByReviewId(Review review);
Expand All @@ -12,4 +14,6 @@ public interface ReviewImageRepository extends JpaRepository<ReviewImage, Intege
void deleteAllInBatchByReviewId(Review review);

void deleteInBatchByReviewId(Review review);

List<ReviewImage> findAllByReviewId(Review review);
}
141 changes: 79 additions & 62 deletions src/main/java/com/mpnp/baechelin/review/service/ReviewService.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public class ReviewService {
/** 리뷰 작성 */
public void review(ReviewRequestDto reviewRequestDto, String socialId) throws IOException {

long storeId = reviewRequestDto.getStoreId();
long storeId = reviewRequestDto.getStoreId();
Store store = storeRepository.findById(storeId).orElseThrow(() -> new IllegalArgumentException("해당하는 업장이 존재하지 않습니다."));
User user = userRepository.findBySocialId(socialId);
Review review = new Review(reviewRequestDto, store, user);
Expand Down Expand Up @@ -122,72 +122,85 @@ public PageInfoResponseDto getReview(long storeId, String socialId, Pageable pag


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

long 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.deleteInBatchByReviewId(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.deleteAllByReviewId(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()); // 별점 평점 구하는 코드
reviewImageRepository.saveAll(reviewImageUrlList);
}

// @Transactional
// /** 리뷰 수정 */
// public void reviewUpdate(ReviewRequestDto reviewRequestDto, String socialId, int reviewId){
//
// long 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<>(); // 이미지 파일을 담을 리스트
//
// List<ReviewImage> reviewImageList = reviewImageRepository.findAllByReviewId(review);
// List<Integer> reviewImageIdList = new ArrayList<>(); //
//
//
// // todo 이미지 삭제 후 수정 작업 (1 -> 2)
// // 1.기존리뷰에 기존 이미지가 있다면 삭제
// if(!oldImageFileList.isEmpty()) {
// 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));
//
// }
// }
//
//
// // 2.수정할 이미지가 있다면 업로드
// if(!newImageFileList.isEmpty()) {
// 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.deleteAllByReviewId(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()); // 별점 평점 구하는 코드
// reviewImageRepository.saveAll(reviewImageUrlList);
// System.out.println("=========delete========");
// reviewImageRepository.deleteAll(reviewImageList);
// }

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

Expand Down Expand Up @@ -218,4 +231,8 @@ public List<ReviewMainResponseDto> getRecentReview(BigDecimal lat, BigDecimal ln
.stream().map(review -> new ReviewMainResponseDto(review, review.getStoreId(), review.getUserId())).collect(Collectors.toList());
}

public void imageUpload(MultipartFile imageFile, String socialId) {


}
}
72 changes: 72 additions & 0 deletions src/main/resources/application-key.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
spring.datasource.url=jdbc:mysql://springboot-database.cewr8xgvhofg.ap-northeast-2.rds.amazonaws.com:3306/baechelin?serverTimezone=Asia/Seoul
spring.datasource.username= admin
spring.datasource.password=cz_hyy6848
spring.jpa.open-in-view=false
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.use-new-id-generator-mappings=false
spring.jpa.properties.hibernate.format_sql=true
spring.jackson.serialization.fail-on-empty-beans=false

logging.level.org.hibernate.SQL=debug
server.port=9000
#CORS
cors.allowed-origins=https://bae-chelin.com:12345,http://localhost:12345
cors.allowed-methods=GET,POST,PUT,DELETE,OPTIONS
cors.allowed-headers=*
cors.max-age=3600
#JWT
jwt.secret=MeongPanNyaengPanBaechelinhanghae99secretKey
app.auth.tokenSecret=thisToken2sforMeongPanNyaengPanBaechelin
app.auth.tokenExpiry=1800000
app.auth.refreshTokenExpiry=604800000
app.oauth2.authorizedRedirectUris=https://bae-chelin.com:12345/user/oauth/redirect
#OAUTH2
#google
spring.security.oauth2.client.registration.google.clientId=1024820989252-osui4ppvp6d26qg5cpb5ap19c93ombpv.apps.googleusercontent.com
spring.security.oauth2.client.registration.google.clientSecret=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
spring.security.oauth2.client.registration.google.scope=email, profile

#naver
spring.security.oauth2.client.registration.naver.clientId=lnfBJwiFCXxf4KDtCUjK
spring.security.oauth2.client.registration.naver.clientSecret=S99V7ezlik
spring.security.oauth2.client.registration.naver.clientAuthenticationMethod=post
spring.security.oauth2.client.registration.naver.authorizationGrantType=authorization_code
spring.security.oauth2.client.registration.naver.redirectUri=https://api.bae-chelin.com/user/oauth2/code/naver
spring.security.oauth2.client.registration.naver.scope=nickname, email, profile_image
spring.security.oauth2.client.registration.naver.clientName=Naver

#kakao
spring.security.oauth2.client.registration.kakao.clientId=708d5b42ebe5e4a252a73873a9cc475c
spring.security.oauth2.client.registration.kakao.clientSecret=iXUbULiZk7O6ODw1SKGws7KUNfF0BGmM4e
spring.security.oauth2.client.registration.kakao.clientAuthenticationMethod=post
spring.security.oauth2.client.registration.kakao.authorizationGrantType=authorization_code
spring.security.oauth2.client.registration.kakao.redirectUri=https://api.bae-chelin.com/user/oauth2/code/kakao
spring.security.oauth2.client.registration.kakao.scope=profile_nickname, profile_image, account_email
spring.security.oauth2.client.registration.kakao.clientName=Kakao

#provider
#naver
spring.security.oauth2.client.provider.naver.authorizationUri=https://nid.naver.com/oauth2.0/authorize
spring.security.oauth2.client.provider.naver.tokenUri=https://nid.naver.com/oauth2.0/token
spring.security.oauth2.client.provider.naver.userInfoUri=https://openapi.naver.com/v1/nid/me
spring.security.oauth2.client.provider.naver.userNameAttribute=response
# kakao
spring.security.oauth2.client.provider.kakao.authorizationUri=https://kauth.kakao.com/oauth/authorize
spring.security.oauth2.client.provider.kakao.tokenUri=https://kauth.kakao.com/oauth/token
spring.security.oauth2.client.provider.kakao.userInfoUri=https://kapi.kakao.com/v2/user/me
spring.security.oauth2.client.provider.kakao.userNameAttribute=id
#S3
cloud.aws.region.static=ap-northeast-2
cloud.aws.credentials.access-key=AKIA6F6Q3HYAFQWJW5OB
cloud.aws.credentials.secret-key=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
cloud.aws.s3.bucket=mykokoa
#swagger
spring.mvc.pathmatch.matching-strategy=ant_path_matcher

#key
kakao.api.key=KakaoAK 04940cceefec44d7adb62166b7971cd5
public.api.v1.key=5274616b45736f7933376e6c525658
public.api.v2.key=/N9SgrP/ZjFSBT51N5aEk7Xi7vYkUMK4G/Ra5q0paXTI4JrqaYQ82OypN8lpIj5eYusl/3xNY2q/gIGOwBbDaQ==
public.api.v2.key2 = Y8ysgjcfITdLKYzk9pQp6pzphI2yY95czKzFUggqOQCdYuYLm9oAOBh/hn1meZKp1UPtONWLAAIbu7McjP9R9Q==
user.agent = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36
Loading

0 comments on commit 6152d96

Please sign in to comment.