From 759823362b2e58f6914e3f581be4afc7762efcce Mon Sep 17 00:00:00 2001 From: chaeshee0908 Date: Wed, 19 Jul 2023 16:13:08 +0900 Subject: [PATCH] =?UTF-8?q?[refactor]=20community=20=EA=B5=AC=EC=A1=B0=20?= =?UTF-8?q?=EB=A6=AC=ED=8E=99=ED=86=A0=EB=A7=81=20=EB=B0=8F=20=EC=84=B8?= =?UTF-8?q?=EB=B6=80=20=EB=82=B4=EC=9A=A9=20=EB=A6=AC=ED=8E=99=ED=86=A0?= =?UTF-8?q?=EB=A7=81=20#168?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/post/CommunityController.java | 25 +- .../domain/post/domain/ActTag.java | 9 +- .../domain/post/domain/Comment.java | 13 +- .../domain/post/domain/Like.java | 10 +- .../domain/post/domain/PartTag.java | 9 +- .../domain/post/domain/Path.java | 7 +- .../domain/post/domain/Post.java | 43 +++- .../domain/post/domain/Scrap.java | 10 +- .../domain/post/domain/SortBy.java | 9 +- .../domain/post/dto/CardPostDTO.java | 51 ++-- .../domain/post/dto/CommentDTO.java | 23 +- .../domain/post/dto/CountDTO.java | 11 +- .../domain/post/dto/MainPostDTO.java | 28 ++- .../domain/post/dto/PostDTO.java | 62 +++-- .../domain/post/dto/TagListPostDTO.java | 64 +++++ .../dto/request/AddCommentRequestDTO.java | 17 +- .../post/dto/request/AddPostRequestDTO.java | 41 ++-- .../post/dto/request/GetScrapRequestDTO.java | 19 +- .../post/dto/request/TokenRequestDTO.java | 15 +- .../dto/response/CardPostResponseDTO.java | 12 +- .../dto/response/ClickLikeResponseDTO.java | 11 +- .../dto/response/ClickScrapResponseDTO.java | 11 +- .../dto/response/CommentIdResponseDTO.java | 13 +- .../post/dto/response/CommentResponseDTO.java | 12 +- .../post/dto/response/GetPathResponseDTO.java | 10 +- .../post/dto/response/GetPostResponseDTO.java | 18 +- .../dto/response/GetScrapResponseDTO.java | 18 +- .../dto/response/MainPostResponseDTO.java | 12 +- .../post/dto/response/PostIdResponseDTO.java | 14 +- .../domain/post/mapper/CommentMapper.java | 25 ++ .../domain/post/mapper/PostMapper.java | 178 ++++++++++++++ .../post/repository/CommentRepository.java | 1 - .../post/repository/LikeRepository.java | 1 - .../post/repository/PostRepository.java | 1 - .../post/repository/ScrapRepository.java | 1 - .../domain/post/service/CommentService.java | 29 ++- .../domain/post/service/PostService.java | 223 +++++------------- .../infra/s3/SourceService.java | 2 +- 38 files changed, 716 insertions(+), 342 deletions(-) create mode 100644 src/main/java/prefolio/prefolioserver/domain/post/dto/TagListPostDTO.java create mode 100644 src/main/java/prefolio/prefolioserver/domain/post/mapper/CommentMapper.java create mode 100644 src/main/java/prefolio/prefolioserver/domain/post/mapper/PostMapper.java diff --git a/src/main/java/prefolio/prefolioserver/domain/post/CommunityController.java b/src/main/java/prefolio/prefolioserver/domain/post/CommunityController.java index 811a842..75284f4 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/CommunityController.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/CommunityController.java @@ -7,6 +7,7 @@ import io.swagger.v3.oas.annotations.responses.ApiResponses; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; import prefolio.prefolioserver.domain.post.domain.SortBy; @@ -18,7 +19,7 @@ import prefolio.prefolioserver.domain.post.service.PostService; import prefolio.prefolioserver.domain.user.service.UserDetailsImpl; - +@Slf4j @RestController @SecurityRequirement(name = "Bearer Authentication") @RequestMapping("/posts") @@ -50,7 +51,8 @@ public CommonResponseDTO getAllPosts( @RequestParam(name = "actTagList", required = false) String actTagList, @RequestParam(name = "pageNum") Integer pageNum, @RequestParam(name = "limit") Integer limit - ) { + ) { + log.info("메인피드 게시물 조회"); return CommonResponseDTO.onSuccess( "메인피드 게시물 조회 성공", postService.getAllPosts(authUser, sortBy, partTagList, actTagList, pageNum, limit) @@ -82,6 +84,7 @@ public CommonResponseDTO getSearchPosts( @RequestParam(name = "limit") Integer limit, @RequestParam(name = "searchWord") String searchWord ) { + log.info("검색 결과 조회"); return CommonResponseDTO.onSuccess( "검색 결과 게시물 조회 성공", postService.getSearchPosts(authUser, sortBy, partTagList, actTagList, pageNum, limit, searchWord)); @@ -107,6 +110,7 @@ public CommonResponseDTO addPost( @AuthenticationPrincipal UserDetailsImpl authUser, @RequestBody AddPostRequestDTO addPostRequest ) { + log.info("글 작성"); return CommonResponseDTO.onSuccess("글 생성 성공", postService.savePost(authUser, addPostRequest)); } @@ -131,6 +135,7 @@ public CommonResponseDTO updatePost( @PathVariable Long postId, @RequestBody AddPostRequestDTO addPostRequest ) { + log.info("글 수정"); return CommonResponseDTO.onSuccess("글 수정 성공", postService.updatePost(authUser, postId, addPostRequest)); } @Operation( @@ -153,6 +158,7 @@ public CommonResponseDTO deletePost( @AuthenticationPrincipal UserDetailsImpl authUser, @PathVariable Long postId ) { + log.info("글 삭제"); return CommonResponseDTO.onSuccess("글 삭제 성공", postService.deletePost(authUser, postId)); } @@ -176,6 +182,7 @@ public CommonResponseDTO getPost( @AuthenticationPrincipal UserDetailsImpl authUser, @PathVariable(name = "postId") Long postId ) { + log.info("게시글 조회"); return CommonResponseDTO.onSuccess("게시글 조회 성공", postService.findPostById(authUser, postId)); } @@ -201,7 +208,9 @@ public CommonResponseDTO findPostByUserId( @RequestParam(name = "partTagList", required = false) String partTagList, @RequestParam(name = "actTagList", required = false) String actTagList, @RequestParam(name = "pageNum") Integer pageNum, - @RequestParam(name = "limit") Integer limit) { + @RequestParam(name = "limit") Integer limit + ) { + log.info("유저 게시글 모두 조회"); return CommonResponseDTO.onSuccess("SUCCESS", postService.findPostByUserId(authUser, userId, partTagList, actTagList, pageNum, limit)); } @@ -226,7 +235,9 @@ public CommonResponseDTO findScrapByUserId( @RequestParam(name = "partTagList", required = false) String partTagList, @RequestParam(name = "actTagList", required = false) String actTagList, @RequestParam(name = "pageNum") Integer pageNum, - @RequestParam(name = "limit") Integer limit) { + @RequestParam(name = "limit") Integer limit + ) { + log.info("스크랩한 게시글 모두 조회"); return CommonResponseDTO.onSuccess("SUCCESS", postService.findMyScrap(authUser, partTagList, actTagList, pageNum, limit)); } @@ -249,6 +260,7 @@ public CommonResponseDTO clickLike( @AuthenticationPrincipal UserDetailsImpl authUser, @PathVariable(name = "postId") Long postId ) { + log.info("좋아요 버튼 누르기"); return CommonResponseDTO.onSuccess("SUCCESS", postService.clickLike(authUser, postId)); } @@ -272,6 +284,7 @@ public CommonResponseDTO clickScrap( @AuthenticationPrincipal UserDetailsImpl authUser, @PathVariable(name = "postId") Long postId ) { + log.info("스크랩 버튼 누르기"); return CommonResponseDTO.onSuccess("SUCCESS", postService.clickScrap(authUser, postId)); } @@ -295,6 +308,7 @@ public CommonResponseDTO getComments( @RequestParam(name = "pageNum") Integer pageNum, @RequestParam(name = "limit") Integer limit ) { + log.info("댓글 조회"); return CommonResponseDTO.onSuccess( "댓글 조회 성공", commentService.getComments(authUser, pageNum, limit) @@ -321,6 +335,7 @@ public CommonResponseDTO addPost( @AuthenticationPrincipal UserDetailsImpl authUser, @RequestBody AddCommentRequestDTO addCommentRequest ) { + log.info("댓글 작성"); return CommonResponseDTO.onSuccess("댓글 생성 성공", commentService.saveComment(authUser, addCommentRequest)); } @@ -345,6 +360,7 @@ public CommonResponseDTO updateComment( @PathVariable Long commentId, @RequestBody AddCommentRequestDTO addCommentRequest ) { + log.info("댓글 수정"); return CommonResponseDTO.onSuccess("댓글 수정 성공", commentService.updateComment(authUser, commentId, addCommentRequest)); } @Operation( @@ -367,6 +383,7 @@ public CommonResponseDTO deleteComment( @AuthenticationPrincipal UserDetailsImpl authUser, @PathVariable Long commentId ) { + log.info("댓글 삭제"); return CommonResponseDTO.onSuccess("댓글 삭제 성공", commentService.deleteComment(authUser, commentId)); } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/domain/ActTag.java b/src/main/java/prefolio/prefolioserver/domain/post/domain/ActTag.java index 3ce24c7..0d67b32 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/domain/ActTag.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/domain/ActTag.java @@ -1,17 +1,16 @@ package prefolio.prefolioserver.domain.post.domain; +import lombok.Getter; + +@Getter public enum ActTag { SOCIETY("society"), PROJECT("project"), INTERN("intern"); - private String actTag; + private final String actTag; ActTag(String actTag) { this.actTag = actTag; } - - public String getActTag() { - return this.actTag; - } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/domain/Comment.java b/src/main/java/prefolio/prefolioserver/domain/post/domain/Comment.java index 9591647..78772bf 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/domain/Comment.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/domain/Comment.java @@ -16,7 +16,6 @@ @Entity @Getter -@Setter @Table(name = "Comments") @NoArgsConstructor @Where(clause = "deleted_at IS NULL") @@ -52,7 +51,7 @@ public class Comment { private Date deletedAt; @Builder - public Comment( + private Comment( Long id, User user, Post post, @@ -69,6 +68,16 @@ public Comment( this.updatedAt = updatedAt; this.deletedAt = deletedAt; } + + public static Comment of(User user, AddCommentRequestDTO addCommentRequestDTO, Date createdAt) { + return Comment.builder() + .user(user) + .post(addCommentRequestDTO.getPost()) + .contents(addCommentRequestDTO.getContents()) + .createdAt(createdAt) + .build(); + } + public void update(AddCommentRequestDTO addCommentRequestDTO) { this.contents = addCommentRequestDTO.getContents(); this.updatedAt = new Date(); diff --git a/src/main/java/prefolio/prefolioserver/domain/post/domain/Like.java b/src/main/java/prefolio/prefolioserver/domain/post/domain/Like.java index 25733d8..55f6f81 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/domain/Like.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/domain/Like.java @@ -28,9 +28,17 @@ public class Like { private Post post; @Builder - public Like(Long id, User user, Post post) { + private Like(Long id, User user, Post post) { this.id = id; this.user = user; this.post = post; } + + public static Like of(Long id, User user, Post post) { + return Like.builder() + .id(id) + .user(user) + .post(post) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/domain/PartTag.java b/src/main/java/prefolio/prefolioserver/domain/post/domain/PartTag.java index d271b7d..e658fe6 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/domain/PartTag.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/domain/PartTag.java @@ -1,17 +1,16 @@ package prefolio.prefolioserver.domain.post.domain; +import lombok.Getter; + +@Getter public enum PartTag { PLAN("plan"), DEV("dev"), DESIGN("design"); - private String partTag; + private final String partTag; PartTag(String partTag) { this.partTag = partTag; } - - public String getPartTag() { - return this.partTag; - } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/domain/Path.java b/src/main/java/prefolio/prefolioserver/domain/post/domain/Path.java index 1786077..b059e62 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/domain/Path.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/domain/Path.java @@ -1,5 +1,8 @@ package prefolio.prefolioserver.domain.post.domain; +import lombok.Getter; + +@Getter public enum Path { PROFILE("profile"), IMAGE("image"), @@ -10,8 +13,4 @@ public enum Path { Path(String path) { this.path = path; } - - public String getPath() { - return this.path; - } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/domain/Post.java b/src/main/java/prefolio/prefolioserver/domain/post/domain/Post.java index 3a99d87..c532767 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/domain/Post.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/domain/Post.java @@ -10,6 +10,7 @@ import lombok.Setter; import org.hibernate.annotations.SQLDelete; import org.hibernate.annotations.Where; +import prefolio.prefolioserver.domain.post.dto.PostDTO; import prefolio.prefolioserver.domain.post.dto.request.AddPostRequestDTO; import prefolio.prefolioserver.domain.user.domain.User; @@ -18,7 +19,6 @@ @Entity @Getter -@Setter @Table(name = "Posts") @NoArgsConstructor @Where(clause = "deleted_at IS NULL") @@ -94,8 +94,7 @@ public class Post { private Date deletedAt; @Builder - public Post( - Long id, + private Post( User user, String thumbnail, String title, @@ -114,7 +113,6 @@ public Post( Date updatedAt, Date deletedAt ) { - this.id = id; this.user = user; this.thumbnail = thumbnail; this.title = title; @@ -133,6 +131,28 @@ public Post( this.updatedAt = updatedAt; this.deletedAt = deletedAt; } + + // 정적 팩토리 메소드 + public static Post of(User user, AddPostRequestDTO postDTO, Integer hits, Integer likes, Integer scraps, Date createdAt) { + return Post.builder() + .user(user) + .thumbnail(postDTO.getThumbnail()) + .title(postDTO.getTitle()) + .startDate(postDTO.getStartDate()) + .endDate(postDTO.getEndDate()) + .contribution(postDTO.getContribution()) + .task(postDTO.getTask()) + .tools(postDTO.getTools()) + .partTag(postDTO.getPartTag()) + .actTag(postDTO.getActTag()) + .contents(postDTO.getContents()) + .hits(hits) + .likes(likes) + .scraps(scraps) + .createdAt(createdAt) + .build(); + } + public void update(AddPostRequestDTO addPostRequestDTO) { this.thumbnail = addPostRequestDTO.getThumbnail(); this.title = addPostRequestDTO.getTitle(); @@ -146,4 +166,19 @@ public void update(AddPostRequestDTO addPostRequestDTO) { this.contents = addPostRequestDTO.getContents(); this.updatedAt = new Date(); } + + // 조회수 업데이트 + public void updateHits(Integer hits) { + this.hits = hits; + } + + // 좋아요 업데이트 + public void updateLikes(Integer likes) { + this.likes = likes; + } + + // 스크랩수 업데이트 + public void updateScraps(Integer scraps) { + this.scraps = scraps; + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/domain/Scrap.java b/src/main/java/prefolio/prefolioserver/domain/post/domain/Scrap.java index 2b1e83b..dcacf53 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/domain/Scrap.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/domain/Scrap.java @@ -29,9 +29,17 @@ public class Scrap { private Post post; @Builder - public Scrap(Long id, User user, Post post) { + private Scrap(Long id, User user, Post post) { this.id = id; this.user = user; this.post = post; } + + public static Scrap of(Long id, User user, Post post) { + return Scrap.builder() + .id(id) + .user(user) + .post(post) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/domain/SortBy.java b/src/main/java/prefolio/prefolioserver/domain/post/domain/SortBy.java index 34153f6..b0ee8da 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/domain/SortBy.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/domain/SortBy.java @@ -1,17 +1,16 @@ package prefolio.prefolioserver.domain.post.domain; +import lombok.Getter; + +@Getter public enum SortBy { CREATED_AT("createdAt"), LIKES("likes"), HITS("hits"); - private String sortBy; + private final String sortBy; SortBy(String sortBy) { this.sortBy = sortBy; } - - public String getSortBy() { - return this.sortBy; - } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/CardPostDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/CardPostDTO.java index 59fb7a7..1f752b7 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/CardPostDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/CardPostDTO.java @@ -1,7 +1,6 @@ package prefolio.prefolioserver.domain.post.dto; import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -12,9 +11,7 @@ import java.util.List; @Getter -@Builder @NoArgsConstructor -@AllArgsConstructor public class CardPostDTO { private Long postId; @@ -28,27 +25,43 @@ public class CardPostDTO { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul") private Date createdAt; - public CardPostDTO(Scrap scrap, List partTag, List actTag, Boolean isScrapped) { - this.postId = scrap.getPost().getId(); - this.thumbnail = scrap.getPost().getThumbnail(); - this.title = scrap.getPost().getTitle(); + @Builder + private CardPostDTO(Long postId, String thumbnail, String title, List partTag, List actTag, Integer hits, Boolean isScrapped, Boolean isMine, Date createdAt) { + this.postId = postId; + this.thumbnail = thumbnail; + this.title = title; this.partTag = partTag; this.actTag = actTag; - this.hits = scrap.getPost().getHits(); + this.hits = hits; this.isScrapped = isScrapped; - this.createdAt = scrap.getPost().getCreatedAt(); + this.isMine = isMine; + this.createdAt = createdAt; } - public CardPostDTO(Post post, List partTag, List actTag, Boolean isScrapped, Boolean isMine) { - this.postId = post.getId(); - this.thumbnail = post.getThumbnail(); - this.title = post.getTitle(); - this.partTag = partTag; - this.actTag = actTag; - this.hits = post.getHits(); - this.isScrapped = isScrapped; - this.createdAt = post.getCreatedAt(); - this.isMine = isMine; + public static CardPostDTO scrapToDto(Scrap scrap, List partTag, List actTag, Boolean isScrapped) { + return CardPostDTO.builder() + .postId(scrap.getPost().getId()) + .thumbnail(scrap.getPost().getThumbnail()) + .title(scrap.getPost().getTitle()) + .partTag(partTag) + .actTag(actTag) + .hits(scrap.getPost().getHits()) + .isScrapped(isScrapped) + .createdAt(scrap.getPost().getCreatedAt()) + .build(); } + public static CardPostDTO postToDto(Post post, List partTag, List actTag, Boolean isScrapped, Boolean isMine) { + return CardPostDTO.builder() + .postId(post.getId()) + .thumbnail(post.getThumbnail()) + .title(post.getTitle()) + .partTag(partTag) + .actTag(actTag) + .hits(post.getHits()) + .isScrapped(isScrapped) + .createdAt(post.getCreatedAt()) + .isMine(isMine) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/CommentDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/CommentDTO.java index 293a201..d033a46 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/CommentDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/CommentDTO.java @@ -1,7 +1,6 @@ package prefolio.prefolioserver.domain.post.dto; import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -10,9 +9,7 @@ import java.util.Date; @Getter -@Builder @NoArgsConstructor -@AllArgsConstructor public class CommentDTO { private String nickname; @@ -21,10 +18,20 @@ public class CommentDTO { @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul") private Date createdAt; - public CommentDTO(Comment comment){ - this.nickname = comment.getUser().getNickname(); - this.profileImage = comment.getUser().getProfileImage(); - this.contents = comment.getContents(); - this.createdAt = comment.getCreatedAt(); + @Builder + private CommentDTO(String nickname, String profileImage, String contents, Date createdAt) { + this.nickname = nickname; + this.profileImage = profileImage; + this.contents = contents; + this.createdAt = createdAt; + } + + public static CommentDTO from(Comment comment){ + return CommentDTO.builder() + .nickname(comment.getUser().getNickname()) + .profileImage(comment.getUser().getProfileImage()) + .contents(comment.getContents()) + .createdAt(comment.getCreatedAt()) + .build(); } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/CountDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/CountDTO.java index 1615fb0..8010f1f 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/CountDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/CountDTO.java @@ -1,21 +1,26 @@ package prefolio.prefolioserver.domain.post.dto; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @Getter -@Builder @NoArgsConstructor public class CountDTO { private int likes; private int scraps; - public CountDTO(int likes, int scraps) { + @Builder + private CountDTO(int likes, int scraps) { this.likes = likes; this.scraps = scraps; } + public static CountDTO of(int likes, int scraps) { + return CountDTO.builder() + .likes(likes) + .scraps(scraps) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/MainPostDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/MainPostDTO.java index a3f092d..014c57b 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/MainPostDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/MainPostDTO.java @@ -8,9 +8,7 @@ import java.util.List; @Getter -@Builder @NoArgsConstructor -@AllArgsConstructor public class MainPostDTO { private Long id; @@ -24,15 +22,29 @@ public class MainPostDTO { private Date createdAt; private Boolean isMine; - public MainPostDTO(Post post, List partTag, List actTag, Boolean isScrapped, Boolean isMine) { - this.id = post.getId(); - this.thumbnail = post.getThumbnail(); - this.title = post.getTitle(); + @Builder + private MainPostDTO(Long id, String thumbnail, String title, List partTag, List actTag, Integer hits, Boolean isScrapped, Date createdAt, Boolean isMine) { + this.id = id; + this.thumbnail = thumbnail; + this.title = title; this.partTag = partTag; this.actTag = actTag; - this.hits = post.getHits(); + this.hits = hits; this.isScrapped = isScrapped; - this.createdAt = post.getCreatedAt(); + this.createdAt = createdAt; this.isMine = isMine; } + + public static MainPostDTO of(Post post, List partTag, List actTag, Boolean isScrapped, Boolean isMine) { + return MainPostDTO.builder() + .id(post.getId()) + .thumbnail(post.getThumbnail()) + .title(post.getTitle()) + .partTag(partTag) + .actTag(actTag) + .hits(post.getHits()) + .isScrapped(isScrapped) + .isMine(isMine) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/PostDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/PostDTO.java index f490b8e..c1391fc 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/PostDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/PostDTO.java @@ -1,47 +1,75 @@ package prefolio.prefolioserver.domain.post.dto; import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import prefolio.prefolioserver.domain.post.domain.Post; +import prefolio.prefolioserver.domain.user.domain.User; import java.util.Date; -import java.util.List; @Getter -@Builder @NoArgsConstructor -@AllArgsConstructor public class PostDTO { + private Long id; + private User user; private String thumbnail; private String title; private String startDate; private String endDate; private Integer contribution; private String task; - private List tools; - private List partTag; - private List actTag; + private String tools; + private String partTag; + private String actTag; private String contents; private Integer hits; + private Integer likes; + private Integer scraps; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul") private Date createdAt; - public PostDTO(Post post, List tools, List partTag, ListactTag) { - this.thumbnail = post.getThumbnail(); - this.title = post.getTitle(); - this.startDate = post.getStartDate(); - this.endDate = post.getEndDate(); - this.contribution = post.getContribution(); - this.task = post.getTask(); + @Builder + private PostDTO(Long id, User user, String thumbnail, String title, String startDate, String endDate, Integer contribution, String task, String tools, String partTag, String actTag, String contents, Integer hits, Integer likes, Integer scraps, Date createdAt) { + this.id = id; + this.user = user; + this.thumbnail = thumbnail; + this.title = title; + this.startDate = startDate; + this.endDate = endDate; + this.contribution = contribution; + this.task = task; this.tools = tools; this.partTag = partTag; this.actTag = actTag; - this.contents = post.getContents(); - this.hits = post.getHits(); - this.createdAt = post.getCreatedAt(); + this.contents = contents; + this.hits = hits; + this.likes = likes; + this.scraps = scraps; + this.createdAt = createdAt; + } + + public static PostDTO entityToDto(Post post) { + return PostDTO.builder() + .id(post.getId()) + .user(post.getUser()) + .thumbnail(post.getThumbnail()) + .title(post.getTitle()) + .startDate(post.getStartDate()) + .endDate(post.getEndDate()) + .contribution(post.getContribution()) + .task(post.getTask()) + .tools(post.getTools()) + .partTag(post.getPartTag()) + .actTag(post.getActTag()) + .contents(post.getContents()) + .hits(post.getHits()) + .likes(post.getLikes()) + .scraps(post.getScraps()) + .createdAt(post.getCreatedAt()) + .build(); } } \ No newline at end of file diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/TagListPostDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/TagListPostDTO.java new file mode 100644 index 0000000..2f27465 --- /dev/null +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/TagListPostDTO.java @@ -0,0 +1,64 @@ +package prefolio.prefolioserver.domain.post.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import prefolio.prefolioserver.domain.post.domain.Post; + +import java.util.Date; +import java.util.List; + +@Getter +@NoArgsConstructor +public class TagListPostDTO { + private Long id; + private String thumbnail; + private String title; + private String startDate; + private String endDate; + private Integer contribution; + private String task; + private List tools; + private List partTag; + private List actTag; + private String contents; + private Integer hits; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "Asia/Seoul") + private Date createdAt; + + @Builder + private TagListPostDTO(Long id, String thumbnail, String title, String startDate, String endDate, Integer contribution, String task, List tools, List partTag, List actTag, String contents, Integer hits, Date createdAt) { + this.id = id; + this.thumbnail = thumbnail; + this.title = title; + this.startDate = startDate; + this.endDate = endDate; + this.contribution = contribution; + this.task = task; + this.tools = tools; + this.partTag = partTag; + this.actTag = actTag; + this.contents = contents; + this.hits = hits; + this.createdAt = createdAt; + } + + public static TagListPostDTO of(Post post, List tools, List partTag, ListactTag) { + return TagListPostDTO.builder() + .id(post.getId()) + .thumbnail(post.getThumbnail()) + .title(post.getTitle()) + .startDate(post.getStartDate()) + .endDate(post.getEndDate()) + .contribution(post.getContribution()) + .task(post.getTask()) + .tools(tools) + .partTag(partTag) + .actTag(actTag) + .contents(post.getContents()) + .hits(post.getHits()) + .createdAt(post.getCreatedAt()) + .build(); + } +} diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/request/AddCommentRequestDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/request/AddCommentRequestDTO.java index 9d44364..33c1463 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/request/AddCommentRequestDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/request/AddCommentRequestDTO.java @@ -1,6 +1,5 @@ package prefolio.prefolioserver.domain.post.dto.request; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -8,16 +7,22 @@ import prefolio.prefolioserver.domain.post.domain.Post; @Getter -@Builder @NoArgsConstructor -@AllArgsConstructor public class AddCommentRequestDTO { private Post post; private String contents; - public AddCommentRequestDTO(Comment comment) { - this.post = comment.getPost(); - this.contents = comment.getContents(); + @Builder + private AddCommentRequestDTO(Post post, String contents) { + this.post = post; + this.contents = contents; + } + + public static AddCommentRequestDTO from(Comment comment) { + return AddCommentRequestDTO.builder() + .post(comment.getPost()) + .contents(comment.getContents()) + .build(); } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/request/AddPostRequestDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/request/AddPostRequestDTO.java index 1f39b7c..2f14099 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/request/AddPostRequestDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/request/AddPostRequestDTO.java @@ -1,15 +1,12 @@ package prefolio.prefolioserver.domain.post.dto.request; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import prefolio.prefolioserver.domain.post.domain.Post; @Getter -@Builder @NoArgsConstructor -@AllArgsConstructor public class AddPostRequestDTO { private String thumbnail; @@ -23,16 +20,32 @@ public class AddPostRequestDTO { private String actTag; private String contents; - public AddPostRequestDTO (Post post) { - this.thumbnail = post.getThumbnail(); - this.title = post.getTitle(); - this.startDate = post.getStartDate(); - this.endDate = post.getEndDate(); - this.contribution = post.getContribution(); - this.task = post.getTask(); - this.tools = post.getTools(); - this.partTag = post.getPartTag(); - this.actTag = post.getActTag(); - this.contents = post.getContents(); + @Builder + private AddPostRequestDTO(String thumbnail, String title, String startDate, String endDate, Integer contribution, String task, String tools, String partTag, String actTag, String contents) { + this.thumbnail = thumbnail; + this.title = title; + this.startDate = startDate; + this.endDate = endDate; + this.contribution = contribution; + this.task = task; + this.tools = tools; + this.partTag = partTag; + this.actTag = actTag; + this.contents = contents; + } + + public static AddPostRequestDTO from(Post post) { + return AddPostRequestDTO.builder() + .thumbnail(post.getThumbnail()) + .title(post.getTitle()) + .startDate(post.getStartDate()) + .endDate(post.getEndDate()) + .contribution(post.getContribution()) + .task(post.getTask()) + .tools(post.getTools()) + .partTag(post.getPartTag()) + .actTag(post.getActTag()) + .contents(post.getContents()) + .build(); } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/request/GetScrapRequestDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/request/GetScrapRequestDTO.java index 2b5b052..60dfd69 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/request/GetScrapRequestDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/request/GetScrapRequestDTO.java @@ -1,6 +1,5 @@ package prefolio.prefolioserver.domain.post.dto.request; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -8,18 +7,22 @@ import prefolio.prefolioserver.domain.post.domain.Scrap; @Getter -@Builder @NoArgsConstructor -@AllArgsConstructor public class GetScrapRequestDTO { private Long scrapId; - private Post post; - /* Dto -> Entity */ - public GetScrapRequestDTO(Scrap scrap) { - this.scrapId = scrap.getId(); - this.post = scrap.getPost(); + @Builder + private GetScrapRequestDTO(Long scrapId, Post post) { + this.scrapId = scrapId; + this.post = post; + } + + public static GetScrapRequestDTO from(Scrap scrap) { + return GetScrapRequestDTO.builder() + .scrapId(scrap.getId()) + .post(scrap.getPost()) + .build(); } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/request/TokenRequestDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/request/TokenRequestDTO.java index 357fd82..4855b6e 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/request/TokenRequestDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/request/TokenRequestDTO.java @@ -1,16 +1,23 @@ package prefolio.prefolioserver.domain.post.dto.request; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @Getter -@Builder @NoArgsConstructor -@AllArgsConstructor public class TokenRequestDTO { - private String refreshToken; + + @Builder + private TokenRequestDTO(String refreshToken) { + this.refreshToken = refreshToken; + } + + public static TokenRequestDTO from(String refreshToken) { + return TokenRequestDTO.builder() + .refreshToken(refreshToken) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/CardPostResponseDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/CardPostResponseDTO.java index 5bb99ae..20e6ddf 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/CardPostResponseDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/CardPostResponseDTO.java @@ -8,7 +8,6 @@ import java.util.List; @Getter -@Builder @NoArgsConstructor public class CardPostResponseDTO { @@ -19,9 +18,18 @@ public class CardPostResponseDTO { private Long totalResults; - public CardPostResponseDTO(List cardPosts, Integer totalPages, Long totalResults) { + @Builder + private CardPostResponseDTO(List cardPosts, Integer totalPages, Long totalResults) { this.cardPosts = cardPosts; this.totalPages = totalPages; this.totalResults = totalResults; } + + public static CardPostResponseDTO of(List cardPosts, Integer totalPages, Long totalResults) { + return CardPostResponseDTO.builder() + .cardPosts(cardPosts) + .totalPages(totalPages) + .totalResults(totalResults) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/ClickLikeResponseDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/ClickLikeResponseDTO.java index 7bdad59..ace4c97 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/ClickLikeResponseDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/ClickLikeResponseDTO.java @@ -5,15 +5,22 @@ import lombok.NoArgsConstructor; @Getter -@Builder @NoArgsConstructor public class ClickLikeResponseDTO { private Long likes; private Boolean isLiked; - public ClickLikeResponseDTO(Long likes, Boolean isLiked) { + @Builder + private ClickLikeResponseDTO(Long likes, Boolean isLiked) { this.likes = likes; this.isLiked = isLiked; } + + public static ClickLikeResponseDTO of(Long likes, Boolean isLiked) { + return ClickLikeResponseDTO.builder() + .likes(likes) + .isLiked(isLiked) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/ClickScrapResponseDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/ClickScrapResponseDTO.java index c98986a..db77a31 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/ClickScrapResponseDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/ClickScrapResponseDTO.java @@ -5,15 +5,22 @@ import lombok.NoArgsConstructor; @Getter -@Builder @NoArgsConstructor public class ClickScrapResponseDTO { private Long scraps; private Boolean isScrapped; - public ClickScrapResponseDTO(Long scraps, Boolean isScrapped) { + @Builder + private ClickScrapResponseDTO(Long scraps, Boolean isScrapped) { this.scraps = scraps; this.isScrapped = isScrapped; } + + public static ClickScrapResponseDTO of(Long scraps, Boolean isScrapped) { + return ClickScrapResponseDTO.builder() + .scraps(scraps) + .isScrapped(isScrapped) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/CommentIdResponseDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/CommentIdResponseDTO.java index 658ad0a..d0462c8 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/CommentIdResponseDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/CommentIdResponseDTO.java @@ -1,20 +1,23 @@ package prefolio.prefolioserver.domain.post.dto.response; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import prefolio.prefolioserver.domain.post.domain.Comment; @Getter -@Builder @NoArgsConstructor -@AllArgsConstructor public class CommentIdResponseDTO { private Long commentId; - public CommentIdResponseDTO(Comment comment) { - this.commentId = comment.getId(); + @Builder + private CommentIdResponseDTO(Long commentId) { + this.commentId = commentId; + } + public static CommentIdResponseDTO from(Comment comment) { + return CommentIdResponseDTO.builder() + .commentId(comment.getId()) + .build(); } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/CommentResponseDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/CommentResponseDTO.java index a7fa16d..f8d972c 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/CommentResponseDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/CommentResponseDTO.java @@ -8,7 +8,6 @@ import java.util.List; @Getter -@Builder @NoArgsConstructor public class CommentResponseDTO { @@ -16,9 +15,18 @@ public class CommentResponseDTO { private Integer totalPages; private Long totalResults; - public CommentResponseDTO(List comments, Integer totalPages, Long totalResults) { + @Builder + private CommentResponseDTO(List comments, Integer totalPages, Long totalResults) { this.comments = comments; this.totalPages = totalPages; this.totalResults = totalResults; } + + public static CommentResponseDTO of(List comments, Integer totalPages, Long totalResults) { + return CommentResponseDTO.builder() + .comments(comments) + .totalPages(totalPages) + .totalResults(totalResults) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/GetPathResponseDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/GetPathResponseDTO.java index 5b01ccc..7cd068b 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/GetPathResponseDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/GetPathResponseDTO.java @@ -7,13 +7,17 @@ import java.net.URL; @Getter -@Builder @NoArgsConstructor public class GetPathResponseDTO { private URL url; + @Builder + private GetPathResponseDTO(URL url) {this.url = url;} - /* Entity -> Dto */ - public GetPathResponseDTO(URL url) {this.url = url;} + public static GetPathResponseDTO from(URL url) { + return GetPathResponseDTO.builder() + .url(url) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/GetPostResponseDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/GetPostResponseDTO.java index 1b41b74..e32584c 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/GetPostResponseDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/GetPostResponseDTO.java @@ -4,25 +4,35 @@ import lombok.Getter; import lombok.NoArgsConstructor; import prefolio.prefolioserver.domain.post.dto.CountDTO; -import prefolio.prefolioserver.domain.post.dto.PostDTO; +import prefolio.prefolioserver.domain.post.dto.TagListPostDTO; import prefolio.prefolioserver.domain.user.dto.UserDTO; @Getter -@Builder @NoArgsConstructor public class GetPostResponseDTO { - private PostDTO post; + private TagListPostDTO post; private CountDTO count; private UserDTO user; private Boolean isLiked; private Boolean isScrapped; - public GetPostResponseDTO(PostDTO post, CountDTO count, UserDTO user, Boolean isLiked, Boolean isScrapped) { + @Builder + private GetPostResponseDTO(TagListPostDTO post, CountDTO count, UserDTO user, Boolean isLiked, Boolean isScrapped) { this.post = post; this.count = count; this.user = user; this.isLiked = isLiked; this.isScrapped = isScrapped; } + + public static GetPostResponseDTO of(TagListPostDTO post, CountDTO count, UserDTO user, Boolean isLiked, Boolean isScrapped) { + return GetPostResponseDTO.builder() + .post(post) + .count(count) + .user(user) + .isLiked(isLiked) + .isScrapped(isScrapped) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/GetScrapResponseDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/GetScrapResponseDTO.java index d00ea22..a071b31 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/GetScrapResponseDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/GetScrapResponseDTO.java @@ -1,6 +1,5 @@ package prefolio.prefolioserver.domain.post.dto.response; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -8,18 +7,21 @@ import prefolio.prefolioserver.domain.post.domain.Scrap; @Getter -@Builder @NoArgsConstructor -@AllArgsConstructor public class GetScrapResponseDTO { private Long scrapId; private Post post; + @Builder + private GetScrapResponseDTO(Long scrapId, Post post) { + this.scrapId = scrapId; + this.post = post; + } - /* Entity -> Dto */ - public GetScrapResponseDTO(Scrap scrap) { - //public GetScrapResponseDTO(List scrap) { - this.scrapId = scrap.getId(); - this.post = scrap.getPost(); + public static GetScrapResponseDTO from(Scrap scrap) { + return GetScrapResponseDTO.builder() + .scrapId(scrap.getId()) + .post(scrap.getPost()) + .build(); } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/MainPostResponseDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/MainPostResponseDTO.java index 566290f..ffadd76 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/MainPostResponseDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/MainPostResponseDTO.java @@ -8,7 +8,6 @@ import java.util.List; @Getter -@Builder @NoArgsConstructor public class MainPostResponseDTO { @@ -16,9 +15,18 @@ public class MainPostResponseDTO { private Integer totalPages; private Long totalResults; - public MainPostResponseDTO(List posts, Integer totalPages, Long totalResults) { + @Builder + private MainPostResponseDTO(List posts, Integer totalPages, Long totalResults) { this.posts = posts; this.totalPages = totalPages; this.totalResults = totalResults; } + + public static MainPostResponseDTO of(List posts, Integer totalPages, Long totalResults) { + return MainPostResponseDTO.builder() + .posts(posts) + .totalPages(totalPages) + .totalResults(totalResults) + .build(); + } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/PostIdResponseDTO.java b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/PostIdResponseDTO.java index 263d499..f761ef9 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/dto/response/PostIdResponseDTO.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/dto/response/PostIdResponseDTO.java @@ -1,20 +1,24 @@ package prefolio.prefolioserver.domain.post.dto.response; -import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import prefolio.prefolioserver.domain.post.domain.Post; @Getter -@Builder @NoArgsConstructor -@AllArgsConstructor public class PostIdResponseDTO { private Long postId; - public PostIdResponseDTO(Post post) { - this.postId = post.getId(); + @Builder + private PostIdResponseDTO(Long postId) { + this.postId = postId; + } + + public static PostIdResponseDTO from(Post post) { + return PostIdResponseDTO.builder() + .postId(post.getId()) + .build(); } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/mapper/CommentMapper.java b/src/main/java/prefolio/prefolioserver/domain/post/mapper/CommentMapper.java new file mode 100644 index 0000000..0b9bd6f --- /dev/null +++ b/src/main/java/prefolio/prefolioserver/domain/post/mapper/CommentMapper.java @@ -0,0 +1,25 @@ +package prefolio.prefolioserver.domain.post.mapper; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.stereotype.Component; +import prefolio.prefolioserver.domain.post.domain.Comment; +import prefolio.prefolioserver.domain.post.dto.CommentDTO; + +import java.util.ArrayList; +import java.util.List; + +@Component +@RequiredArgsConstructor +public class CommentMapper { + + public List toCommentsDTOList(Page comments) { + List commentsDTOList = new ArrayList<>(); + for (Comment c : comments) { + CommentDTO commentDTO = CommentDTO.from(c); + commentsDTOList.add(commentDTO); + } + + return commentsDTOList; + } +} diff --git a/src/main/java/prefolio/prefolioserver/domain/post/mapper/PostMapper.java b/src/main/java/prefolio/prefolioserver/domain/post/mapper/PostMapper.java new file mode 100644 index 0000000..35493a7 --- /dev/null +++ b/src/main/java/prefolio/prefolioserver/domain/post/mapper/PostMapper.java @@ -0,0 +1,178 @@ +package prefolio.prefolioserver.domain.post.mapper; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.stereotype.Component; +import prefolio.prefolioserver.domain.post.domain.Like; +import prefolio.prefolioserver.domain.post.domain.Post; +import prefolio.prefolioserver.domain.post.domain.Scrap; +import prefolio.prefolioserver.domain.post.dto.CardPostDTO; +import prefolio.prefolioserver.domain.post.dto.MainPostDTO; +import prefolio.prefolioserver.domain.post.query.PostSpecification; +import prefolio.prefolioserver.domain.post.query.ScrapSpecification; +import prefolio.prefolioserver.domain.post.repository.LikeRepository; +import prefolio.prefolioserver.domain.post.repository.PostRepository; +import prefolio.prefolioserver.domain.post.repository.ScrapRepository; +import prefolio.prefolioserver.domain.user.domain.User; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +@Component +@RequiredArgsConstructor +public class PostMapper { + + private final PostRepository postRepository; + private final LikeRepository likeRepository; + private final ScrapRepository scrapRepository; + + public List toMainPostDTOList(Page posts, User user) { + List mainPostsList = new ArrayList<>(); + for (Post p : posts) { + String pTag = p.getPartTag(); + String aTag = p.getActTag(); + Boolean isScrapped = scrapRepository.countByUserIdAndPostId(user.getId(), p.getId()) != 0; + Boolean isMine = Objects.equals(p.getUser().getId(), user.getId()); + MainPostDTO mainPostDTO = MainPostDTO.of(p, parseTag(pTag), parseTag(aTag), isScrapped, isMine); + mainPostsList.add(mainPostDTO); + } + + return mainPostsList; + } + + public List postToCardPostDTOList(Page posts, User me, User user) { + List cardPostsDTOList = new ArrayList<>(); + for(Post post : posts){ + String pTag = post.getPartTag(); + String aTag = post.getActTag(); + Boolean isScrapped = scrapRepository.countByUserIdAndPostId(me.getId(), post.getId()) != 0; + Boolean isMine = me==user; + CardPostDTO dto = CardPostDTO.postToDto(post, parseTag(pTag), parseTag(aTag), isScrapped, isMine); + cardPostsDTOList.add(dto); + } + + return cardPostsDTOList; + } + + public List scrapToCardPostDTOList(Page scraps) { + List cardScrapsDTOList = new ArrayList<>(); + for(Scrap scrap : scraps){ + String pTag = scrap.getPost().getPartTag(); + String aTag = scrap.getPost().getActTag(); + Boolean isScrapped = true; + CardPostDTO dto = CardPostDTO.scrapToDto(scrap, parseTag(pTag), parseTag(aTag), isScrapped); + cardScrapsDTOList.add(dto); + } + + return cardScrapsDTOList; + } + + public Specification toPostTagQuery(String partTagList, String actTagList) { + Specification spec = (root, query, criteriaBuilder) -> null; + + if (partTagList != null && partTagList != "") // 쿼리에 partTag 들어왔을 때 + spec = spec.and(PostSpecification.likePartTag(parseTag(partTagList))); + if (actTagList != null && actTagList != "") + spec = spec.and(PostSpecification.likeActTag(parseTag(actTagList))); + + return spec; + } + + public Specification toScrapTagQuery(String partTagList, String actTagList) { + Specification spec = (root, query, criteriaBuilder) -> null; + + if (partTagList!=null){ + spec = spec.and(ScrapSpecification.likePostPartTag(parseTag(partTagList))); + } + if (actTagList!=null){ + spec = spec.and(ScrapSpecification.likePostActTag(parseTag(actTagList))); + } + return spec; + } + + public Specification toSearchPostTagQuery(String searchWord, String partTagList, String actTagList) { + Specification spec = PostSpecification.likeTitle(searchWord) // 검색 + .or(PostSpecification.likeContents(searchWord)); + + if (partTagList != null && partTagList != "") // 쿼리에 partTag 들어왔을 때 + spec = spec.and(PostSpecification.likePartTag(parseTag(partTagList))); + if (actTagList != null && actTagList != "") + spec = spec.and(PostSpecification.likeActTag(parseTag(actTagList))); + + return spec; + } + + public Boolean checkIsLiked(User user, Post post) { + Boolean isLiked = false; + Optional like = likeRepository.findByUserIdAndPostId(user.getId(), post.getId()); + if(like.isPresent()) { + isLiked = true; + } + + return isLiked; + } + + // 좋아요 클릭(좋아요, 좋아요 취소 둘다 가능) + public Long clickLike(Boolean isLiked, User user, Post post) { + if (isLiked == false) { + Like like = Like.builder().user(user) + .post(post) + .build(); + likeRepository.save(like); + } else if (isLiked == true) { // 좋아요 취소 + Optional like = likeRepository.findByUserIdAndPostId(user.getId(), post.getId()); + likeRepository.delete(like.get()); + } + Long likes = likeRepository.countByPostId(post.getId()); + post.updateLikes(post.getLikeList().size()); + postRepository.save(post); + + return likes; + } + + public Boolean checkIsScrapped(User user, Post post) { + Boolean isScrapped = false; + Optional scrap = scrapRepository.findByUserIdAndPostId(user.getId(), post.getId()); + if(scrap.isPresent()) { + isScrapped = true; + } + + return isScrapped; + } + + // 스크랩 클릭(스크랩, 스크랩 취소 둘다 가능) + public Long clickScrap(Boolean isScrapped, User user, Post post) { + if (isScrapped == false) { + Scrap scrap = Scrap.builder() + .user(user) + .post(post) + .build(); + scrapRepository.save(scrap); + } else if (isScrapped == true) { // 스크랩 취소 + Optional scrap = scrapRepository.findByUserIdAndPostId(user.getId(), post.getId()); + scrapRepository.delete(scrap.get()); + } + Long scraps = scrapRepository.countByPostId(post.getId()); + post.updateScraps(post.getScrapList().size()); + postRepository.save(post); + + return scraps; + } + + public List parseTag(String strTag) { + List tagList = new ArrayList<>(); + // 태그 없을 때 + if (strTag == null || strTag.equals("")) { + return tagList; + } + // 태그 있을 때 파싱 + String[] splitTag = strTag.split(","); + for (String t : splitTag) { + tagList.add(t); + } + return tagList; + } +} diff --git a/src/main/java/prefolio/prefolioserver/domain/post/repository/CommentRepository.java b/src/main/java/prefolio/prefolioserver/domain/post/repository/CommentRepository.java index 7ec7877..3c1d56f 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/repository/CommentRepository.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/repository/CommentRepository.java @@ -13,6 +13,5 @@ public interface CommentRepository extends JpaRepository, JpaSpecificationExecutor { Page findAll(Specification spec, Pageable pageable); Optional findByIdAndUserId(Long id, Long userId); - void deleteById(Long id); } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/repository/LikeRepository.java b/src/main/java/prefolio/prefolioserver/domain/post/repository/LikeRepository.java index dd89928..5f061be 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/repository/LikeRepository.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/repository/LikeRepository.java @@ -12,6 +12,5 @@ public interface LikeRepository extends JpaRepository { Optional findByUserIdAndPostId(Long userId, Long postId); Long countByPostId(Long postId); List findAll(Specification spec); - @Transactional void deleteByPostId(Long postId); } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/repository/PostRepository.java b/src/main/java/prefolio/prefolioserver/domain/post/repository/PostRepository.java index 2b3c895..ccf4d8c 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/repository/PostRepository.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/repository/PostRepository.java @@ -12,6 +12,5 @@ public interface PostRepository extends JpaRepository, JpaSpecificationExecutor { Page findAll(Specification spec, Pageable pageable); Optional findByIdAndUserId(Long id, Long userId); - void deleteById(Long id); } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/repository/ScrapRepository.java b/src/main/java/prefolio/prefolioserver/domain/post/repository/ScrapRepository.java index 5c3bf50..9fabf19 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/repository/ScrapRepository.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/repository/ScrapRepository.java @@ -13,7 +13,6 @@ public interface ScrapRepository extends JpaRepository, JpaSpecificationExecutor { - Optional findByUserIdAndPostId(Long userId, Long postId); Long countByPostId(Long postId); Long countByUserIdAndPostId(Long userId, Long postId); diff --git a/src/main/java/prefolio/prefolioserver/domain/post/service/CommentService.java b/src/main/java/prefolio/prefolioserver/domain/post/service/CommentService.java index 2b58f99..711b860 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/service/CommentService.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/service/CommentService.java @@ -4,10 +4,12 @@ import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import prefolio.prefolioserver.domain.post.domain.Comment; import prefolio.prefolioserver.domain.post.dto.request.AddCommentRequestDTO; import prefolio.prefolioserver.domain.post.dto.response.CommentIdResponseDTO; import prefolio.prefolioserver.domain.post.dto.response.CommentResponseDTO; +import prefolio.prefolioserver.domain.post.mapper.CommentMapper; import prefolio.prefolioserver.domain.post.repository.CommentRepository; import prefolio.prefolioserver.domain.user.domain.User; import prefolio.prefolioserver.domain.post.dto.CommentDTO; @@ -26,22 +28,21 @@ public class CommentService { private final UserRepository userRepository; private final CommentRepository commentRepository; + private final CommentMapper commentMapper; + @Transactional public CommentIdResponseDTO saveComment(UserDetailsImpl authUser, AddCommentRequestDTO addCommentRequest) { User findUser = userRepository.findByEmail(authUser.getUsername()) .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); - Comment comment = Comment.builder() - .user(findUser) - .post(addCommentRequest.getPost()) - .contents(addCommentRequest.getContents()) - .createdAt(new Date()) - .build(); + // 댓글 생성 + Comment comment = Comment.of(findUser, addCommentRequest, new Date()); Comment savedComment = commentRepository.saveAndFlush(comment); - return new CommentIdResponseDTO(savedComment); + return CommentIdResponseDTO.from(savedComment); } + @Transactional public CommentIdResponseDTO updateComment(UserDetailsImpl authUser, Long commentId, AddCommentRequestDTO addCommentRequest) { User findUser = userRepository.findByEmail(authUser.getUsername()) .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); @@ -51,9 +52,10 @@ public CommentIdResponseDTO updateComment(UserDetailsImpl authUser, Long comment findComment.update(addCommentRequest); commentRepository.save(findComment); - return new CommentIdResponseDTO(findComment); + return CommentIdResponseDTO.from(findComment); } + @Transactional public CommentIdResponseDTO deleteComment(UserDetailsImpl authUser, Long commentId) { User findUser = userRepository.findByEmail(authUser.getUsername()) .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); @@ -62,9 +64,10 @@ public CommentIdResponseDTO deleteComment(UserDetailsImpl authUser, Long comment commentRepository.deleteById(findComment.getId()); - return new CommentIdResponseDTO(findComment); + return CommentIdResponseDTO.from(findComment); } + @Transactional public CommentResponseDTO getComments( UserDetailsImpl authUser, Integer pageNum, Integer limit ) { @@ -75,12 +78,8 @@ public CommentResponseDTO getComments( PageRequest pageRequest = PageRequest.of(pageNum, limit); Page findComments = commentRepository.findAll(pageRequest); - List commentsList = new ArrayList<>(); - for (Comment c : findComments) { - CommentDTO commentDTO = new CommentDTO(c); - commentsList.add(commentDTO); - } + List commentsDTOList = commentMapper.toCommentsDTOList(findComments); - return new CommentResponseDTO(commentsList, findComments.getTotalPages(), findComments.getTotalElements()); + return CommentResponseDTO.of(commentsDTOList, findComments.getTotalPages(), findComments.getTotalElements()); } } diff --git a/src/main/java/prefolio/prefolioserver/domain/post/service/PostService.java b/src/main/java/prefolio/prefolioserver/domain/post/service/PostService.java index 6e2efc1..77364c6 100644 --- a/src/main/java/prefolio/prefolioserver/domain/post/service/PostService.java +++ b/src/main/java/prefolio/prefolioserver/domain/post/service/PostService.java @@ -6,16 +6,15 @@ import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import prefolio.prefolioserver.domain.post.domain.Like; import prefolio.prefolioserver.domain.post.domain.Post; import prefolio.prefolioserver.domain.post.domain.Scrap; import prefolio.prefolioserver.domain.post.domain.SortBy; -import prefolio.prefolioserver.domain.post.dto.CardPostDTO; -import prefolio.prefolioserver.domain.post.dto.CountDTO; -import prefolio.prefolioserver.domain.post.dto.MainPostDTO; -import prefolio.prefolioserver.domain.post.dto.PostDTO; +import prefolio.prefolioserver.domain.post.dto.*; import prefolio.prefolioserver.domain.post.dto.request.AddPostRequestDTO; import prefolio.prefolioserver.domain.post.dto.response.*; +import prefolio.prefolioserver.domain.post.mapper.PostMapper; import prefolio.prefolioserver.domain.post.repository.LikeRepository; import prefolio.prefolioserver.domain.post.repository.PostRepository; import prefolio.prefolioserver.domain.post.repository.ScrapRepository; @@ -40,8 +39,9 @@ public class PostService{ private final PostRepository postRepository; private final LikeRepository likeRepository; private final ScrapRepository scrapRepository; + private final PostMapper postMapper; - + @Transactional(readOnly = true) public MainPostResponseDTO getAllPosts( UserDetailsImpl authUser, SortBy sortBy, String partTagList, String actTagList, Integer pageNum, Integer limit @@ -53,30 +53,15 @@ public MainPostResponseDTO getAllPosts( PageRequest pageRequest = PageRequest.of(pageNum, limit, Sort.by(sortBy.getSortBy()).descending()); // 쿼리 - Specification spec = (root, query, criteriaBuilder) -> null; - - if (partTagList != null && partTagList != "") // 쿼리에 partTag 들어왔을 때 - spec = spec.and(PostSpecification.likePartTag(parseTag(partTagList))); -// else if (partTag == null) // 쿼리에 partTag 없으면 로그인 유저 part 정보로 쿼리 -// spec = spec.and(PostSpecification.likePartTag(user.getType())); - if (actTagList != null && actTagList != "") - spec = spec.and(PostSpecification.likeActTag(parseTag(actTagList))); + Specification spec = postMapper.toPostTagQuery(partTagList, actTagList); Page findPosts = postRepository.findAll(spec, pageRequest); - List mainPostsList = new ArrayList<>(); - for (Post p : findPosts) { - String pTag = p.getPartTag(); - String aTag = p.getActTag(); - Boolean isScrapped = scrapRepository.countByUserIdAndPostId(user.getId(), p.getId()) != 0; - Boolean isMine = Objects.equals(p.getUser().getId(), user.getId()); - MainPostDTO mainPostDTO = new MainPostDTO(p, parseTag(pTag), parseTag(aTag), isScrapped, isMine); - mainPostsList.add(mainPostDTO); - } - - return new MainPostResponseDTO(mainPostsList, findPosts.getTotalPages(), findPosts.getTotalElements()); - } + List mainPostsList = postMapper.toMainPostDTOList(findPosts, user); + return MainPostResponseDTO.of(mainPostsList, findPosts.getTotalPages(), findPosts.getTotalElements()); + } + @Transactional(readOnly = true) public MainPostResponseDTO getSearchPosts( UserDetailsImpl authUser, SortBy sortBy, String partTagList, String actTagList, Integer pageNum, Integer limit, String searchWord @@ -88,69 +73,28 @@ public MainPostResponseDTO getSearchPosts( PageRequest pageRequest = PageRequest.of(pageNum, limit, Sort.by(sortBy.getSortBy()).descending()); // 쿼리 - Specification spec = PostSpecification.likeTitle(searchWord) // 검색 - .or(PostSpecification.likeContents(searchWord)); - if (partTagList != null && partTagList != "") // 쿼리에 partTag 들어왔을 때 - spec = spec.and(PostSpecification.likePartTag(parseTag(partTagList))); -// else if (partTag == null) // 쿼리에 partTag 없으면 로그인 유저 part 정보로 쿼리 -// spec = spec.and(PostSpecification.likePartTag(user.getType())); - if (actTagList != null && actTagList != "") - spec = spec.and(PostSpecification.likeActTag(parseTag(actTagList))); + Specification spec = postMapper.toSearchPostTagQuery(searchWord, partTagList, actTagList); Page findPosts = postRepository.findAll(spec, pageRequest); - List mainPostsList = new ArrayList<>(); - for (Post p : findPosts) { - String pTag = p.getPartTag(); - String aTag = p.getActTag(); - Boolean isScrapped = scrapRepository.countByUserIdAndPostId(user.getId(), p.getId()) != 0; - Boolean isMine = Objects.equals(p.getUser().getId(), user.getId()); - MainPostDTO mainPostDTO = new MainPostDTO(p, parseTag(pTag), parseTag(aTag), isScrapped, isMine); - mainPostsList.add(mainPostDTO); - } - - return new MainPostResponseDTO(mainPostsList, findPosts.getTotalPages(), findPosts.getTotalElements()); - } + List mainPostsList = postMapper.toMainPostDTOList(findPosts, user); - public List parseTag(String strTag) { - List tagList = new ArrayList<>(); - // 태그 없을 때 - if (strTag == null || strTag.equals("")) { - return tagList; - } - // 태그 있을 때 파싱 - String[] splitTag = strTag.split(","); - for (String t : splitTag) { - tagList.add(t); - } - return tagList; + return MainPostResponseDTO.of(mainPostsList, findPosts.getTotalPages(), findPosts.getTotalElements()); } - + @Transactional public PostIdResponseDTO savePost(UserDetailsImpl authUser, AddPostRequestDTO addPostRequest) { User findUser = userRepository.findByEmail(authUser.getUsername()) .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); - Post post = Post.builder() - .user(findUser) - .thumbnail(addPostRequest.getThumbnail()) - .title(addPostRequest.getTitle()) - .startDate(addPostRequest.getStartDate()) - .endDate(addPostRequest.getEndDate()) - .contribution(addPostRequest.getContribution()) - .task(addPostRequest.getTask()) - .tools(addPostRequest.getTools()) - .partTag(addPostRequest.getPartTag()) - .actTag(addPostRequest.getActTag()) - .contents(addPostRequest.getContents()) - .hits(0) - .likes(0) - .scraps(0) - .createdAt(new Date()) - .build(); + // 게시물 생성 + Post post = Post.of(findUser, addPostRequest, 0, 0, 0, new Date()); + Post savedPost = postRepository.saveAndFlush(post); - return new PostIdResponseDTO(savedPost); + + return PostIdResponseDTO.from(savedPost); } + @Transactional public PostIdResponseDTO updatePost(UserDetailsImpl authUser, Long postId, AddPostRequestDTO addPostRequest) { User findUser = userRepository.findByEmail(authUser.getUsername()) .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); @@ -160,9 +104,10 @@ public PostIdResponseDTO updatePost(UserDetailsImpl authUser, Long postId, AddPo findPost.update(addPostRequest); postRepository.save(findPost); - return new PostIdResponseDTO(findPost); + return PostIdResponseDTO.from(findPost); } + @Transactional public PostIdResponseDTO deletePost(UserDetailsImpl authUser, Long postId) { User findUser = userRepository.findByEmail(authUser.getUsername()) .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); @@ -173,9 +118,10 @@ public PostIdResponseDTO deletePost(UserDetailsImpl authUser, Long postId) { likeRepository.deleteByPostId(findPost.getId()); scrapRepository.deleteByPostId(findPost.getId()); - return new PostIdResponseDTO(findPost); + return PostIdResponseDTO.from(findPost); } + @Transactional public GetPostResponseDTO findPostById(UserDetailsImpl authUser, Long postId) { Post post = postRepository.findById(postId) .orElseThrow(() -> new CustomException(POST_NOT_FOUND)); @@ -184,89 +130,54 @@ public GetPostResponseDTO findPostById(UserDetailsImpl authUser, Long postId) { User loginUser = userRepository.findByEmail(authUser.getUsername()) .orElseThrow(() -> new CustomException(DATA_NOT_FOUND)); - post.setHits(post.getHits() + 1); // 조회수 증가 + post.updateHits(post.getHits() + 1); // 조회수 증가 Post savedPost = postRepository.saveAndFlush(post); - PostDTO postDTO = new PostDTO( - savedPost, parseTag(savedPost.getTools()), parseTag(savedPost.getPartTag()), parseTag(savedPost.getActTag())); - CountDTO countDTO = new CountDTO(savedPost.getLikeList().size(), savedPost.getScrapList().size()); + TagListPostDTO tagListPostDTO = TagListPostDTO.of(savedPost, postMapper.parseTag(savedPost.getTools()), postMapper.parseTag(savedPost.getPartTag()), postMapper.parseTag(savedPost.getActTag())); + CountDTO countDTO = CountDTO.of(savedPost.getLikeList().size(), savedPost.getScrapList().size()); UserDTO userDTO = new UserDTO(postUser); - Boolean isLiked = false; - Boolean isScrapped = false; - - Optional like = likeRepository.findByUserIdAndPostId(loginUser.getId(), savedPost.getId()); - Optional scrap = scrapRepository.findByUserIdAndPostId(loginUser.getId(), savedPost.getId()); - - if(like.isPresent()) { - isLiked = true; - } - if(scrap.isPresent()) { - isScrapped = true; - } + Boolean isLiked = postMapper.checkIsLiked(loginUser, savedPost); // 좋아요 상태 확인 + Boolean isScrapped = postMapper.checkIsScrapped(loginUser, savedPost); // 스크랩 상태 확인 - return new GetPostResponseDTO(postDTO, countDTO, userDTO, isLiked, isScrapped); + return GetPostResponseDTO.of(tagListPostDTO, countDTO, userDTO, isLiked, isScrapped); } + @Transactional public ClickLikeResponseDTO clickLike(UserDetailsImpl authUser, Long postId) { Post post = postRepository.findById(postId) .orElseThrow(() -> new CustomException(POST_NOT_FOUND)); User user = userRepository.findByEmail(authUser.getUsername()) .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); - // 좋아요 유무 확인 - Boolean isLiked = true; - Optional dbLike = likeRepository.findByUserIdAndPostId(user.getId(), post.getId()); - if (dbLike.isEmpty()) { - isLiked = false; - } + // 좋아요 상태 확인 + Boolean isLiked = postMapper.checkIsLiked(user, post); // 좋아요 누름 - if (isLiked == false) { - Like like = Like.builder().user(user) - .post(post) - .build(); - likeRepository.save(like); - } else if (isLiked == true) { // 좋아요 취소 - likeRepository.delete(dbLike.get()); - } - Long likes = likeRepository.countByPostId(postId); - post.setLikes(post.getLikeList().size()); - postRepository.save(post); - return new ClickLikeResponseDTO(likes, isLiked); + Long likes = postMapper.clickLike(isLiked, user, post); + + return ClickLikeResponseDTO.of(likes, isLiked); } + @Transactional public ClickScrapResponseDTO clickScrap(UserDetailsImpl authUser, Long postId) { Post post = postRepository.findById(postId) .orElseThrow(() -> new CustomException(POST_NOT_FOUND)); User user = userRepository.findByEmail(authUser.getUsername()) .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); - // 스크랩 유무 확인 - Boolean isScrapped = true; - Optional dbScrap = scrapRepository.findByUserIdAndPostId(user.getId(), post.getId()); - if (dbScrap.isEmpty()) { - isScrapped = false; - } + // 스크랩 상태 확인 + Boolean isScrapped = postMapper.checkIsScrapped(user, post); // 스크랩 누름 - if (isScrapped == false) { - Scrap scrap = Scrap.builder() - .user(user) - .post(post) - .build(); - scrapRepository.save(scrap); - } else if (isScrapped == true) { // 스크랩 취소 - scrapRepository.delete(dbScrap.get()); - } - Long scraps = scrapRepository.countByPostId(postId); - post.setScraps(post.getScrapList().size()); - postRepository.save(post); - return new ClickScrapResponseDTO(scraps, !isScrapped); + Long scraps = postMapper.clickScrap(isScrapped, user, post); + + return ClickScrapResponseDTO.of(scraps, !isScrapped); } + @Transactional(readOnly = true) public CardPostResponseDTO findPostByUserId( UserDetailsImpl authUser, Long userId, String partTagList, String actTagList, Integer pageNum, Integer limit) { @@ -277,62 +188,36 @@ public CardPostResponseDTO findPostByUserId( User user = userRepository.findById(userId) .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); + // 페이지 요청 정보 PageRequest pageRequest = PageRequest.of(pageNum, limit, Sort.by("createdAt").descending()); - Specification spec = (root, query, criteriaBuilder) -> null; - - if (partTagList != null && partTagList != ""){ - spec = spec.and(PostSpecification.likePartTag(parseTag(partTagList))); - } - if (actTagList != null && actTagList != ""){ - spec = spec.and(PostSpecification.likeActTag(parseTag(actTagList))); - } + // 쿼리 + Specification spec = postMapper.toPostTagQuery(partTagList, actTagList); spec = spec.and(PostSpecification.equalUser(user)); Page findPosts = postRepository.findAll(spec, pageRequest); - List cardPostsList = new ArrayList<>(); + List cardPostsDTOList = postMapper.postToCardPostDTOList(findPosts, me, user); - for(Post post : findPosts){ - String pTag = post.getPartTag(); - String aTag = post.getActTag(); - Boolean isScrapped = scrapRepository.countByUserIdAndPostId(me.getId(), post.getId()) != 0; - Boolean isMine = me==user; - CardPostDTO dto = new CardPostDTO(post, parseTag(pTag), parseTag(aTag), isScrapped, isMine); - cardPostsList.add(dto); - } - - return new CardPostResponseDTO(cardPostsList, findPosts.getTotalPages(), findPosts.getTotalElements()); + return CardPostResponseDTO.of(cardPostsDTOList, findPosts.getTotalPages(), findPosts.getTotalElements()); } + @Transactional(readOnly = true) public CardPostResponseDTO findMyScrap( UserDetailsImpl authUser, String partTagList, String actTagList, Integer pageNum, Integer limit) { User user = userRepository.findByEmail(authUser.getUsername()) .orElseThrow(() -> new CustomException(USER_NOT_FOUND)); + // 페이지 요청 정보 PageRequest pageRequest = PageRequest.of(pageNum, limit, Sort.by("id").descending()); - Specification spec = (root, query, criteriaBuilder) -> null; - - if (partTagList!=null){ - spec = spec.and(ScrapSpecification.likePostPartTag(parseTag(partTagList))); - } - if (actTagList!=null){ - spec = spec.and(ScrapSpecification.likePostActTag(parseTag(actTagList))); - } + // 쿼리 + Specification spec = postMapper.toScrapTagQuery(partTagList, actTagList); spec = spec.and(ScrapSpecification.equalUser(user)); Page findScraps = scrapRepository.findAll(spec, pageRequest); - List cardScrapsDTOList = new ArrayList<>(); - - for(Scrap scrap : findScraps){ - String pTag = scrap.getPost().getPartTag(); - String aTag = scrap.getPost().getActTag(); - Boolean isScrapped = true; - CardPostDTO dto = new CardPostDTO(scrap, parseTag(pTag), parseTag(aTag), isScrapped); - cardScrapsDTOList.add(dto); - } + List cardScrapsDTOList = postMapper.scrapToCardPostDTOList(findScraps); - return new CardPostResponseDTO(cardScrapsDTOList, findScraps.getTotalPages(), findScraps.getTotalElements()); + return CardPostResponseDTO.of(cardScrapsDTOList, findScraps.getTotalPages(), findScraps.getTotalElements()); } } diff --git a/src/main/java/prefolio/prefolioserver/infra/s3/SourceService.java b/src/main/java/prefolio/prefolioserver/infra/s3/SourceService.java index 388a52b..48e7382 100644 --- a/src/main/java/prefolio/prefolioserver/infra/s3/SourceService.java +++ b/src/main/java/prefolio/prefolioserver/infra/s3/SourceService.java @@ -47,6 +47,6 @@ public GetPathResponseDTO createURL(Long userId, Path path) { URL url = amazonS3.generatePresignedUrl(generatePresignedUrlRequest); - return new GetPathResponseDTO(url); + return GetPathResponseDTO.from(url); } }