From 8c8cddef7ecfb2cd34eff9c45f0546a55a52a2a3 Mon Sep 17 00:00:00 2001 From: minjae <wjsalswp303@gmail.com> Date: Thu, 15 Feb 2024 20:23:57 +0900 Subject: [PATCH 01/10] =?UTF-8?q?[fix]=20=EA=B4=80=EC=8B=AC=EA=B8=80=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/generated/umc/IRECIPE_Server/entity/QMember.java | 2 ++ src/main/java/umc/IRECIPE_Server/service/MemberService.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/generated/umc/IRECIPE_Server/entity/QMember.java b/src/main/generated/umc/IRECIPE_Server/entity/QMember.java index a35afb9..8f4d4a8 100644 --- a/src/main/generated/umc/IRECIPE_Server/entity/QMember.java +++ b/src/main/generated/umc/IRECIPE_Server/entity/QMember.java @@ -51,6 +51,8 @@ public class QMember extends EntityPathBase<Member> { public final StringPath personalId = createString("personalId"); + public final ListPath<Post, QPost> postList = this.<Post, QPost>createList("postList", Post.class, QPost.class, PathInits.DIRECT2); + public final StringPath profileImage = createString("profileImage"); public final ListPath<Qna, QQna> qnaList = this.<Qna, QQna>createList("qnaList", Qna.class, QQna.class, PathInits.DIRECT2); diff --git a/src/main/java/umc/IRECIPE_Server/service/MemberService.java b/src/main/java/umc/IRECIPE_Server/service/MemberService.java index ff6cede..abaf920 100644 --- a/src/main/java/umc/IRECIPE_Server/service/MemberService.java +++ b/src/main/java/umc/IRECIPE_Server/service/MemberService.java @@ -228,7 +228,7 @@ public List<Post> getLikedPostList(String personalId, Integer page) { List<Post> postList = new ArrayList<>(); for(MemberLikes memberLikes : postIdPage.toList()){ - Long id = memberLikes.getId(); + Long id = memberLikes.getPost().getId(); Post tmp = postRepository.findByStatusAndId(Status.POST, id); postList.add(tmp); } From 9d74058a4667cd11b42549a59d58bc862b377059 Mon Sep 17 00:00:00 2001 From: minjae <wjsalswp303@gmail.com> Date: Fri, 16 Feb 2024 10:36:02 +0900 Subject: [PATCH 02/10] =?UTF-8?q?[fix]=20=EB=8B=A8=EC=9D=BC=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/umc/IRECIPE_Server/service/PostService.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/umc/IRECIPE_Server/service/PostService.java b/src/main/java/umc/IRECIPE_Server/service/PostService.java index a6f4823..aecca25 100644 --- a/src/main/java/umc/IRECIPE_Server/service/PostService.java +++ b/src/main/java/umc/IRECIPE_Server/service/PostService.java @@ -108,7 +108,10 @@ public ApiResponse<?> getPost(Long postId, String userId){ Post post = findByPostId(postId); - boolean likeOrNot = memberLikesRepository.findByMemberAndPost(post.getMember(), post).isPresent(); + Member member = memberRepository.findByPersonalId(userId) + .orElseThrow(() -> new GeneralException(ErrorStatus.MEMBER_NOT_FOUND)); + + boolean likeOrNot = memberLikesRepository.findByMemberAndPost(member, post).isPresent(); return ApiResponse.onSuccess(PostConverter.toGetResponseDTO(post, post.getMember(), likeOrNot)); From 511730a713aec280cafc0a56b6888671e2ebd295 Mon Sep 17 00:00:00 2001 From: minjae <wjsalswp303@gmail.com> Date: Fri, 16 Feb 2024 11:54:20 +0900 Subject: [PATCH 03/10] =?UTF-8?q?[fix]=20=EB=8B=A8=EC=9D=BC=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/umc/IRECIPE_Server/converter/PostConverter.java | 3 ++- .../umc/IRECIPE_Server/dto/response/PostResponseDTO.java | 3 +++ src/main/java/umc/IRECIPE_Server/service/PostService.java | 8 +++++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java b/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java index 70f37cc..74a44e7 100644 --- a/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java +++ b/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java @@ -39,7 +39,7 @@ public static PostResponseDTO.getTempDTO toTempResponseDTO(Post post){ - public static PostResponseDTO.getDTO toGetResponseDTO(Post post, Member member, boolean likeOrNot){ + public static PostResponseDTO.getDTO toGetResponseDTO(Post post, Member member, boolean likeOrNot, boolean myPost){ return PostResponseDTO.getDTO.builder() .postId(post.getId()) .title(post.getTitle()) @@ -56,6 +56,7 @@ public static PostResponseDTO.getDTO toGetResponseDTO(Post post, Member member, .createdAt(post.getCreatedAt().toLocalDate()) .reviewsCount(post.getReviewList().size()) .likeOrNot(likeOrNot) + .myPost(myPost) .build(); } diff --git a/src/main/java/umc/IRECIPE_Server/dto/response/PostResponseDTO.java b/src/main/java/umc/IRECIPE_Server/dto/response/PostResponseDTO.java index 8e24fdd..925c16e 100644 --- a/src/main/java/umc/IRECIPE_Server/dto/response/PostResponseDTO.java +++ b/src/main/java/umc/IRECIPE_Server/dto/response/PostResponseDTO.java @@ -108,6 +108,9 @@ public static class getDTO{ @Schema(description = "해당 사용자가 관심 눌렀는지", defaultValue = "false") private boolean likeOrNot; + @Schema(description = "내가 쓴 글인지 아닌지", defaultValue = "false") + private boolean myPost; + @Schema(description = "게시글 생성일") private LocalDate createdAt; } diff --git a/src/main/java/umc/IRECIPE_Server/service/PostService.java b/src/main/java/umc/IRECIPE_Server/service/PostService.java index aecca25..e8a0971 100644 --- a/src/main/java/umc/IRECIPE_Server/service/PostService.java +++ b/src/main/java/umc/IRECIPE_Server/service/PostService.java @@ -113,7 +113,13 @@ public ApiResponse<?> getPost(Long postId, String userId){ boolean likeOrNot = memberLikesRepository.findByMemberAndPost(member, post).isPresent(); - return ApiResponse.onSuccess(PostConverter.toGetResponseDTO(post, post.getMember(), likeOrNot)); + boolean myPost = false; + + if(member == post.getMember()){ + myPost = true; + } + + return ApiResponse.onSuccess(PostConverter.toGetResponseDTO(post, post.getMember(), likeOrNot, myPost)); } From 5f2253447f829bac6eabb1c7881c012940af8396 Mon Sep 17 00:00:00 2001 From: jun23314 <dlwnsfml@naver.com> Date: Fri, 16 Feb 2024 13:05:31 +0900 Subject: [PATCH 04/10] =?UTF-8?q?=EA=B4=80=EC=8B=AC=EA=B8=80=20=EC=A1=B0?= =?UTF-8?q?=ED=9A=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MemberController.java | 3 ++- .../converter/MemberConverter.java | 16 -------------- .../converter/PostConverter.java | 22 ++++++++++++++++++- .../IRECIPE_Server/service/MemberService.java | 18 +++++++++++++-- 4 files changed, 39 insertions(+), 20 deletions(-) diff --git a/src/main/java/umc/IRECIPE_Server/controller/MemberController.java b/src/main/java/umc/IRECIPE_Server/controller/MemberController.java index 0785f23..a509143 100644 --- a/src/main/java/umc/IRECIPE_Server/controller/MemberController.java +++ b/src/main/java/umc/IRECIPE_Server/controller/MemberController.java @@ -18,6 +18,7 @@ import umc.IRECIPE_Server.apiPayLoad.exception.handler.PostHandler; import umc.IRECIPE_Server.common.S3.S3Service; import umc.IRECIPE_Server.converter.MemberConverter; +import umc.IRECIPE_Server.converter.PostConverter; import umc.IRECIPE_Server.dto.MemberRequest; import umc.IRECIPE_Server.dto.MemberResponse; import umc.IRECIPE_Server.dto.MemberLoginRequestDto; @@ -134,7 +135,7 @@ public ApiResponse<?> showLikedPosts( Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String userId = authentication.getName();//personal id - return ApiResponse.onSuccess(MemberConverter.postsLikedListDto(memberService.getLikedPostList(userId, page))); + return memberService.getLikedPostList(userId, page); } @Operation(summary = "토큰 재발급 API", description = "토큰 재발급") diff --git a/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java b/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java index a85c192..4c5d2c5 100644 --- a/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java +++ b/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java @@ -119,20 +119,4 @@ public static List<MemberResponse.getPostsDto> postsListDto(Page<Post> postPage) .collect(Collectors.toList()); } - public static List<MemberResponse.getPostsDto> postsLikedListDto(List<Post> postList){ - return postList.stream() - .map(val -> MemberResponse.getPostsDto.builder() - .title(val.getTitle()) - .subhead(val.getSubhead()) - .level(val.getLevel()) - .score(val.getScore()) - .content(val.getContent()) - .likes(val.getLikes()) - .imageUrl(val.getImageUrl()) - .category(val.getCategory()) - .fileName(val.getFileName()) - .build()) - .collect(Collectors.toList()); - } - } diff --git a/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java b/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java index 70f37cc..2b2fed2 100644 --- a/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java +++ b/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java @@ -65,7 +65,27 @@ public static PostResponseDTO.updateDTO toUpdateResponseDTO(Post post){ .build(); } - public static List<PostResponseDTO.getAllPostDTO> toGetAllPostDTO(Page<Post> postPage, Map<Long, Boolean> likeMap){ + public static List<PostResponseDTO.getDTO> toGetAllPostDTO(Page<Post> postPage, Map<Long, Boolean> likeMap){ + return postPage.stream() + .map(m -> PostResponseDTO.getDTO.builder() + .postId(m.getId()) + .title(m.getTitle()) + .subhead(m.getSubhead()) + .imageUrl(m.getImageUrl()) + .likes(m.getLikes()) + .score(m.getScore()) + .reviewsCount(m.getReviewList().size()) + .writerImage(m.getMember().getProfileImage()) + .writerNickName(m.getMember().getNickname()) + .createdAt(m.getCreatedAt().toLocalDate()) + .likeOrNot(likeMap.get(m.getId())) + .category(m.getCategory()) + .content(m.getContent()) + .build()) + .collect(Collectors.toList()); + } + + public static List<PostResponseDTO.getAllPostDTO> toGetAllPostListDTO(List<Post> postPage, Map<Long, Boolean> likeMap){ return postPage.stream() .map(m -> PostResponseDTO.getAllPostDTO.builder() .postId(m.getId()) diff --git a/src/main/java/umc/IRECIPE_Server/service/MemberService.java b/src/main/java/umc/IRECIPE_Server/service/MemberService.java index abaf920..5eab521 100644 --- a/src/main/java/umc/IRECIPE_Server/service/MemberService.java +++ b/src/main/java/umc/IRECIPE_Server/service/MemberService.java @@ -2,6 +2,8 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import java.util.Optional; import java.util.concurrent.Flow.Publisher; import lombok.RequiredArgsConstructor; @@ -14,6 +16,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; +import umc.IRECIPE_Server.apiPayLoad.ApiResponse; import umc.IRECIPE_Server.apiPayLoad.code.status.ErrorStatus; import umc.IRECIPE_Server.apiPayLoad.exception.handler.AllergyHandler; import umc.IRECIPE_Server.apiPayLoad.exception.handler.MemberHandler; @@ -22,6 +25,7 @@ import umc.IRECIPE_Server.common.enums.Status; import umc.IRECIPE_Server.converter.MemberAllergyConverter; import umc.IRECIPE_Server.converter.MemberConverter; +import umc.IRECIPE_Server.converter.PostConverter; import umc.IRECIPE_Server.dto.MemberRequest; import umc.IRECIPE_Server.dto.MemberResponse; import umc.IRECIPE_Server.dto.MemberLoginRequestDto; @@ -208,8 +212,9 @@ public Page<Post> getWrittenPostList(String personalId, Integer page) { return postPage; } + //회원 관심글 보기 @Transactional - public List<Post> getLikedPostList(String personalId, Integer page) { + public ApiResponse<?> getLikedPostList(String personalId, Integer page) { Page<MemberLikes> postIdPage; Pageable pageable = PageRequest.of(page, 10); @@ -237,9 +242,17 @@ public List<Post> getLikedPostList(String personalId, Integer page) { throw new MemberHandler(ErrorStatus.POST_NOT_FOUND); } - return postList; + // memberLike 에서 찾으면 관심 눌렀던 게시글, 못 찾으면 관심 안 누른 게시글 + Map<Long, Boolean> likeMap = new HashMap<>(); + for (Post post : postList) { + Boolean likeOrNot = memberLikesRepository.findByMemberAndPost(mem, post).isPresent(); + likeMap.put(post.getId(), likeOrNot); + } + + return ApiResponse.onSuccess(PostConverter.toGetAllPostListDTO(postList, likeMap)); } + //토큰 재발급 @Transactional public Member refresh(Member member){ if(tokenRepository.existsByMember(member)){ // 이미 refresh token이 있다면 @@ -251,6 +264,7 @@ public Member refresh(Member member){ return member; } + //회원 탈퇴 @Transactional public void deleteMember(String personalId){ Optional<Member> member = memberRepository.findByPersonalId(personalId); From 3f8142882739ebc55d6da94492b6e2a41614e517 Mon Sep 17 00:00:00 2001 From: jun23314 <dlwnsfml@naver.com> Date: Fri, 16 Feb 2024 13:09:25 +0900 Subject: [PATCH 05/10] =?UTF-8?q?=EC=9E=98=EB=AA=BB=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=ED=95=9C=EA=B1=B0=20=EC=9B=90=EC=9C=84=EC=B9=98=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/umc/IRECIPE_Server/converter/PostConverter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java b/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java index 2b2fed2..65df78d 100644 --- a/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java +++ b/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java @@ -65,7 +65,7 @@ public static PostResponseDTO.updateDTO toUpdateResponseDTO(Post post){ .build(); } - public static List<PostResponseDTO.getDTO> toGetAllPostDTO(Page<Post> postPage, Map<Long, Boolean> likeMap){ + public static List<PostResponseDTO.getDTO> toGetAllPostListDTO(List<Post> postPage, Map<Long, Boolean> likeMap){ return postPage.stream() .map(m -> PostResponseDTO.getDTO.builder() .postId(m.getId()) @@ -85,7 +85,7 @@ public static List<PostResponseDTO.getDTO> toGetAllPostDTO(Page<Post> postPage, .collect(Collectors.toList()); } - public static List<PostResponseDTO.getAllPostDTO> toGetAllPostListDTO(List<Post> postPage, Map<Long, Boolean> likeMap){ + public static List<PostResponseDTO.getAllPostDTO> toGetAllPostDTO(Page<Post> postPage, Map<Long, Boolean> likeMap){ return postPage.stream() .map(m -> PostResponseDTO.getAllPostDTO.builder() .postId(m.getId()) From 0e89bc1a8f17cd2cdc25096e55549fe847907b7a Mon Sep 17 00:00:00 2001 From: jun23314 <dlwnsfml@naver.com> Date: Fri, 16 Feb 2024 13:28:48 +0900 Subject: [PATCH 06/10] =?UTF-8?q?=EC=82=AC=EC=9A=A9=EC=9E=90=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1=20=EA=B8=80=20=EB=B3=B4=EA=B8=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MemberController.java | 4 ++-- .../converter/MemberConverter.java | 16 ---------------- .../IRECIPE_Server/service/MemberService.java | 11 +++++++++-- 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/src/main/java/umc/IRECIPE_Server/controller/MemberController.java b/src/main/java/umc/IRECIPE_Server/controller/MemberController.java index a509143..089bf6d 100644 --- a/src/main/java/umc/IRECIPE_Server/controller/MemberController.java +++ b/src/main/java/umc/IRECIPE_Server/controller/MemberController.java @@ -114,7 +114,7 @@ public ApiResponse<MemberResponse.JoinResultDto> joinLogin( @Operation(summary = "작성 글 API",description = "사용자가 작성한 글 보기") @GetMapping(value = "/written") - public ApiResponse<List<MemberResponse.getPostsDto>> showWrittenPosts( + public ApiResponse<?> showWrittenPosts( @RequestParam(name = "page") Integer page ){ if(page < 0) throw new PostHandler(ErrorStatus.INVALID_PAGE); @@ -122,7 +122,7 @@ public ApiResponse<List<MemberResponse.getPostsDto>> showWrittenPosts( Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String userId = authentication.getName();//personal id - return ApiResponse.onSuccess(MemberConverter.postsListDto(memberService.getWrittenPostList(userId, page))); + return memberService.getWrittenPostList(userId, page); } @Operation(summary = "관심 글 API",description = "사용자가 좋아요 누른 글 보기") diff --git a/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java b/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java index 4c5d2c5..9055591 100644 --- a/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java +++ b/src/main/java/umc/IRECIPE_Server/converter/MemberConverter.java @@ -103,20 +103,4 @@ public static MemberResponse.getPostsDto postsDto(Post post){ .build(); } - public static List<MemberResponse.getPostsDto> postsListDto(Page<Post> postPage){ - return postPage.stream() - .map(val -> MemberResponse.getPostsDto.builder() - .title(val.getTitle()) - .subhead(val.getSubhead()) - .level(val.getLevel()) - .score(val.getScore()) - .content(val.getContent()) - .likes(val.getLikes()) - .imageUrl(val.getImageUrl()) - .category(val.getCategory()) - .fileName(val.getFileName()) - .build()) - .collect(Collectors.toList()); - } - } diff --git a/src/main/java/umc/IRECIPE_Server/service/MemberService.java b/src/main/java/umc/IRECIPE_Server/service/MemberService.java index 5eab521..c7c5efb 100644 --- a/src/main/java/umc/IRECIPE_Server/service/MemberService.java +++ b/src/main/java/umc/IRECIPE_Server/service/MemberService.java @@ -192,7 +192,7 @@ public Member login(MemberLoginRequestDto.JoinLoginDto request){ } @Transactional - public Page<Post> getWrittenPostList(String personalId, Integer page) { + public ApiResponse<?> getWrittenPostList(String personalId, Integer page) { Page<Post> postPage; Pageable pageable = PageRequest.of(page, 10); @@ -209,7 +209,14 @@ public Page<Post> getWrittenPostList(String personalId, Integer page) { else if(page == 0) throw new PostHandler(ErrorStatus.MEMBER_DONT_HAVE_POSTS); } - return postPage; + // memberLike 에서 찾으면 관심 눌렀던 게시글, 못 찾으면 관심 안 누른 게시글 + Map<Long, Boolean> likeMap = new HashMap<>(); + for (Post post : postPage) { + Boolean likeOrNot = memberLikesRepository.findByMemberAndPost(mem, post).isPresent(); + likeMap.put(post.getId(), likeOrNot); + } + + return ApiResponse.onSuccess(PostConverter.toGetAllPostDTO(postPage, likeMap)); } //회원 관심글 보기 From a42865e8a2cdd61ffc38f7f239f14fcd98395898 Mon Sep 17 00:00:00 2001 From: jun23314 <dlwnsfml@naver.com> Date: Fri, 16 Feb 2024 15:00:14 +0900 Subject: [PATCH 07/10] =?UTF-8?q?pull=20develop=20=ED=9B=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/umc/IRECIPE_Server/converter/PostConverter.java | 3 ++- src/main/java/umc/IRECIPE_Server/service/MemberService.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java b/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java index 31112c0..89d91b1 100644 --- a/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java +++ b/src/main/java/umc/IRECIPE_Server/converter/PostConverter.java @@ -66,7 +66,7 @@ public static PostResponseDTO.updateDTO toUpdateResponseDTO(Post post){ .build(); } - public static List<PostResponseDTO.getDTO> toGetAllPostListDTO(List<Post> postPage, Map<Long, Boolean> likeMap){ + public static List<PostResponseDTO.getDTO> toGetAllPostListDTO(Member member, List<Post> postPage, Map<Long, Boolean> likeMap){ return postPage.stream() .map(m -> PostResponseDTO.getDTO.builder() .postId(m.getId()) @@ -82,6 +82,7 @@ public static List<PostResponseDTO.getDTO> toGetAllPostListDTO(List<Post> postPa .likeOrNot(likeMap.get(m.getId())) .category(m.getCategory()) .content(m.getContent()) + .myPost(m.getMember().equals(member)) .build()) .collect(Collectors.toList()); } diff --git a/src/main/java/umc/IRECIPE_Server/service/MemberService.java b/src/main/java/umc/IRECIPE_Server/service/MemberService.java index c7c5efb..233bf51 100644 --- a/src/main/java/umc/IRECIPE_Server/service/MemberService.java +++ b/src/main/java/umc/IRECIPE_Server/service/MemberService.java @@ -256,7 +256,7 @@ public ApiResponse<?> getLikedPostList(String personalId, Integer page) { likeMap.put(post.getId(), likeOrNot); } - return ApiResponse.onSuccess(PostConverter.toGetAllPostListDTO(postList, likeMap)); + return ApiResponse.onSuccess(PostConverter.toGetAllPostListDTO(mem, postList, likeMap)); } //토큰 재발급 From 60d36fce7a671b2d3a13813628df5254a5e264e4 Mon Sep 17 00:00:00 2001 From: alsrudursla <nuy0307@naver.com> Date: Fri, 16 Feb 2024 19:28:22 +0900 Subject: [PATCH 08/10] =?UTF-8?q?chore:=20score=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=ED=83=80=EC=9E=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/generated/umc/IRECIPE_Server/entity/QReview.java | 2 +- .../umc/IRECIPE_Server/dto/request/ReviewRequestDTO.java | 2 +- .../umc/IRECIPE_Server/dto/response/ReviewResponseDTO.java | 6 +++--- src/main/java/umc/IRECIPE_Server/entity/Review.java | 4 ++-- .../java/umc/IRECIPE_Server/service/ReviewServiceImpl.java | 6 +++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/generated/umc/IRECIPE_Server/entity/QReview.java b/src/main/generated/umc/IRECIPE_Server/entity/QReview.java index 2045d45..1e0a8e3 100644 --- a/src/main/generated/umc/IRECIPE_Server/entity/QReview.java +++ b/src/main/generated/umc/IRECIPE_Server/entity/QReview.java @@ -39,7 +39,7 @@ public class QReview extends EntityPathBase<Review> { public final QPost post; - public final NumberPath<Float> score = createNumber("score", Float.class); + public final NumberPath<Integer> score = createNumber("score", Integer.class); //inherited public final DateTimePath<java.time.LocalDateTime> updatedAt = _super.updatedAt; diff --git a/src/main/java/umc/IRECIPE_Server/dto/request/ReviewRequestDTO.java b/src/main/java/umc/IRECIPE_Server/dto/request/ReviewRequestDTO.java index d47eb91..ded33ea 100644 --- a/src/main/java/umc/IRECIPE_Server/dto/request/ReviewRequestDTO.java +++ b/src/main/java/umc/IRECIPE_Server/dto/request/ReviewRequestDTO.java @@ -16,6 +16,6 @@ public static class addReviewDTO { private String context; @Schema(description = "리뷰 별점", defaultValue = "4.3") - private Float score; + private int score; } } diff --git a/src/main/java/umc/IRECIPE_Server/dto/response/ReviewResponseDTO.java b/src/main/java/umc/IRECIPE_Server/dto/response/ReviewResponseDTO.java index 34ae72b..a9edb8f 100644 --- a/src/main/java/umc/IRECIPE_Server/dto/response/ReviewResponseDTO.java +++ b/src/main/java/umc/IRECIPE_Server/dto/response/ReviewResponseDTO.java @@ -18,8 +18,8 @@ public class ReviewResponseDTO { @AllArgsConstructor public static class addReviewResponseDTO { - @Schema(description = "리뷰 별점", defaultValue = "4.3") - private Float score; + @Schema(description = "리뷰 별점", defaultValue = "4") + private int score; @Schema(description = "리뷰 내용", defaultValue = "노력대비 최고의 맛!...") private String context; @@ -52,7 +52,7 @@ public static class getReviewResponseDTO { private String context; @Schema(description = "리뷰 별점") - private Float score; + private int score; @Schema(description = "리뷰 사진") private String imageUrl; diff --git a/src/main/java/umc/IRECIPE_Server/entity/Review.java b/src/main/java/umc/IRECIPE_Server/entity/Review.java index 077f16e..b11a8be 100644 --- a/src/main/java/umc/IRECIPE_Server/entity/Review.java +++ b/src/main/java/umc/IRECIPE_Server/entity/Review.java @@ -42,7 +42,7 @@ public class Review extends BaseEntity { private Post post; // 별점 - private Float score; + private int score; // 리뷰 내용 private String context; @@ -53,7 +53,7 @@ public class Review extends BaseEntity { // 사진 이름 private String fileName; - public void updateReview(Float score, String context, String imageUrl, String fileName) { + public void updateReview(int score, String context, String imageUrl, String fileName) { this.score = score; this.context = context; this.imageUrl = imageUrl; diff --git a/src/main/java/umc/IRECIPE_Server/service/ReviewServiceImpl.java b/src/main/java/umc/IRECIPE_Server/service/ReviewServiceImpl.java index 7bdfccc..9b67648 100644 --- a/src/main/java/umc/IRECIPE_Server/service/ReviewServiceImpl.java +++ b/src/main/java/umc/IRECIPE_Server/service/ReviewServiceImpl.java @@ -56,7 +56,7 @@ public Review addReview(String memberId, Long postId, ReviewRequestDTO.@Valid ad // 게시글 평균 별점 수정 : (원래 평균 별점 * 리뷰 개수 + 새로 들어온 별점) / (원래 리뷰 개수 + 1) Post post = postRepository.findById(postId).orElseThrow(() -> new GeneralException(ErrorStatus.POST_NOT_FOUND)); int reviewCount = reviewRepository.countByPost_Id(post.getId()); - Float newScore = (post.getScore() * reviewCount + request.getScore()) / (reviewCount + 1); + Float newScore = (post.getScore() * reviewCount + (float)request.getScore()) / (reviewCount + 1); post.updateScore(newScore); // 리뷰 등록 @@ -101,7 +101,7 @@ public void updatePostReview(Long reviewId, ReviewRequestDTO.addReviewDTO reques if (request.getScore() != review.getScore()) { Post post = postRepository.findById(review.getPost().getId()).orElseThrow(() -> new GeneralException(ErrorStatus.POST_NOT_FOUND)); int reviewCount = reviewRepository.countByPost_Id(post.getId()); - Float newScore = (post.getScore() * reviewCount - review.getScore() + request.getScore()) / reviewCount; + Float newScore = (post.getScore() * reviewCount - (float)review.getScore() + (float)request.getScore()) / reviewCount; post.updateScore(newScore); } @@ -121,7 +121,7 @@ public void deletePostReview(Long reviewId) { // 게시글 평균 별점 업데이트 Post post = postRepository.findById(review.getPost().getId()).orElseThrow(() -> new GeneralException(ErrorStatus.POST_NOT_FOUND)); int reviewCount = reviewRepository.countByPost_Id(post.getId()); - Float newScore = (post.getScore() * reviewCount - review.getScore()) / (reviewCount - 1); + Float newScore = (post.getScore() * reviewCount - (float)review.getScore()) / (reviewCount - 1); post.updateScore(newScore); // 게시글 리뷰 삭제 From e38886f544bf081c76bb0d58243e35c1e4531067 Mon Sep 17 00:00:00 2001 From: alsrudursla <nuy0307@naver.com> Date: Fri, 16 Feb 2024 20:17:14 +0900 Subject: [PATCH 09/10] =?UTF-8?q?add:=20review=20=EC=88=98=EC=A0=95,?= =?UTF-8?q?=EC=82=AD=EC=A0=9C=20=EC=9E=91=EC=84=B1=EC=9E=90=EB=A7=8C=20?= =?UTF-8?q?=EA=B0=80=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ReviewController.java | 11 ++++++-- .../dto/request/QnaRequestDTO.java | 2 +- .../IRECIPE_Server/service/ReviewService.java | 4 +-- .../service/ReviewServiceImpl.java | 26 ++++++++++++++++--- 4 files changed, 35 insertions(+), 8 deletions(-) diff --git a/src/main/java/umc/IRECIPE_Server/controller/ReviewController.java b/src/main/java/umc/IRECIPE_Server/controller/ReviewController.java index b508dd9..4a48088 100644 --- a/src/main/java/umc/IRECIPE_Server/controller/ReviewController.java +++ b/src/main/java/umc/IRECIPE_Server/controller/ReviewController.java @@ -64,8 +64,11 @@ public ApiResponse<List<ReviewResponseDTO.getReviewResponseDTO>> getPostReview(@ public ApiResponse<ReviewResponseDTO.updateReviewResponseDTO> updatePostReview(@PathVariable("reviewId") Long reviewId, @RequestPart(name = "ReviewRequestDTO", required = false) ReviewRequestDTO.addReviewDTO request, @RequestPart(value = "file", required = false) MultipartFile file) throws IOException { + // memberId 값 세팅 + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String memberId = authentication.getName(); - reviewService.updatePostReview(reviewId, request, file); + reviewService.updatePostReview(memberId, reviewId, request, file); return ApiResponse.onSuccess(ReviewConverter.updateReviewResult(reviewId)); } @@ -76,7 +79,11 @@ public ApiResponse<ReviewResponseDTO.updateReviewResponseDTO> updatePostReview(@ ) @DeleteMapping("/review/{reviewId}") public ApiResponse<ReviewResponseDTO.deleteReviewResponseDTO> deletePostReview(@PathVariable("reviewId") Long reviewId) { - reviewService.deletePostReview(reviewId); + // memberId 값 세팅 + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String memberId = authentication.getName(); + + reviewService.deletePostReview(memberId, reviewId); return ApiResponse.onSuccess(ReviewConverter.deleteReviewResult()); } } diff --git a/src/main/java/umc/IRECIPE_Server/dto/request/QnaRequestDTO.java b/src/main/java/umc/IRECIPE_Server/dto/request/QnaRequestDTO.java index 50f9183..e4f1b66 100644 --- a/src/main/java/umc/IRECIPE_Server/dto/request/QnaRequestDTO.java +++ b/src/main/java/umc/IRECIPE_Server/dto/request/QnaRequestDTO.java @@ -16,7 +16,7 @@ public class QnaRequestDTO { public static class addQna { @Schema(description = "Qna 내용", defaultValue = "설탕 대신 알룰로스를...") private String content; - @Schema(description = "부모 댓글 Id", defaultValue = "1") + @Schema(description = "부모 댓글 Id", defaultValue = "0") private Long parentId; } diff --git a/src/main/java/umc/IRECIPE_Server/service/ReviewService.java b/src/main/java/umc/IRECIPE_Server/service/ReviewService.java index 20248d1..4c7c3c0 100644 --- a/src/main/java/umc/IRECIPE_Server/service/ReviewService.java +++ b/src/main/java/umc/IRECIPE_Server/service/ReviewService.java @@ -17,8 +17,8 @@ public interface ReviewService { Page<Review> getPostReview(Long postId, int page); // 리뷰 수정 - void updatePostReview(Long reviewId, ReviewRequestDTO.addReviewDTO request, MultipartFile file) throws IOException; + void updatePostReview(String memberId, Long reviewId, ReviewRequestDTO.addReviewDTO request, MultipartFile file) throws IOException; // 리뷰 삭제 - void deletePostReview(Long reviewId); + void deletePostReview(String memberId, Long reviewId); } diff --git a/src/main/java/umc/IRECIPE_Server/service/ReviewServiceImpl.java b/src/main/java/umc/IRECIPE_Server/service/ReviewServiceImpl.java index 7bdfccc..7139d32 100644 --- a/src/main/java/umc/IRECIPE_Server/service/ReviewServiceImpl.java +++ b/src/main/java/umc/IRECIPE_Server/service/ReviewServiceImpl.java @@ -78,11 +78,20 @@ public Page<Review> getPostReview(Long postId, int page) { } // 게시글 리뷰 수정 - public void updatePostReview(Long reviewId, ReviewRequestDTO.addReviewDTO request, MultipartFile file) throws IOException { + public void updatePostReview(String memberId, Long reviewId, ReviewRequestDTO.addReviewDTO request, MultipartFile file) throws IOException { // 리뷰 조회 Review review = reviewRepository.findById(reviewId).orElseThrow(() -> new GeneralException(ErrorStatus.POST_REVIEW_NOT_FOUND)); + // 작성자만 수정 가능 + Optional<Member> member = memberRepository.findByPersonalId(memberId); + if (member.isEmpty()) { + throw new GeneralException(ErrorStatus.MEMBER_NOT_FOUND); + } + if (member.get().getId() != review.getMember().getId()) { + throw new GeneralException(ErrorStatus._FORBIDDEN); + } + // 기존 사진 S3 삭제 String oldUrl = review.getImageUrl(); if (oldUrl != null) { @@ -110,10 +119,21 @@ public void updatePostReview(Long reviewId, ReviewRequestDTO.addReviewDTO reques } // 게시글 리뷰 삭제 - public void deletePostReview(Long reviewId) { + public void deletePostReview(String memberId, Long reviewId) { - // S3 버킷에 저장된 게시글 리뷰 사진 삭제 + // 리뷰 조회 Review review = reviewRepository.findById(reviewId).orElseThrow(() -> new GeneralException(ErrorStatus.POST_REVIEW_NOT_FOUND)); + + // 작성자만 삭제 가능 + Optional<Member> member = memberRepository.findByPersonalId(memberId); + if (member.isEmpty()) { + throw new GeneralException(ErrorStatus.MEMBER_NOT_FOUND); + } + if (member.get().getId() != review.getMember().getId()) { + throw new GeneralException(ErrorStatus._FORBIDDEN); + } + + // S3 버킷에 저장된 게시글 리뷰 사진 삭제 if (review.getImageUrl() != null) { s3Service.deleteImage(review.getFileName(), "images"); } From 9a82fedbc6e940116d6ed490a0c2f8debcf7309a Mon Sep 17 00:00:00 2001 From: alsrudursla <nuy0307@naver.com> Date: Fri, 16 Feb 2024 20:41:11 +0900 Subject: [PATCH 10/10] =?UTF-8?q?add:=20qna=20=EC=88=98=EC=A0=95,=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=20=EC=9E=91=EC=84=B1=EC=9E=90=EB=A7=8C=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/QnaController.java | 12 ++++++++-- .../IRECIPE_Server/service/QnaService.java | 4 ++-- .../service/QnaServiceImpl.java | 23 +++++++++++++++++-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/main/java/umc/IRECIPE_Server/controller/QnaController.java b/src/main/java/umc/IRECIPE_Server/controller/QnaController.java index fe0aa67..8769cc9 100644 --- a/src/main/java/umc/IRECIPE_Server/controller/QnaController.java +++ b/src/main/java/umc/IRECIPE_Server/controller/QnaController.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -62,8 +63,11 @@ public ApiResponse<List<QnaResponseDTO.getQnaDTO>> getQna(@PathVariable("postId" public ApiResponse<QnaResponseDTO.updateQnaDTO> updateQna(@PathVariable("qnaId") Long qnaId, @RequestPart(name = "QnaRequestDTO", required = false) QnaRequestDTO.updateQna request, @RequestPart(value = "file", required = false) MultipartFile file) throws IOException { + // memberId 값 세팅 + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String memberId = authentication.getName(); - qnaService.updateQna(qnaId, request, file); + qnaService.updateQna(memberId, qnaId, request, file); return ApiResponse.onSuccess(QnaConverter.updateQnaResult(qnaId)); } @@ -74,7 +78,11 @@ public ApiResponse<QnaResponseDTO.updateQnaDTO> updateQna(@PathVariable("qnaId") ) @DeleteMapping("/qna/{qnaId}") public ApiResponse<QnaResponseDTO.deleteQnaDTO> deleteQna(@PathVariable("qnaId") Long qnaId) { - qnaService.deleteQna(qnaId); + // memberId 값 세팅 + Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); + String memberId = authentication.getName(); + + qnaService.deleteQna(memberId, qnaId); return ApiResponse.onSuccess(QnaConverter.deleteQnaResult()); } } \ No newline at end of file diff --git a/src/main/java/umc/IRECIPE_Server/service/QnaService.java b/src/main/java/umc/IRECIPE_Server/service/QnaService.java index 7e0080a..2efad8f 100644 --- a/src/main/java/umc/IRECIPE_Server/service/QnaService.java +++ b/src/main/java/umc/IRECIPE_Server/service/QnaService.java @@ -17,8 +17,8 @@ public interface QnaService { public List<QnaResponseDTO.getQnaDTO> getQna(Long postId); // Qna 수정 - public void updateQna(Long qnaId, QnaRequestDTO.updateQna request, MultipartFile file) throws IOException; + public void updateQna(String memberId, Long qnaId, QnaRequestDTO.updateQna request, MultipartFile file) throws IOException; // Qna 삭제 - public void deleteQna(Long qnaId); + public void deleteQna(String memberId, Long qnaId); } diff --git a/src/main/java/umc/IRECIPE_Server/service/QnaServiceImpl.java b/src/main/java/umc/IRECIPE_Server/service/QnaServiceImpl.java index d4800a6..9dc452d 100644 --- a/src/main/java/umc/IRECIPE_Server/service/QnaServiceImpl.java +++ b/src/main/java/umc/IRECIPE_Server/service/QnaServiceImpl.java @@ -95,11 +95,20 @@ public List<QnaResponseDTO.getQnaDTO> getQna(Long postId) { // Qna 수정 @Override - public void updateQna(Long qnaId, QnaRequestDTO.updateQna request, MultipartFile file) throws IOException { + public void updateQna(String memberId, Long qnaId, QnaRequestDTO.updateQna request, MultipartFile file) throws IOException { // 해당 Qna 조회 Qna qna = qnaRepository.findById(qnaId).orElseThrow(() -> new GeneralException(ErrorStatus.POST_QNA_NOT_FOUND)); + // 작성자만 수정 가능 + Optional<Member> member = memberRepository.findByPersonalId(memberId); + if (member.isEmpty()) { + throw new GeneralException(ErrorStatus.MEMBER_NOT_FOUND); + } + if (member.get().getId() != qna.getMember().getId()) { + throw new GeneralException(ErrorStatus._FORBIDDEN); + } + // 기존에 저장된 사진 존재 시 S3 에서 삭제 String oldUrl = qna.getImageUrl(); if (oldUrl != null) { @@ -119,7 +128,17 @@ public void updateQna(Long qnaId, QnaRequestDTO.updateQna request, MultipartFile // Qna 삭제 @Override - public void deleteQna(Long qnaId) { + public void deleteQna(String memberId, Long qnaId) { + + // 작성자만 삭제 가능 + Qna qnaWriter = qnaRepository.findById(qnaId).orElseThrow(() -> new GeneralException(ErrorStatus.POST_QNA_NOT_FOUND)); + Optional<Member> member = memberRepository.findByPersonalId(memberId); + if (member.isEmpty()) { + throw new GeneralException(ErrorStatus.MEMBER_NOT_FOUND); + } + if (member.get().getId() != qnaWriter.getMember().getId()) { + throw new GeneralException(ErrorStatus._FORBIDDEN); + } // 부모 댓글과 함께 조회 Qna qna = qnaCustomRepository.findQnaByIdWithParent(qnaId).orElseThrow(() -> new GeneralException(ErrorStatus.POST_QNA_NOT_FOUND));