diff --git a/src/main/java/com/mpnp/baechelin/bookmark/dto/BookmarkInfoDto.java b/src/main/java/com/mpnp/baechelin/bookmark/dto/BookmarkInfoDto.java index d3be0ea..36c40ef 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/dto/BookmarkInfoDto.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/dto/BookmarkInfoDto.java @@ -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 = ""; } } diff --git a/src/main/java/com/mpnp/baechelin/bookmark/service/BookmarkService.java b/src/main/java/com/mpnp/baechelin/bookmark/service/BookmarkService.java index 5a9a2d6..a1d1e3c 100644 --- a/src/main/java/com/mpnp/baechelin/bookmark/service/BookmarkService.java +++ b/src/main/java/com/mpnp/baechelin/bookmark/service/BookmarkService.java @@ -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; @@ -56,6 +57,7 @@ public void bookmarkDelete(int bookmarkId, String socialId) { } + @Transactional public List bookmarkTop(String socialId, Pageable pageable) { User user = userRepository.findBySocialId(socialId); @@ -64,22 +66,7 @@ public List bookmarkTop(String socialId, Pageable pageable) { List bookmarkList = new ArrayList<>(); for(Bookmark bookmark: bookmarkPage){ - Optional store = storeRepository.findById(bookmark.getStoreId().getId()); - List 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); } diff --git a/src/main/java/com/mpnp/baechelin/review/controller/ReviewController.java b/src/main/java/com/mpnp/baechelin/review/controller/ReviewController.java index 669f399..490fa3a 100644 --- a/src/main/java/com/mpnp/baechelin/review/controller/ReviewController.java +++ b/src/main/java/com/mpnp/baechelin/review/controller/ReviewController.java @@ -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, diff --git a/src/main/java/com/mpnp/baechelin/review/repository/ReviewImageRepository.java b/src/main/java/com/mpnp/baechelin/review/repository/ReviewImageRepository.java index cc17155..ac9ae9d 100644 --- a/src/main/java/com/mpnp/baechelin/review/repository/ReviewImageRepository.java +++ b/src/main/java/com/mpnp/baechelin/review/repository/ReviewImageRepository.java @@ -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 { void deleteAllByReviewId(Review review); @@ -12,4 +14,6 @@ public interface ReviewImageRepository extends JpaRepository findAllByReviewId(Review review); } diff --git a/src/main/java/com/mpnp/baechelin/review/service/ReviewService.java b/src/main/java/com/mpnp/baechelin/review/service/ReviewService.java index ec60955..566df7c 100644 --- a/src/main/java/com/mpnp/baechelin/review/service/ReviewService.java +++ b/src/main/java/com/mpnp/baechelin/review/service/ReviewService.java @@ -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); @@ -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 newImageFileList = reviewRequestDto.getImageFile(); // 새로운 이미지 파일 - List oldImageFileList = review.getReviewImageList(); // 기존에 이미지 파일 - List 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 tagList = new ArrayList<>(); // 태그를 담는 리스트 - List newTagList = reviewRequestDto.getTagList(); // 새로운 태그 - - - // todo 태그 수정 작업 - List 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 newImageFileList = reviewRequestDto.getImageFile(); // 새로운 이미지 파일 +// List oldImageFileList = review.getReviewImageList(); // 기존에 이미지 파일 +// List reviewImageUrlList = new ArrayList<>(); // 이미지 파일을 담을 리스트 +// +// List reviewImageList = reviewImageRepository.findAllByReviewId(review); +// List 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 tagList = new ArrayList<>(); // 태그를 담는 리스트 +// List newTagList = reviewRequestDto.getTagList(); // 새로운 태그 +// +// +// // todo 태그 수정 작업 +// List 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) { @@ -218,4 +231,8 @@ public List 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) { + + + } } diff --git a/src/main/resources/application-key.properties b/src/main/resources/application-key.properties index e69de29..0de368f 100644 --- a/src/main/resources/application-key.properties +++ b/src/main/resources/application-key.properties @@ -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 diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index e69de29..0de368f 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -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