From fa14c8be208ee3a574c6c46504bfecaa24ce02f2 Mon Sep 17 00:00:00 2001 From: OhHaneol Date: Thu, 4 Sep 2025 20:28:27 +0900 Subject: [PATCH 01/10] =?UTF-8?q?refactor:=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=20=EC=9C=84=EC=B9=98=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20?= =?UTF-8?q?=EC=A2=8B=EC=95=84=EC=9A=94=20type=20=EC=BB=AC=EB=9F=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../double_o/dambap/post/domain/Category.java | 6 -- .../com/double_o/dambap/post/domain/Type.java | 5 -- .../post/infrastructure/PostRepository.java | 17 ----- .../post/{domain => like}/PostLike.java | 8 ++- .../PostLikeRepository.java | 3 +- .../response => like}/PostLikeResponse.java | 2 +- .../dambap/post/{domain => media}/Media.java | 6 +- .../MediaRepository.java | 3 +- .../application/SharePostService.java} | 72 +++++++++---------- .../dambap/post/share/domain/Category.java | 6 ++ .../Post.java => share/domain/SharePost.java} | 8 +-- .../post/{ => share}/domain/TaggedUser.java | 2 +- .../dambap/post/share/domain/Type.java | 5 ++ .../{ => share}/dto/request/PostRequest.java | 4 +- .../dto/response/PostInfoResponse.java | 2 +- .../dto/response/PostPageResponse.java | 2 +- .../dto/response/PostResponse.java | 4 +- .../infrastructure/SharePostRepository.java | 17 +++++ .../infrastructure/TaggedUserRepository.java | 4 +- .../presentation/SharePostController.java} | 10 +-- .../utils/TaggedUserConstants.java | 2 +- 21 files changed, 97 insertions(+), 91 deletions(-) delete mode 100644 src/main/java/com/double_o/dambap/post/domain/Category.java delete mode 100644 src/main/java/com/double_o/dambap/post/domain/Type.java delete mode 100644 src/main/java/com/double_o/dambap/post/infrastructure/PostRepository.java rename src/main/java/com/double_o/dambap/post/{domain => like}/PostLike.java (83%) rename src/main/java/com/double_o/dambap/post/{infrastructure => like}/PostLikeRepository.java (80%) rename src/main/java/com/double_o/dambap/post/{dto/response => like}/PostLikeResponse.java (87%) rename src/main/java/com/double_o/dambap/post/{domain => media}/Media.java (82%) rename src/main/java/com/double_o/dambap/post/{infrastructure => media}/MediaRepository.java (81%) rename src/main/java/com/double_o/dambap/post/{application/PostService.java => share/application/SharePostService.java} (80%) create mode 100644 src/main/java/com/double_o/dambap/post/share/domain/Category.java rename src/main/java/com/double_o/dambap/post/{domain/Post.java => share/domain/SharePost.java} (92%) rename src/main/java/com/double_o/dambap/post/{ => share}/domain/TaggedUser.java (93%) create mode 100644 src/main/java/com/double_o/dambap/post/share/domain/Type.java rename src/main/java/com/double_o/dambap/post/{ => share}/dto/request/PostRequest.java (87%) rename src/main/java/com/double_o/dambap/post/{ => share}/dto/response/PostInfoResponse.java (87%) rename src/main/java/com/double_o/dambap/post/{ => share}/dto/response/PostPageResponse.java (89%) rename src/main/java/com/double_o/dambap/post/{ => share}/dto/response/PostResponse.java (91%) create mode 100644 src/main/java/com/double_o/dambap/post/share/infrastructure/SharePostRepository.java rename src/main/java/com/double_o/dambap/post/{ => share}/infrastructure/TaggedUserRepository.java (79%) rename src/main/java/com/double_o/dambap/post/{presentation/PostController.java => share/presentation/SharePostController.java} (94%) rename src/main/java/com/double_o/dambap/post/{ => share}/utils/TaggedUserConstants.java (67%) diff --git a/src/main/java/com/double_o/dambap/post/domain/Category.java b/src/main/java/com/double_o/dambap/post/domain/Category.java deleted file mode 100644 index b108b59..0000000 --- a/src/main/java/com/double_o/dambap/post/domain/Category.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.double_o.dambap.post.domain; - -public enum Category { - - CHICKEN, PIZZA -} diff --git a/src/main/java/com/double_o/dambap/post/domain/Type.java b/src/main/java/com/double_o/dambap/post/domain/Type.java deleted file mode 100644 index 82cc2d9..0000000 --- a/src/main/java/com/double_o/dambap/post/domain/Type.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.double_o.dambap.post.domain; - -public enum Type { - SHARED, RECEIVED -} diff --git a/src/main/java/com/double_o/dambap/post/infrastructure/PostRepository.java b/src/main/java/com/double_o/dambap/post/infrastructure/PostRepository.java deleted file mode 100644 index 1e5d0ea..0000000 --- a/src/main/java/com/double_o/dambap/post/infrastructure/PostRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.double_o.dambap.post.infrastructure; - -import com.double_o.dambap.post.domain.Post; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - -@Repository -@Transactional(readOnly = true) -public interface PostRepository extends JpaRepository { - - Page findAllByOrderByCreatedAtDesc(Pageable pageable); - - Page findAllByWriterIdOrderByCreatedAtDesc(Long userId, Pageable pageable); -} diff --git a/src/main/java/com/double_o/dambap/post/domain/PostLike.java b/src/main/java/com/double_o/dambap/post/like/PostLike.java similarity index 83% rename from src/main/java/com/double_o/dambap/post/domain/PostLike.java rename to src/main/java/com/double_o/dambap/post/like/PostLike.java index 73986b3..fe71494 100644 --- a/src/main/java/com/double_o/dambap/post/domain/PostLike.java +++ b/src/main/java/com/double_o/dambap/post/like/PostLike.java @@ -1,7 +1,10 @@ -package com.double_o.dambap.post.domain; +package com.double_o.dambap.post.like; +import com.double_o.dambap.post.share.domain.Type; import jakarta.persistence.Column; import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; @@ -42,4 +45,7 @@ public class PostLike { @Column(name = "liker_id") private Long likerId; + + @Enumerated(EnumType.STRING) + private Type type; } diff --git a/src/main/java/com/double_o/dambap/post/infrastructure/PostLikeRepository.java b/src/main/java/com/double_o/dambap/post/like/PostLikeRepository.java similarity index 80% rename from src/main/java/com/double_o/dambap/post/infrastructure/PostLikeRepository.java rename to src/main/java/com/double_o/dambap/post/like/PostLikeRepository.java index b9ca931..c0cfc6e 100644 --- a/src/main/java/com/double_o/dambap/post/infrastructure/PostLikeRepository.java +++ b/src/main/java/com/double_o/dambap/post/like/PostLikeRepository.java @@ -1,6 +1,5 @@ -package com.double_o.dambap.post.infrastructure; +package com.double_o.dambap.post.like; -import com.double_o.dambap.post.domain.PostLike; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/double_o/dambap/post/dto/response/PostLikeResponse.java b/src/main/java/com/double_o/dambap/post/like/PostLikeResponse.java similarity index 87% rename from src/main/java/com/double_o/dambap/post/dto/response/PostLikeResponse.java rename to src/main/java/com/double_o/dambap/post/like/PostLikeResponse.java index 52ea209..202142f 100644 --- a/src/main/java/com/double_o/dambap/post/dto/response/PostLikeResponse.java +++ b/src/main/java/com/double_o/dambap/post/like/PostLikeResponse.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.post.dto.response; +package com.double_o.dambap.post.like; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/main/java/com/double_o/dambap/post/domain/Media.java b/src/main/java/com/double_o/dambap/post/media/Media.java similarity index 82% rename from src/main/java/com/double_o/dambap/post/domain/Media.java rename to src/main/java/com/double_o/dambap/post/media/Media.java index dd2c1ad..fe26f6b 100644 --- a/src/main/java/com/double_o/dambap/post/domain/Media.java +++ b/src/main/java/com/double_o/dambap/post/media/Media.java @@ -1,7 +1,9 @@ -package com.double_o.dambap.post.domain; +package com.double_o.dambap.post.media; +import com.double_o.dambap.post.share.domain.Type; import jakarta.persistence.Column; import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; import jakarta.persistence.Enumerated; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -30,7 +32,7 @@ public class Media { @Column(name = "media_url") private String mediaUrl; -@Enumerated(EnumType.STRING) + @Enumerated(EnumType.STRING) private Type type; private int sequence; // 사용자가 이미지를 보낸 순서 diff --git a/src/main/java/com/double_o/dambap/post/infrastructure/MediaRepository.java b/src/main/java/com/double_o/dambap/post/media/MediaRepository.java similarity index 81% rename from src/main/java/com/double_o/dambap/post/infrastructure/MediaRepository.java rename to src/main/java/com/double_o/dambap/post/media/MediaRepository.java index 3a53a73..fdb260e 100644 --- a/src/main/java/com/double_o/dambap/post/infrastructure/MediaRepository.java +++ b/src/main/java/com/double_o/dambap/post/media/MediaRepository.java @@ -1,6 +1,5 @@ -package com.double_o.dambap.post.infrastructure; +package com.double_o.dambap.post.media; -import com.double_o.dambap.post.domain.Media; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/double_o/dambap/post/application/PostService.java b/src/main/java/com/double_o/dambap/post/share/application/SharePostService.java similarity index 80% rename from src/main/java/com/double_o/dambap/post/application/PostService.java rename to src/main/java/com/double_o/dambap/post/share/application/SharePostService.java index af43cde..47353a1 100644 --- a/src/main/java/com/double_o/dambap/post/application/PostService.java +++ b/src/main/java/com/double_o/dambap/post/share/application/SharePostService.java @@ -1,25 +1,25 @@ -package com.double_o.dambap.post.application; +package com.double_o.dambap.post.share.application; -import static com.double_o.dambap.post.utils.TaggedUserConstants.TAGGED_USER_MAX_SIZE; +import static com.double_o.dambap.post.share.utils.TaggedUserConstants.TAGGED_USER_MAX_SIZE; import com.double_o.dambap.auth.model.AuthUser; import com.double_o.dambap.exception.dto.ErrorType; import com.double_o.dambap.exception.post.PostInvalidException; -import com.double_o.dambap.post.domain.PostLike; -import com.double_o.dambap.post.domain.Media; -import com.double_o.dambap.post.domain.TaggedUser; -import com.double_o.dambap.post.domain.Type; -import com.double_o.dambap.post.dto.response.PostInfoResponse; -import com.double_o.dambap.post.dto.response.PostLikeResponse; -import com.double_o.dambap.post.dto.response.PostPageResponse; -import com.double_o.dambap.post.infrastructure.PostLikeRepository; -import com.double_o.dambap.post.domain.Post; -import com.double_o.dambap.post.dto.request.PostRequest; -import com.double_o.dambap.post.dto.response.PostResponse; -import com.double_o.dambap.post.infrastructure.MediaRepository; -import com.double_o.dambap.post.infrastructure.PostRepository; +import com.double_o.dambap.post.like.PostLike; +import com.double_o.dambap.post.media.Media; +import com.double_o.dambap.post.share.domain.TaggedUser; +import com.double_o.dambap.post.share.domain.Type; +import com.double_o.dambap.post.share.dto.response.PostInfoResponse; +import com.double_o.dambap.post.like.PostLikeResponse; +import com.double_o.dambap.post.share.dto.response.PostPageResponse; +import com.double_o.dambap.post.like.PostLikeRepository; +import com.double_o.dambap.post.share.domain.SharePost; +import com.double_o.dambap.post.share.dto.request.PostRequest; +import com.double_o.dambap.post.share.dto.response.PostResponse; +import com.double_o.dambap.post.media.MediaRepository; +import com.double_o.dambap.post.share.infrastructure.SharePostRepository; import com.double_o.dambap.auth.service.AuthValidationUtils; -import com.double_o.dambap.post.infrastructure.TaggedUserRepository; +import com.double_o.dambap.post.share.infrastructure.TaggedUserRepository; import com.double_o.dambap.user.domain.User; import com.double_o.dambap.user.application.UserValidationService; import com.double_o.dambap.common.dto.SuccessResponse; @@ -37,10 +37,10 @@ @Slf4j @Service @RequiredArgsConstructor -public class PostService { +public class SharePostService { private final UserValidationService userValidationService; - private final PostRepository postRepository; + private final SharePostRepository postRepository; private final PostLikeRepository postLikeRepository; private final TaggedUserRepository taggedUserRepository; private final MediaRepository mediaRepository; @@ -53,7 +53,7 @@ public PostResponse createPost(AuthUser user, PostRequest request) { User findUser = userValidationService.getUserOrThrowIfNotExist(user.getId()); - Post post = Post.builder() + SharePost post = SharePost.builder() .category(request.getCategory()) .manufactureDate(request.getManufactureDate()) .expireDays(request.getExpireDays()) @@ -63,7 +63,7 @@ public PostResponse createPost(AuthUser user, PostRequest request) { .writerId(findUser.getId()) .build(); - Post savedPost = postRepository.save(post); + SharePost savedPost = postRepository.save(post); List mediaUrls = saveAndGetMediaUrls(request, savedPost); @@ -77,7 +77,7 @@ public PostResponse createPost(AuthUser user, PostRequest request) { */ public PostResponse getPost(Long postId) { - Post findPost = getPostOrThrowIfNotExist(postId); + SharePost findPost = getPostOrThrowIfNotExist(postId); List mediaUrls = getMediaUrls(findPost); @@ -92,13 +92,13 @@ public PostResponse getPost(Long postId) { @Transactional public PostResponse editPost(AuthUser user, Long postId, PostRequest request) { - Post findPost = getPostOrThrowIfNotExist(postId); + SharePost findPost = getPostOrThrowIfNotExist(postId); User findUser = userValidationService.getUserOrThrowIfNotExist(user.getId()); AuthValidationUtils.verifySameUser(findUser.getId(), findPost.getWriterId()); - findPost.updatePost(request.getCategory(), request.getManufactureDate(), + findPost.updateSharePost(request.getCategory(), request.getManufactureDate(), request.getExpireDays(), request.getContent(), request.isPublic()); List mediaUrls = saveAndGetMediaUrls(request, findPost); @@ -114,7 +114,7 @@ public PostResponse editPost(AuthUser user, Long postId, PostRequest request) { @Transactional public SuccessResponse deletePost(AuthUser user, Long postId) { - Post findPost = getPostOrThrowIfNotExist(postId); + SharePost findPost = getPostOrThrowIfNotExist(postId); User findUser = userValidationService.getUserOrThrowIfNotExist(user.getId()); @@ -133,7 +133,7 @@ public PostLikeResponse updatePostLike(AuthUser user, Long postId) { User findUser = userValidationService.getUserOrThrowIfNotExist(user.getId()); - Post findPost = getPostOrThrowIfNotExist(postId); + SharePost findPost = getPostOrThrowIfNotExist(postId); Optional postLike = postLikeRepository.findByPostIdAndLikerId( findPost.getId(), findUser.getId()); @@ -151,7 +151,7 @@ public SuccessResponse changePublicity(AuthUser user, Long postId) { userValidationService.getUserOrThrowIfNotExist(user.getId()); - Post findPost = getPostOrThrowIfNotExist(postId); + SharePost findPost = getPostOrThrowIfNotExist(postId); findPost.changePublicity(); return new SuccessResponse("공개여부가 성공적으로 전환되었습니다."); @@ -164,7 +164,7 @@ public PostPageResponse getAllMySharedPost(AuthUser user, Pageable pageable) { User findUser = userValidationService.getUserOrThrowIfNotExist(user.getId()); - Page findAllMySharedPost = postRepository.findAllByWriterIdOrderByCreatedAtDesc( + Page findAllMySharedPost = postRepository.findAllByWriterIdOrderByCreatedAtDesc( findUser.getId(), pageable); return PostPageResponse.toResponse( @@ -177,7 +177,7 @@ public PostPageResponse getAllMySharedPost(AuthUser user, Pageable pageable) { */ @Transactional(readOnly = true) public PostPageResponse getAllLatestPost(Pageable pageable) { - Page findAllPosts = postRepository.findAllByOrderByCreatedAtDesc( + Page findAllPosts = postRepository.findAllByOrderByCreatedAtDesc( pageable); return PostPageResponse.toResponse( @@ -187,7 +187,7 @@ public PostPageResponse getAllLatestPost(Pageable pageable) { // 게시글 응답 형변환 - private PostResponse getPostResponse(Post post, List mediaUrls, + private PostResponse getPostResponse(SharePost post, List mediaUrls, List taggedUserIds) { return PostResponse.toResponse( post.getId(), @@ -206,7 +206,7 @@ private PostResponse getPostResponse(Post post, List mediaUrls, } // 게시글 생성 및 수정 시 미디어 등록 - private List saveAndGetMediaUrls(PostRequest request, Post targetPost) { + private List saveAndGetMediaUrls(PostRequest request, SharePost targetPost) { // 기존 등록된 게시글 관련 미디어 전부 삭제 mediaRepository.deleteAllByPostId(targetPost.getId()); @@ -227,7 +227,7 @@ private List saveAndGetMediaUrls(PostRequest request, Post targetPost) { } // 게시글 생성 및 수정 시 태그 등록 - private List saveAndGetTaggedUserIds(PostRequest request, Post targetPost) { + private List saveAndGetTaggedUserIds(PostRequest request, SharePost targetPost) { // 사용자 태그를 20명으로 제한 if (request.getTaggedUserIds().size() > TAGGED_USER_MAX_SIZE) { @@ -252,21 +252,21 @@ private List saveAndGetTaggedUserIds(PostRequest request, Post targetPost) } // 게시글 연관 미디어 순서 보장하여 조회 - private List getMediaUrls(Post post) { + private List getMediaUrls(SharePost post) { return mediaRepository.findALLByPostIdOrderBySequenceAsc(post.getId()).stream() .map(Media::getMediaUrl) .toList(); } // 게시글 연관 태그 순서 보장하여 조회 - private List getTaggedUserIds(Post post) { + private List getTaggedUserIds(SharePost post) { return taggedUserRepository.findAllByPostIdOrderBySequenceAsc(post.getId()).stream() .map(TaggedUser::getTaggedUserId) .toList(); } // 기존 추천한 이력 유무에 따른 추천수 증감 - private void updateLikeStatus(Optional postLike, Post findPost, User findUser) { + private void updateLikeStatus(Optional postLike, SharePost findPost, User findUser) { if (postLike.isEmpty()) { postLikeRepository.save(PostLike.builder() .likedAt(LocalDate.now()) @@ -281,14 +281,14 @@ private void updateLikeStatus(Optional postLike, Post findPost, User f } // 게시글 정보 응답 dto 로 변환 - private PostInfoResponse convertToPostInfoResponse(Post post) { + private PostInfoResponse convertToPostInfoResponse(SharePost post) { Media thumbnailMedia = mediaRepository.findALLByPostIdOrderBySequenceAsc(post.getId()).get(0); return PostInfoResponse.toResponse(post.getId(), post.getContent(), thumbnailMedia.getMediaUrl()); } // 게시글 반환, 없으면 예외처리 - public Post getPostOrThrowIfNotExist(Long postId) { + public SharePost getPostOrThrowIfNotExist(Long postId) { return postRepository.findById(postId).orElseThrow( () -> new PostInvalidException(ErrorType.POST_NOT_FOUND_ERROR) ); diff --git a/src/main/java/com/double_o/dambap/post/share/domain/Category.java b/src/main/java/com/double_o/dambap/post/share/domain/Category.java new file mode 100644 index 0000000..1c2232a --- /dev/null +++ b/src/main/java/com/double_o/dambap/post/share/domain/Category.java @@ -0,0 +1,6 @@ +package com.double_o.dambap.post.share.domain; + +public enum Category { + + CHICKEN, PIZZA +} diff --git a/src/main/java/com/double_o/dambap/post/domain/Post.java b/src/main/java/com/double_o/dambap/post/share/domain/SharePost.java similarity index 92% rename from src/main/java/com/double_o/dambap/post/domain/Post.java rename to src/main/java/com/double_o/dambap/post/share/domain/SharePost.java index d7d5d0b..3afb803 100644 --- a/src/main/java/com/double_o/dambap/post/domain/Post.java +++ b/src/main/java/com/double_o/dambap/post/share/domain/SharePost.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.post.domain; +package com.double_o.dambap.post.share.domain; import com.double_o.dambap.common.entity.BaseEntity; import com.double_o.dambap.exception.dto.ErrorType; @@ -16,12 +16,12 @@ import lombok.NoArgsConstructor; @Entity -@Table(name = "post") +@Table(name = "share_post") @NoArgsConstructor @AllArgsConstructor @Getter @Builder -public class Post extends BaseEntity { +public class SharePost extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -45,7 +45,7 @@ public class Post extends BaseEntity { @Column(name = "writer_id") private Long writerId; - public void updatePost( + public void updateSharePost( Category category, LocalDate manufactureDate, int expireDays, diff --git a/src/main/java/com/double_o/dambap/post/domain/TaggedUser.java b/src/main/java/com/double_o/dambap/post/share/domain/TaggedUser.java similarity index 93% rename from src/main/java/com/double_o/dambap/post/domain/TaggedUser.java rename to src/main/java/com/double_o/dambap/post/share/domain/TaggedUser.java index 3d6b748..3518a5b 100644 --- a/src/main/java/com/double_o/dambap/post/domain/TaggedUser.java +++ b/src/main/java/com/double_o/dambap/post/share/domain/TaggedUser.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.post.domain; +package com.double_o.dambap.post.share.domain; import jakarta.persistence.Column; import jakarta.persistence.Entity; diff --git a/src/main/java/com/double_o/dambap/post/share/domain/Type.java b/src/main/java/com/double_o/dambap/post/share/domain/Type.java new file mode 100644 index 0000000..d78a563 --- /dev/null +++ b/src/main/java/com/double_o/dambap/post/share/domain/Type.java @@ -0,0 +1,5 @@ +package com.double_o.dambap.post.share.domain; + +public enum Type { + SHARED, RECEIVED +} diff --git a/src/main/java/com/double_o/dambap/post/dto/request/PostRequest.java b/src/main/java/com/double_o/dambap/post/share/dto/request/PostRequest.java similarity index 87% rename from src/main/java/com/double_o/dambap/post/dto/request/PostRequest.java rename to src/main/java/com/double_o/dambap/post/share/dto/request/PostRequest.java index 459b391..c9552aa 100644 --- a/src/main/java/com/double_o/dambap/post/dto/request/PostRequest.java +++ b/src/main/java/com/double_o/dambap/post/share/dto/request/PostRequest.java @@ -1,6 +1,6 @@ -package com.double_o.dambap.post.dto.request; +package com.double_o.dambap.post.share.dto.request; -import com.double_o.dambap.post.domain.Category; +import com.double_o.dambap.post.share.domain.Category; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotNull; import java.time.LocalDate; diff --git a/src/main/java/com/double_o/dambap/post/dto/response/PostInfoResponse.java b/src/main/java/com/double_o/dambap/post/share/dto/response/PostInfoResponse.java similarity index 87% rename from src/main/java/com/double_o/dambap/post/dto/response/PostInfoResponse.java rename to src/main/java/com/double_o/dambap/post/share/dto/response/PostInfoResponse.java index 18af2de..d62cd96 100644 --- a/src/main/java/com/double_o/dambap/post/dto/response/PostInfoResponse.java +++ b/src/main/java/com/double_o/dambap/post/share/dto/response/PostInfoResponse.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.post.dto.response; +package com.double_o.dambap.post.share.dto.response; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/main/java/com/double_o/dambap/post/dto/response/PostPageResponse.java b/src/main/java/com/double_o/dambap/post/share/dto/response/PostPageResponse.java similarity index 89% rename from src/main/java/com/double_o/dambap/post/dto/response/PostPageResponse.java rename to src/main/java/com/double_o/dambap/post/share/dto/response/PostPageResponse.java index aae2ff8..d746a0e 100644 --- a/src/main/java/com/double_o/dambap/post/dto/response/PostPageResponse.java +++ b/src/main/java/com/double_o/dambap/post/share/dto/response/PostPageResponse.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.post.dto.response; +package com.double_o.dambap.post.share.dto.response; import java.util.List; diff --git a/src/main/java/com/double_o/dambap/post/dto/response/PostResponse.java b/src/main/java/com/double_o/dambap/post/share/dto/response/PostResponse.java similarity index 91% rename from src/main/java/com/double_o/dambap/post/dto/response/PostResponse.java rename to src/main/java/com/double_o/dambap/post/share/dto/response/PostResponse.java index 9c9965f..556da44 100644 --- a/src/main/java/com/double_o/dambap/post/dto/response/PostResponse.java +++ b/src/main/java/com/double_o/dambap/post/share/dto/response/PostResponse.java @@ -1,6 +1,6 @@ -package com.double_o.dambap.post.dto.response; +package com.double_o.dambap.post.share.dto.response; -import com.double_o.dambap.post.domain.Category; +import com.double_o.dambap.post.share.domain.Category; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; diff --git a/src/main/java/com/double_o/dambap/post/share/infrastructure/SharePostRepository.java b/src/main/java/com/double_o/dambap/post/share/infrastructure/SharePostRepository.java new file mode 100644 index 0000000..bf37e94 --- /dev/null +++ b/src/main/java/com/double_o/dambap/post/share/infrastructure/SharePostRepository.java @@ -0,0 +1,17 @@ +package com.double_o.dambap.post.share.infrastructure; + +import com.double_o.dambap.post.share.domain.SharePost; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +@Repository +@Transactional(readOnly = true) +public interface SharePostRepository extends JpaRepository { + + Page findAllByOrderByCreatedAtDesc(Pageable pageable); + + Page findAllByWriterIdOrderByCreatedAtDesc(Long userId, Pageable pageable); +} diff --git a/src/main/java/com/double_o/dambap/post/infrastructure/TaggedUserRepository.java b/src/main/java/com/double_o/dambap/post/share/infrastructure/TaggedUserRepository.java similarity index 79% rename from src/main/java/com/double_o/dambap/post/infrastructure/TaggedUserRepository.java rename to src/main/java/com/double_o/dambap/post/share/infrastructure/TaggedUserRepository.java index 6af822f..e1399ff 100644 --- a/src/main/java/com/double_o/dambap/post/infrastructure/TaggedUserRepository.java +++ b/src/main/java/com/double_o/dambap/post/share/infrastructure/TaggedUserRepository.java @@ -1,6 +1,6 @@ -package com.double_o.dambap.post.infrastructure; +package com.double_o.dambap.post.share.infrastructure; -import com.double_o.dambap.post.domain.TaggedUser; +import com.double_o.dambap.post.share.domain.TaggedUser; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/double_o/dambap/post/presentation/PostController.java b/src/main/java/com/double_o/dambap/post/share/presentation/SharePostController.java similarity index 94% rename from src/main/java/com/double_o/dambap/post/presentation/PostController.java rename to src/main/java/com/double_o/dambap/post/share/presentation/SharePostController.java index 81d65e9..faecf01 100644 --- a/src/main/java/com/double_o/dambap/post/presentation/PostController.java +++ b/src/main/java/com/double_o/dambap/post/share/presentation/SharePostController.java @@ -1,9 +1,9 @@ -package com.double_o.dambap.post.presentation; +package com.double_o.dambap.post.share.presentation; import com.double_o.dambap.auth.model.AuthUser; import com.double_o.dambap.common.model.ResponseDto; -import com.double_o.dambap.post.application.PostService; -import com.double_o.dambap.post.dto.request.PostRequest; +import com.double_o.dambap.post.share.application.SharePostService; +import com.double_o.dambap.post.share.dto.request.PostRequest; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.Valid; @@ -24,9 +24,9 @@ @RestController @RequestMapping(path = "/api/v1/posts/shared") @RequiredArgsConstructor -public class PostController { +public class SharePostController { - private final PostService postService; + private final SharePostService postService; @Operation(summary = "게시글 생성") @PostMapping diff --git a/src/main/java/com/double_o/dambap/post/utils/TaggedUserConstants.java b/src/main/java/com/double_o/dambap/post/share/utils/TaggedUserConstants.java similarity index 67% rename from src/main/java/com/double_o/dambap/post/utils/TaggedUserConstants.java rename to src/main/java/com/double_o/dambap/post/share/utils/TaggedUserConstants.java index 7999d76..ac5385a 100644 --- a/src/main/java/com/double_o/dambap/post/utils/TaggedUserConstants.java +++ b/src/main/java/com/double_o/dambap/post/share/utils/TaggedUserConstants.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.post.utils; +package com.double_o.dambap.post.share.utils; public class TaggedUserConstants { From b034b9e36c9f4fbfe536b4db424e4115733c010e Mon Sep 17 00:00:00 2001 From: OhHaneol Date: Thu, 4 Sep 2025 20:40:09 +0900 Subject: [PATCH 02/10] =?UTF-8?q?refactor:=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../post/share/presentation/SharePostController.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/double_o/dambap/post/share/presentation/SharePostController.java b/src/main/java/com/double_o/dambap/post/share/presentation/SharePostController.java index faecf01..42542f0 100644 --- a/src/main/java/com/double_o/dambap/post/share/presentation/SharePostController.java +++ b/src/main/java/com/double_o/dambap/post/share/presentation/SharePostController.java @@ -30,7 +30,7 @@ public class SharePostController { @Operation(summary = "게시글 생성") @PostMapping - public ResponseEntity createQuestion( + public ResponseEntity createSharePost( AuthUser user, @Parameter(required = true, description = "게시글 생성 요청") @RequestBody @Valid PostRequest request) { @@ -40,7 +40,7 @@ public ResponseEntity createQuestion( @Operation(summary = "게시글 조회") @GetMapping(path = "/{postId}") - public ResponseEntity readQuestion( + public ResponseEntity readSharePost( @Parameter(description = "게시글 고유 번호") @PathVariable("postId") Long postId) { var response = postService.getPost(postId); @@ -49,7 +49,7 @@ public ResponseEntity readQuestion( @Operation(summary = "게시글 수정") @PutMapping(path = "/{postId}") - public ResponseEntity updateQuestion( + public ResponseEntity updateSharePost( AuthUser user, @Parameter(description = "게시글 고유 번호") @PathVariable("postId") Long postId, @@ -61,7 +61,7 @@ public ResponseEntity updateQuestion( @Operation(summary = "게시글 삭제") @DeleteMapping(path = "/{postId}") - public ResponseEntity deleteQuestion( + public ResponseEntity deleteSharePost( AuthUser user, @Parameter(description = "게시글 고유 번호") @PathVariable("postId") Long postId @@ -72,7 +72,7 @@ public ResponseEntity deleteQuestion( @Operation(summary = "게시글 추천") @PostMapping(path = "/{postId}/recommendation") - public ResponseEntity recommendQuestion( + public ResponseEntity recommendSharePost( AuthUser user, @Parameter(description = "게시글 고유 번호") @PathVariable("postId") Long postId @@ -94,7 +94,7 @@ public ResponseEntity changePublicity( @Operation(summary = "내가 나눈 음식 게시글 목록 조회") @GetMapping(path = "/all-my-shared-post") - public ResponseEntity getAllMySharedPost( + public ResponseEntity getAllMySharePost( AuthUser user, @Parameter(description = "한 페이지의 데이터 개수") @PageableDefault(size = 12) Pageable pageable From fd4f26ed9ecec9ca5a479d375fdbcabc17a2669f Mon Sep 17 00:00:00 2001 From: OhHaneol Date: Thu, 4 Sep 2025 21:15:27 +0900 Subject: [PATCH 03/10] =?UTF-8?q?refactor:=20=ED=8C=A8=ED=82=A4=EC=A7=80?= =?UTF-8?q?=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD(=EA=B8=B0=EC=A1=B4?= =?UTF-8?q?=20post=20=EC=88=98=EC=A7=81=20=EA=B4=80=EA=B3=84=20->=20?= =?UTF-8?q?=EC=88=98=ED=8F=89=20=EA=B4=80=EA=B3=84)=20=EB=B0=8F=20like=20?= =?UTF-8?q?=EB=8F=84=EB=A9=94=EC=9D=B8=20type=20=EC=BB=AC=EB=9F=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PostLike.java => like/domain/Like.java} | 19 ++-- .../dto/response/LikeResponse.java} | 8 +- .../infrastructure/LikeRepository.java} | 7 +- .../dambap/{post => }/media/Media.java | 4 +- .../{post => }/media/MediaRepository.java | 2 +- .../PostService.java} | 103 +++++++++--------- .../double_o/dambap/post/domain/Category.java | 6 + .../SharePost.java => domain/Post.java} | 8 +- .../post/{share => }/domain/TaggedUser.java | 2 +- .../com/double_o/dambap/post/domain/Type.java | 5 + .../{share => }/dto/request/PostRequest.java | 4 +- .../dto/response/PostInfoResponse.java | 2 +- .../dto/response/PostPageResponse.java | 2 +- .../dto/response/PostResponse.java | 4 +- .../post/infrastructure/PostRepository.java | 17 +++ .../infrastructure/TaggedUserRepository.java | 4 +- .../PostController.java} | 14 +-- .../dambap/post/share/domain/Category.java | 6 - .../dambap/post/share/domain/Type.java | 5 - .../infrastructure/SharePostRepository.java | 17 --- .../utils/TaggedUserConstants.java | 2 +- 21 files changed, 121 insertions(+), 120 deletions(-) rename src/main/java/com/double_o/dambap/{post/like/PostLike.java => like/domain/Like.java} (64%) rename src/main/java/com/double_o/dambap/{post/like/PostLikeResponse.java => like/dto/response/LikeResponse.java} (52%) rename src/main/java/com/double_o/dambap/{post/like/PostLikeRepository.java => like/infrastructure/LikeRepository.java} (52%) rename src/main/java/com/double_o/dambap/{post => }/media/Media.java (90%) rename src/main/java/com/double_o/dambap/{post => }/media/MediaRepository.java (91%) rename src/main/java/com/double_o/dambap/post/{share/application/SharePostService.java => application/PostService.java} (72%) create mode 100644 src/main/java/com/double_o/dambap/post/domain/Category.java rename src/main/java/com/double_o/dambap/post/{share/domain/SharePost.java => domain/Post.java} (92%) rename src/main/java/com/double_o/dambap/post/{share => }/domain/TaggedUser.java (93%) create mode 100644 src/main/java/com/double_o/dambap/post/domain/Type.java rename src/main/java/com/double_o/dambap/post/{share => }/dto/request/PostRequest.java (87%) rename src/main/java/com/double_o/dambap/post/{share => }/dto/response/PostInfoResponse.java (87%) rename src/main/java/com/double_o/dambap/post/{share => }/dto/response/PostPageResponse.java (89%) rename src/main/java/com/double_o/dambap/post/{share => }/dto/response/PostResponse.java (91%) create mode 100644 src/main/java/com/double_o/dambap/post/infrastructure/PostRepository.java rename src/main/java/com/double_o/dambap/post/{share => }/infrastructure/TaggedUserRepository.java (79%) rename src/main/java/com/double_o/dambap/post/{share/presentation/SharePostController.java => presentation/PostController.java} (91%) delete mode 100644 src/main/java/com/double_o/dambap/post/share/domain/Category.java delete mode 100644 src/main/java/com/double_o/dambap/post/share/domain/Type.java delete mode 100644 src/main/java/com/double_o/dambap/post/share/infrastructure/SharePostRepository.java rename src/main/java/com/double_o/dambap/post/{share => }/utils/TaggedUserConstants.java (67%) diff --git a/src/main/java/com/double_o/dambap/post/like/PostLike.java b/src/main/java/com/double_o/dambap/like/domain/Like.java similarity index 64% rename from src/main/java/com/double_o/dambap/post/like/PostLike.java rename to src/main/java/com/double_o/dambap/like/domain/Like.java index fe71494..9db7c33 100644 --- a/src/main/java/com/double_o/dambap/post/like/PostLike.java +++ b/src/main/java/com/double_o/dambap/like/domain/Like.java @@ -1,6 +1,6 @@ -package com.double_o.dambap.post.like; +package com.double_o.dambap.like.domain; -import com.double_o.dambap.post.share.domain.Type; +import com.double_o.dambap.post.domain.Type; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; @@ -17,21 +17,20 @@ import lombok.NoArgsConstructor; @Entity -//@Table(name = "post_like") // 조회 성능을 위한 JPA 이용 인덱스 추가 @Table( - name = "post_like", + name = "like", indexes = { - @Index(name = "idx_postlike_postid", columnList = "post_id"), - @Index(name = "idx_postlike_likerid", columnList = "liker_id"), - @Index(name = "uq_postlike_postid_likerid", columnList = "post_id, liker_id", unique = true) + @Index(name = "idx_like_targetid", columnList = "target_id"), + @Index(name = "idx_like_likerid", columnList = "liker_id"), + @Index(name = "uq_like_targetid_likerid", columnList = "target_id, liker_id", unique = true) } ) @NoArgsConstructor @AllArgsConstructor @Getter @Builder -public class PostLike { +public class Like { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -40,8 +39,8 @@ public class PostLike { @Column(name = "liked_at") private LocalDate likedAt; - @Column(name = "post_id") - private Long postId; + @Column(name = "target_id") + private Long targetId; @Column(name = "liker_id") private Long likerId; diff --git a/src/main/java/com/double_o/dambap/post/like/PostLikeResponse.java b/src/main/java/com/double_o/dambap/like/dto/response/LikeResponse.java similarity index 52% rename from src/main/java/com/double_o/dambap/post/like/PostLikeResponse.java rename to src/main/java/com/double_o/dambap/like/dto/response/LikeResponse.java index 202142f..3db07b8 100644 --- a/src/main/java/com/double_o/dambap/post/like/PostLikeResponse.java +++ b/src/main/java/com/double_o/dambap/like/dto/response/LikeResponse.java @@ -1,18 +1,18 @@ -package com.double_o.dambap.post.like; +package com.double_o.dambap.like.dto.response; import lombok.AllArgsConstructor; import lombok.Data; @Data @AllArgsConstructor -public class PostLikeResponse { +public class LikeResponse { private Long postId; private int likeCnt; - public static PostLikeResponse toResponse( + public static LikeResponse toResponse( Long postId, int likeCnt ) { - return new PostLikeResponse(postId, likeCnt); + return new LikeResponse(postId, likeCnt); } } diff --git a/src/main/java/com/double_o/dambap/post/like/PostLikeRepository.java b/src/main/java/com/double_o/dambap/like/infrastructure/LikeRepository.java similarity index 52% rename from src/main/java/com/double_o/dambap/post/like/PostLikeRepository.java rename to src/main/java/com/double_o/dambap/like/infrastructure/LikeRepository.java index c0cfc6e..ef8d8fd 100644 --- a/src/main/java/com/double_o/dambap/post/like/PostLikeRepository.java +++ b/src/main/java/com/double_o/dambap/like/infrastructure/LikeRepository.java @@ -1,5 +1,6 @@ -package com.double_o.dambap.post.like; +package com.double_o.dambap.like.infrastructure; +import com.double_o.dambap.like.domain.Like; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -7,7 +8,7 @@ @Repository @Transactional(readOnly = true) -public interface PostLikeRepository extends JpaRepository { +public interface LikeRepository extends JpaRepository { - Optional findByPostIdAndLikerId(Long postId, Long likerId); + Optional findByPostIdAndLikerId(Long postId, Long likerId); } diff --git a/src/main/java/com/double_o/dambap/post/media/Media.java b/src/main/java/com/double_o/dambap/media/Media.java similarity index 90% rename from src/main/java/com/double_o/dambap/post/media/Media.java rename to src/main/java/com/double_o/dambap/media/Media.java index fe26f6b..eb94c61 100644 --- a/src/main/java/com/double_o/dambap/post/media/Media.java +++ b/src/main/java/com/double_o/dambap/media/Media.java @@ -1,6 +1,6 @@ -package com.double_o.dambap.post.media; +package com.double_o.dambap.media; -import com.double_o.dambap.post.share.domain.Type; +import com.double_o.dambap.post.domain.Type; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.EnumType; diff --git a/src/main/java/com/double_o/dambap/post/media/MediaRepository.java b/src/main/java/com/double_o/dambap/media/MediaRepository.java similarity index 91% rename from src/main/java/com/double_o/dambap/post/media/MediaRepository.java rename to src/main/java/com/double_o/dambap/media/MediaRepository.java index fdb260e..640e833 100644 --- a/src/main/java/com/double_o/dambap/post/media/MediaRepository.java +++ b/src/main/java/com/double_o/dambap/media/MediaRepository.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.post.media; +package com.double_o.dambap.media; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; diff --git a/src/main/java/com/double_o/dambap/post/share/application/SharePostService.java b/src/main/java/com/double_o/dambap/post/application/PostService.java similarity index 72% rename from src/main/java/com/double_o/dambap/post/share/application/SharePostService.java rename to src/main/java/com/double_o/dambap/post/application/PostService.java index 47353a1..9deacef 100644 --- a/src/main/java/com/double_o/dambap/post/share/application/SharePostService.java +++ b/src/main/java/com/double_o/dambap/post/application/PostService.java @@ -1,25 +1,24 @@ -package com.double_o.dambap.post.share.application; - -import static com.double_o.dambap.post.share.utils.TaggedUserConstants.TAGGED_USER_MAX_SIZE; +package com.double_o.dambap.post.application; import com.double_o.dambap.auth.model.AuthUser; import com.double_o.dambap.exception.dto.ErrorType; import com.double_o.dambap.exception.post.PostInvalidException; -import com.double_o.dambap.post.like.PostLike; -import com.double_o.dambap.post.media.Media; -import com.double_o.dambap.post.share.domain.TaggedUser; -import com.double_o.dambap.post.share.domain.Type; -import com.double_o.dambap.post.share.dto.response.PostInfoResponse; -import com.double_o.dambap.post.like.PostLikeResponse; -import com.double_o.dambap.post.share.dto.response.PostPageResponse; -import com.double_o.dambap.post.like.PostLikeRepository; -import com.double_o.dambap.post.share.domain.SharePost; -import com.double_o.dambap.post.share.dto.request.PostRequest; -import com.double_o.dambap.post.share.dto.response.PostResponse; -import com.double_o.dambap.post.media.MediaRepository; -import com.double_o.dambap.post.share.infrastructure.SharePostRepository; +import com.double_o.dambap.like.domain.Like; +import com.double_o.dambap.media.Media; +import com.double_o.dambap.post.domain.Post; +import com.double_o.dambap.post.domain.TaggedUser; +import com.double_o.dambap.post.domain.Type; +import com.double_o.dambap.post.dto.request.PostRequest; +import com.double_o.dambap.post.dto.response.PostInfoResponse; +import com.double_o.dambap.post.dto.response.PostPageResponse; +import com.double_o.dambap.post.dto.response.PostResponse; +import com.double_o.dambap.post.infrastructure.PostRepository; +import com.double_o.dambap.post.infrastructure.TaggedUserRepository; +import com.double_o.dambap.like.dto.response.LikeResponse; +import com.double_o.dambap.like.infrastructure.LikeRepository; +import com.double_o.dambap.media.MediaRepository; import com.double_o.dambap.auth.service.AuthValidationUtils; -import com.double_o.dambap.post.share.infrastructure.TaggedUserRepository; +import com.double_o.dambap.post.utils.TaggedUserConstants; import com.double_o.dambap.user.domain.User; import com.double_o.dambap.user.application.UserValidationService; import com.double_o.dambap.common.dto.SuccessResponse; @@ -37,11 +36,11 @@ @Slf4j @Service @RequiredArgsConstructor -public class SharePostService { +public class PostService { private final UserValidationService userValidationService; - private final SharePostRepository postRepository; - private final PostLikeRepository postLikeRepository; + private final PostRepository postRepository; + private final LikeRepository LikeRepository; private final TaggedUserRepository taggedUserRepository; private final MediaRepository mediaRepository; @@ -53,7 +52,7 @@ public PostResponse createPost(AuthUser user, PostRequest request) { User findUser = userValidationService.getUserOrThrowIfNotExist(user.getId()); - SharePost post = SharePost.builder() + Post post = Post.builder() .category(request.getCategory()) .manufactureDate(request.getManufactureDate()) .expireDays(request.getExpireDays()) @@ -63,7 +62,7 @@ public PostResponse createPost(AuthUser user, PostRequest request) { .writerId(findUser.getId()) .build(); - SharePost savedPost = postRepository.save(post); + Post savedPost = postRepository.save(post); List mediaUrls = saveAndGetMediaUrls(request, savedPost); @@ -77,7 +76,7 @@ public PostResponse createPost(AuthUser user, PostRequest request) { */ public PostResponse getPost(Long postId) { - SharePost findPost = getPostOrThrowIfNotExist(postId); + Post findPost = getPostOrThrowIfNotExist(postId); List mediaUrls = getMediaUrls(findPost); @@ -92,13 +91,13 @@ public PostResponse getPost(Long postId) { @Transactional public PostResponse editPost(AuthUser user, Long postId, PostRequest request) { - SharePost findPost = getPostOrThrowIfNotExist(postId); + Post findPost = getPostOrThrowIfNotExist(postId); User findUser = userValidationService.getUserOrThrowIfNotExist(user.getId()); AuthValidationUtils.verifySameUser(findUser.getId(), findPost.getWriterId()); - findPost.updateSharePost(request.getCategory(), request.getManufactureDate(), + findPost.updatePost(request.getCategory(), request.getManufactureDate(), request.getExpireDays(), request.getContent(), request.isPublic()); List mediaUrls = saveAndGetMediaUrls(request, findPost); @@ -114,7 +113,7 @@ public PostResponse editPost(AuthUser user, Long postId, PostRequest request) { @Transactional public SuccessResponse deletePost(AuthUser user, Long postId) { - SharePost findPost = getPostOrThrowIfNotExist(postId); + Post findPost = getPostOrThrowIfNotExist(postId); User findUser = userValidationService.getUserOrThrowIfNotExist(user.getId()); @@ -129,18 +128,18 @@ public SuccessResponse deletePost(AuthUser user, Long postId) { * 게시글 좋아요 */ @Transactional - public PostLikeResponse updatePostLike(AuthUser user, Long postId) { + public LikeResponse updatePostLike(AuthUser user, Long postId) { User findUser = userValidationService.getUserOrThrowIfNotExist(user.getId()); - SharePost findPost = getPostOrThrowIfNotExist(postId); + Post findPost = getPostOrThrowIfNotExist(postId); - Optional postLike = postLikeRepository.findByPostIdAndLikerId( + Optional like = LikeRepository.findByPostIdAndLikerId( findPost.getId(), findUser.getId()); - updateLikeStatus(postLike, findPost, findUser); + updateLikeStatus(like, findPost, findUser); - return PostLikeResponse.toResponse(findPost.getId(), findPost.getLikeCnt()); + return LikeResponse.toResponse(findPost.getId(), findPost.getLikeCnt()); } /** @@ -151,7 +150,7 @@ public SuccessResponse changePublicity(AuthUser user, Long postId) { userValidationService.getUserOrThrowIfNotExist(user.getId()); - SharePost findPost = getPostOrThrowIfNotExist(postId); + Post findPost = getPostOrThrowIfNotExist(postId); findPost.changePublicity(); return new SuccessResponse("공개여부가 성공적으로 전환되었습니다."); @@ -160,16 +159,16 @@ public SuccessResponse changePublicity(AuthUser user, Long postId) { /** * 내가 나눈 음식 게시글 목록 최신순으로 반환 */ - public PostPageResponse getAllMySharedPost(AuthUser user, Pageable pageable) { + public PostPageResponse getAllMyPost(AuthUser user, Pageable pageable) { User findUser = userValidationService.getUserOrThrowIfNotExist(user.getId()); - Page findAllMySharedPost = postRepository.findAllByWriterIdOrderByCreatedAtDesc( + Page findAllMyPost = postRepository.findAllByWriterIdOrderByCreatedAtDesc( findUser.getId(), pageable); return PostPageResponse.toResponse( pageable.getPageNumber(), - findAllMySharedPost.map(this::convertToPostInfoResponse).toList()); + findAllMyPost.map(this::convertToPostInfoResponse).toList()); } /** @@ -177,7 +176,7 @@ public PostPageResponse getAllMySharedPost(AuthUser user, Pageable pageable) { */ @Transactional(readOnly = true) public PostPageResponse getAllLatestPost(Pageable pageable) { - Page findAllPosts = postRepository.findAllByOrderByCreatedAtDesc( + Page findAllPosts = postRepository.findAllByOrderByCreatedAtDesc( pageable); return PostPageResponse.toResponse( @@ -187,7 +186,7 @@ public PostPageResponse getAllLatestPost(Pageable pageable) { // 게시글 응답 형변환 - private PostResponse getPostResponse(SharePost post, List mediaUrls, + private PostResponse getPostResponse(Post post, List mediaUrls, List taggedUserIds) { return PostResponse.toResponse( post.getId(), @@ -206,7 +205,7 @@ private PostResponse getPostResponse(SharePost post, List mediaUrls, } // 게시글 생성 및 수정 시 미디어 등록 - private List saveAndGetMediaUrls(PostRequest request, SharePost targetPost) { + private List saveAndGetMediaUrls(PostRequest request, Post targetPost) { // 기존 등록된 게시글 관련 미디어 전부 삭제 mediaRepository.deleteAllByPostId(targetPost.getId()); @@ -216,7 +215,7 @@ private List saveAndGetMediaUrls(PostRequest request, SharePost targetPo .mapToObj(i -> Media.builder() .postId(targetPost.getId()) .mediaUrl(request.getMediaUrls().get(i)) - .type(Type.SHARED) + .type(Type.POST) .sequence(i) // 순서 정보 부여 .build()) .toList(); @@ -227,10 +226,10 @@ private List saveAndGetMediaUrls(PostRequest request, SharePost targetPo } // 게시글 생성 및 수정 시 태그 등록 - private List saveAndGetTaggedUserIds(PostRequest request, SharePost targetPost) { + private List saveAndGetTaggedUserIds(PostRequest request, Post targetPost) { // 사용자 태그를 20명으로 제한 - if (request.getTaggedUserIds().size() > TAGGED_USER_MAX_SIZE) { + if (request.getTaggedUserIds().size() > TaggedUserConstants.TAGGED_USER_MAX_SIZE) { throw new PostInvalidException(ErrorType.TAGGED_USER_MAX_SIZE_20_ERROR); } @@ -252,43 +251,45 @@ private List saveAndGetTaggedUserIds(PostRequest request, SharePost target } // 게시글 연관 미디어 순서 보장하여 조회 - private List getMediaUrls(SharePost post) { + private List getMediaUrls(Post post) { return mediaRepository.findALLByPostIdOrderBySequenceAsc(post.getId()).stream() .map(Media::getMediaUrl) .toList(); } // 게시글 연관 태그 순서 보장하여 조회 - private List getTaggedUserIds(SharePost post) { + private List getTaggedUserIds(Post post) { return taggedUserRepository.findAllByPostIdOrderBySequenceAsc(post.getId()).stream() .map(TaggedUser::getTaggedUserId) .toList(); } // 기존 추천한 이력 유무에 따른 추천수 증감 - private void updateLikeStatus(Optional postLike, SharePost findPost, User findUser) { - if (postLike.isEmpty()) { - postLikeRepository.save(PostLike.builder() + private void updateLikeStatus(Optional like, Post findPost, User findUser) { + if (like.isEmpty()) { + LikeRepository.save(Like.builder() .likedAt(LocalDate.now()) - .postId(findPost.getId()) + .targetId(findPost.getId()) .likerId(findUser.getId()) + .type(Type.POST) .build()); findPost.increaseRecommendationCnt(); } else { - postLikeRepository.deleteById(postLike.get().getId()); + LikeRepository.deleteById(like.get().getId()); findPost.decreaseRecommendationCnt(); } } // 게시글 정보 응답 dto 로 변환 - private PostInfoResponse convertToPostInfoResponse(SharePost post) { - Media thumbnailMedia = mediaRepository.findALLByPostIdOrderBySequenceAsc(post.getId()).get(0); + private PostInfoResponse convertToPostInfoResponse(Post post) { + Media thumbnailMedia = mediaRepository.findALLByPostIdOrderBySequenceAsc(post.getId()) + .get(0); return PostInfoResponse.toResponse(post.getId(), post.getContent(), thumbnailMedia.getMediaUrl()); } // 게시글 반환, 없으면 예외처리 - public SharePost getPostOrThrowIfNotExist(Long postId) { + public Post getPostOrThrowIfNotExist(Long postId) { return postRepository.findById(postId).orElseThrow( () -> new PostInvalidException(ErrorType.POST_NOT_FOUND_ERROR) ); diff --git a/src/main/java/com/double_o/dambap/post/domain/Category.java b/src/main/java/com/double_o/dambap/post/domain/Category.java new file mode 100644 index 0000000..b108b59 --- /dev/null +++ b/src/main/java/com/double_o/dambap/post/domain/Category.java @@ -0,0 +1,6 @@ +package com.double_o.dambap.post.domain; + +public enum Category { + + CHICKEN, PIZZA +} diff --git a/src/main/java/com/double_o/dambap/post/share/domain/SharePost.java b/src/main/java/com/double_o/dambap/post/domain/Post.java similarity index 92% rename from src/main/java/com/double_o/dambap/post/share/domain/SharePost.java rename to src/main/java/com/double_o/dambap/post/domain/Post.java index 3afb803..d7d5d0b 100644 --- a/src/main/java/com/double_o/dambap/post/share/domain/SharePost.java +++ b/src/main/java/com/double_o/dambap/post/domain/Post.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.post.share.domain; +package com.double_o.dambap.post.domain; import com.double_o.dambap.common.entity.BaseEntity; import com.double_o.dambap.exception.dto.ErrorType; @@ -16,12 +16,12 @@ import lombok.NoArgsConstructor; @Entity -@Table(name = "share_post") +@Table(name = "post") @NoArgsConstructor @AllArgsConstructor @Getter @Builder -public class SharePost extends BaseEntity { +public class Post extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -45,7 +45,7 @@ public class SharePost extends BaseEntity { @Column(name = "writer_id") private Long writerId; - public void updateSharePost( + public void updatePost( Category category, LocalDate manufactureDate, int expireDays, diff --git a/src/main/java/com/double_o/dambap/post/share/domain/TaggedUser.java b/src/main/java/com/double_o/dambap/post/domain/TaggedUser.java similarity index 93% rename from src/main/java/com/double_o/dambap/post/share/domain/TaggedUser.java rename to src/main/java/com/double_o/dambap/post/domain/TaggedUser.java index 3518a5b..3d6b748 100644 --- a/src/main/java/com/double_o/dambap/post/share/domain/TaggedUser.java +++ b/src/main/java/com/double_o/dambap/post/domain/TaggedUser.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.post.share.domain; +package com.double_o.dambap.post.domain; import jakarta.persistence.Column; import jakarta.persistence.Entity; diff --git a/src/main/java/com/double_o/dambap/post/domain/Type.java b/src/main/java/com/double_o/dambap/post/domain/Type.java new file mode 100644 index 0000000..1842ed1 --- /dev/null +++ b/src/main/java/com/double_o/dambap/post/domain/Type.java @@ -0,0 +1,5 @@ +package com.double_o.dambap.post.domain; + +public enum Type { + POST, REVIEW +} diff --git a/src/main/java/com/double_o/dambap/post/share/dto/request/PostRequest.java b/src/main/java/com/double_o/dambap/post/dto/request/PostRequest.java similarity index 87% rename from src/main/java/com/double_o/dambap/post/share/dto/request/PostRequest.java rename to src/main/java/com/double_o/dambap/post/dto/request/PostRequest.java index c9552aa..459b391 100644 --- a/src/main/java/com/double_o/dambap/post/share/dto/request/PostRequest.java +++ b/src/main/java/com/double_o/dambap/post/dto/request/PostRequest.java @@ -1,6 +1,6 @@ -package com.double_o.dambap.post.share.dto.request; +package com.double_o.dambap.post.dto.request; -import com.double_o.dambap.post.share.domain.Category; +import com.double_o.dambap.post.domain.Category; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.validation.constraints.NotNull; import java.time.LocalDate; diff --git a/src/main/java/com/double_o/dambap/post/share/dto/response/PostInfoResponse.java b/src/main/java/com/double_o/dambap/post/dto/response/PostInfoResponse.java similarity index 87% rename from src/main/java/com/double_o/dambap/post/share/dto/response/PostInfoResponse.java rename to src/main/java/com/double_o/dambap/post/dto/response/PostInfoResponse.java index d62cd96..18af2de 100644 --- a/src/main/java/com/double_o/dambap/post/share/dto/response/PostInfoResponse.java +++ b/src/main/java/com/double_o/dambap/post/dto/response/PostInfoResponse.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.post.share.dto.response; +package com.double_o.dambap.post.dto.response; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/src/main/java/com/double_o/dambap/post/share/dto/response/PostPageResponse.java b/src/main/java/com/double_o/dambap/post/dto/response/PostPageResponse.java similarity index 89% rename from src/main/java/com/double_o/dambap/post/share/dto/response/PostPageResponse.java rename to src/main/java/com/double_o/dambap/post/dto/response/PostPageResponse.java index d746a0e..aae2ff8 100644 --- a/src/main/java/com/double_o/dambap/post/share/dto/response/PostPageResponse.java +++ b/src/main/java/com/double_o/dambap/post/dto/response/PostPageResponse.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.post.share.dto.response; +package com.double_o.dambap.post.dto.response; import java.util.List; diff --git a/src/main/java/com/double_o/dambap/post/share/dto/response/PostResponse.java b/src/main/java/com/double_o/dambap/post/dto/response/PostResponse.java similarity index 91% rename from src/main/java/com/double_o/dambap/post/share/dto/response/PostResponse.java rename to src/main/java/com/double_o/dambap/post/dto/response/PostResponse.java index 556da44..9c9965f 100644 --- a/src/main/java/com/double_o/dambap/post/share/dto/response/PostResponse.java +++ b/src/main/java/com/double_o/dambap/post/dto/response/PostResponse.java @@ -1,6 +1,6 @@ -package com.double_o.dambap.post.share.dto.response; +package com.double_o.dambap.post.dto.response; -import com.double_o.dambap.post.share.domain.Category; +import com.double_o.dambap.post.domain.Category; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; diff --git a/src/main/java/com/double_o/dambap/post/infrastructure/PostRepository.java b/src/main/java/com/double_o/dambap/post/infrastructure/PostRepository.java new file mode 100644 index 0000000..1e5d0ea --- /dev/null +++ b/src/main/java/com/double_o/dambap/post/infrastructure/PostRepository.java @@ -0,0 +1,17 @@ +package com.double_o.dambap.post.infrastructure; + +import com.double_o.dambap.post.domain.Post; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +@Repository +@Transactional(readOnly = true) +public interface PostRepository extends JpaRepository { + + Page findAllByOrderByCreatedAtDesc(Pageable pageable); + + Page findAllByWriterIdOrderByCreatedAtDesc(Long userId, Pageable pageable); +} diff --git a/src/main/java/com/double_o/dambap/post/share/infrastructure/TaggedUserRepository.java b/src/main/java/com/double_o/dambap/post/infrastructure/TaggedUserRepository.java similarity index 79% rename from src/main/java/com/double_o/dambap/post/share/infrastructure/TaggedUserRepository.java rename to src/main/java/com/double_o/dambap/post/infrastructure/TaggedUserRepository.java index e1399ff..6af822f 100644 --- a/src/main/java/com/double_o/dambap/post/share/infrastructure/TaggedUserRepository.java +++ b/src/main/java/com/double_o/dambap/post/infrastructure/TaggedUserRepository.java @@ -1,6 +1,6 @@ -package com.double_o.dambap.post.share.infrastructure; +package com.double_o.dambap.post.infrastructure; -import com.double_o.dambap.post.share.domain.TaggedUser; +import com.double_o.dambap.post.domain.TaggedUser; import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/double_o/dambap/post/share/presentation/SharePostController.java b/src/main/java/com/double_o/dambap/post/presentation/PostController.java similarity index 91% rename from src/main/java/com/double_o/dambap/post/share/presentation/SharePostController.java rename to src/main/java/com/double_o/dambap/post/presentation/PostController.java index 42542f0..60bbae6 100644 --- a/src/main/java/com/double_o/dambap/post/share/presentation/SharePostController.java +++ b/src/main/java/com/double_o/dambap/post/presentation/PostController.java @@ -1,9 +1,9 @@ -package com.double_o.dambap.post.share.presentation; +package com.double_o.dambap.post.presentation; import com.double_o.dambap.auth.model.AuthUser; import com.double_o.dambap.common.model.ResponseDto; -import com.double_o.dambap.post.share.application.SharePostService; -import com.double_o.dambap.post.share.dto.request.PostRequest; +import com.double_o.dambap.post.dto.request.PostRequest; +import com.double_o.dambap.post.application.PostService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import jakarta.validation.Valid; @@ -22,11 +22,11 @@ import org.springframework.web.bind.annotation.RestController; @RestController -@RequestMapping(path = "/api/v1/posts/shared") +@RequestMapping(path = "/api/v1/posts") @RequiredArgsConstructor -public class SharePostController { +public class PostController { - private final SharePostService postService; + private final PostService postService; @Operation(summary = "게시글 생성") @PostMapping @@ -99,7 +99,7 @@ public ResponseEntity getAllMySharePost( @Parameter(description = "한 페이지의 데이터 개수") @PageableDefault(size = 12) Pageable pageable ) { - var response = postService.getAllMySharedPost(user, pageable); + var response = postService.getAllMyPost(user, pageable); return ResponseDto.ok(response); } diff --git a/src/main/java/com/double_o/dambap/post/share/domain/Category.java b/src/main/java/com/double_o/dambap/post/share/domain/Category.java deleted file mode 100644 index 1c2232a..0000000 --- a/src/main/java/com/double_o/dambap/post/share/domain/Category.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.double_o.dambap.post.share.domain; - -public enum Category { - - CHICKEN, PIZZA -} diff --git a/src/main/java/com/double_o/dambap/post/share/domain/Type.java b/src/main/java/com/double_o/dambap/post/share/domain/Type.java deleted file mode 100644 index d78a563..0000000 --- a/src/main/java/com/double_o/dambap/post/share/domain/Type.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.double_o.dambap.post.share.domain; - -public enum Type { - SHARED, RECEIVED -} diff --git a/src/main/java/com/double_o/dambap/post/share/infrastructure/SharePostRepository.java b/src/main/java/com/double_o/dambap/post/share/infrastructure/SharePostRepository.java deleted file mode 100644 index bf37e94..0000000 --- a/src/main/java/com/double_o/dambap/post/share/infrastructure/SharePostRepository.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.double_o.dambap.post.share.infrastructure; - -import com.double_o.dambap.post.share.domain.SharePost; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - -@Repository -@Transactional(readOnly = true) -public interface SharePostRepository extends JpaRepository { - - Page findAllByOrderByCreatedAtDesc(Pageable pageable); - - Page findAllByWriterIdOrderByCreatedAtDesc(Long userId, Pageable pageable); -} diff --git a/src/main/java/com/double_o/dambap/post/share/utils/TaggedUserConstants.java b/src/main/java/com/double_o/dambap/post/utils/TaggedUserConstants.java similarity index 67% rename from src/main/java/com/double_o/dambap/post/share/utils/TaggedUserConstants.java rename to src/main/java/com/double_o/dambap/post/utils/TaggedUserConstants.java index ac5385a..7999d76 100644 --- a/src/main/java/com/double_o/dambap/post/share/utils/TaggedUserConstants.java +++ b/src/main/java/com/double_o/dambap/post/utils/TaggedUserConstants.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.post.share.utils; +package com.double_o.dambap.post.utils; public class TaggedUserConstants { From f02e03f964a5d8b1419e86018e57e384e6db3d7c Mon Sep 17 00:00:00 2001 From: OhHaneol Date: Thu, 4 Sep 2025 22:30:06 +0900 Subject: [PATCH 04/10] =?UTF-8?q?refactor:=20media=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=EC=9D=98=20=EC=BB=AC=EB=9F=BC=EB=AA=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/double_o/dambap/media/Media.java | 4 ++-- .../dambap/post/application/PostService.java | 15 +++++++++------ 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/double_o/dambap/media/Media.java b/src/main/java/com/double_o/dambap/media/Media.java index eb94c61..b5a8c32 100644 --- a/src/main/java/com/double_o/dambap/media/Media.java +++ b/src/main/java/com/double_o/dambap/media/Media.java @@ -26,8 +26,8 @@ public class Media { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(name = "post_id") - private Long postId; + @Column(name = "target_id") + private Long targetId; @Column(name = "media_url") private String mediaUrl; diff --git a/src/main/java/com/double_o/dambap/post/application/PostService.java b/src/main/java/com/double_o/dambap/post/application/PostService.java index 9deacef..2e5a723 100644 --- a/src/main/java/com/double_o/dambap/post/application/PostService.java +++ b/src/main/java/com/double_o/dambap/post/application/PostService.java @@ -148,11 +148,14 @@ public LikeResponse updatePostLike(AuthUser user, Long postId) { @Transactional public SuccessResponse changePublicity(AuthUser user, Long postId) { - userValidationService.getUserOrThrowIfNotExist(user.getId()); - Post findPost = getPostOrThrowIfNotExist(postId); + User findUser = userValidationService.getUserOrThrowIfNotExist(user.getId()); + + AuthValidationUtils.verifySameUser(findUser.getId(), findPost.getWriterId()); + findPost.changePublicity(); + return new SuccessResponse("공개여부가 성공적으로 전환되었습니다."); } @@ -208,12 +211,12 @@ private PostResponse getPostResponse(Post post, List mediaUrls, private List saveAndGetMediaUrls(PostRequest request, Post targetPost) { // 기존 등록된 게시글 관련 미디어 전부 삭제 - mediaRepository.deleteAllByPostId(targetPost.getId()); + mediaRepository.deleteAllByTargetId(targetPost.getId()); // request 에서 받아온 미디어 목록에 시퀀스 반영(오름차순), 순서 보장하여 저장, 리스트로 가공하여 반환 List medias = IntStream.range(0, request.getMediaUrls().size()) .mapToObj(i -> Media.builder() - .postId(targetPost.getId()) + .targetId(targetPost.getId()) .mediaUrl(request.getMediaUrls().get(i)) .type(Type.POST) .sequence(i) // 순서 정보 부여 @@ -252,7 +255,7 @@ private List saveAndGetTaggedUserIds(PostRequest request, Post targetPost) // 게시글 연관 미디어 순서 보장하여 조회 private List getMediaUrls(Post post) { - return mediaRepository.findALLByPostIdOrderBySequenceAsc(post.getId()).stream() + return mediaRepository.findALLByTargetIdOrderBySequenceAsc(post.getId()).stream() .map(Media::getMediaUrl) .toList(); } @@ -282,7 +285,7 @@ private void updateLikeStatus(Optional like, Post findPost, User findUser) // 게시글 정보 응답 dto 로 변환 private PostInfoResponse convertToPostInfoResponse(Post post) { - Media thumbnailMedia = mediaRepository.findALLByPostIdOrderBySequenceAsc(post.getId()) + Media thumbnailMedia = mediaRepository.findALLByTargetIdOrderBySequenceAsc(post.getId()) .get(0); return PostInfoResponse.toResponse(post.getId(), post.getContent(), thumbnailMedia.getMediaUrl()); From fa3006463ea1104d1a7d1de0c09377a271fbcb9c Mon Sep 17 00:00:00 2001 From: OhHaneol Date: Thu, 4 Sep 2025 22:30:21 +0900 Subject: [PATCH 05/10] =?UTF-8?q?refactor:=20media=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=EC=9D=98=20=EC=BB=AC=EB=9F=BC=EB=AA=85=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/double_o/dambap/media/MediaRepository.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/double_o/dambap/media/MediaRepository.java b/src/main/java/com/double_o/dambap/media/MediaRepository.java index 640e833..b74c73f 100644 --- a/src/main/java/com/double_o/dambap/media/MediaRepository.java +++ b/src/main/java/com/double_o/dambap/media/MediaRepository.java @@ -9,7 +9,11 @@ @Transactional(readOnly = true) public interface MediaRepository extends JpaRepository { - void deleteAllByPostId(Long postId); + void deleteAllByTargetId(Long postId); - List findALLByPostIdOrderBySequenceAsc(Long postId); + void deleteByTargetId(Long targetId); + + List findALLByTargetIdOrderBySequenceAsc(Long postId); + + Media findByTargetId(Long postId); } From c753a9f2c08c20c3e19df6adc365f2e2e76c7899 Mon Sep 17 00:00:00 2001 From: OhHaneol Date: Thu, 4 Sep 2025 22:50:02 +0900 Subject: [PATCH 06/10] =?UTF-8?q?refactor:=20postController=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/double_o/dambap/post/application/PostService.java | 7 +++++++ .../double_o/dambap/post/presentation/PostController.java | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/double_o/dambap/post/application/PostService.java b/src/main/java/com/double_o/dambap/post/application/PostService.java index 2e5a723..0bf7377 100644 --- a/src/main/java/com/double_o/dambap/post/application/PostService.java +++ b/src/main/java/com/double_o/dambap/post/application/PostService.java @@ -179,6 +179,7 @@ public PostPageResponse getAllMyPost(AuthUser user, Pageable pageable) { */ @Transactional(readOnly = true) public PostPageResponse getAllLatestPost(Pageable pageable) { + Page findAllPosts = postRepository.findAllByOrderByCreatedAtDesc( pageable); @@ -191,6 +192,7 @@ public PostPageResponse getAllLatestPost(Pageable pageable) { // 게시글 응답 형변환 private PostResponse getPostResponse(Post post, List mediaUrls, List taggedUserIds) { + return PostResponse.toResponse( post.getId(), post.getCreatedAt(), @@ -255,6 +257,7 @@ private List saveAndGetTaggedUserIds(PostRequest request, Post targetPost) // 게시글 연관 미디어 순서 보장하여 조회 private List getMediaUrls(Post post) { + return mediaRepository.findALLByTargetIdOrderBySequenceAsc(post.getId()).stream() .map(Media::getMediaUrl) .toList(); @@ -262,6 +265,7 @@ private List getMediaUrls(Post post) { // 게시글 연관 태그 순서 보장하여 조회 private List getTaggedUserIds(Post post) { + return taggedUserRepository.findAllByPostIdOrderBySequenceAsc(post.getId()).stream() .map(TaggedUser::getTaggedUserId) .toList(); @@ -269,6 +273,7 @@ private List getTaggedUserIds(Post post) { // 기존 추천한 이력 유무에 따른 추천수 증감 private void updateLikeStatus(Optional like, Post findPost, User findUser) { + if (like.isEmpty()) { LikeRepository.save(Like.builder() .likedAt(LocalDate.now()) @@ -285,6 +290,7 @@ private void updateLikeStatus(Optional like, Post findPost, User findUser) // 게시글 정보 응답 dto 로 변환 private PostInfoResponse convertToPostInfoResponse(Post post) { + Media thumbnailMedia = mediaRepository.findALLByTargetIdOrderBySequenceAsc(post.getId()) .get(0); return PostInfoResponse.toResponse(post.getId(), post.getContent(), @@ -293,6 +299,7 @@ private PostInfoResponse convertToPostInfoResponse(Post post) { // 게시글 반환, 없으면 예외처리 public Post getPostOrThrowIfNotExist(Long postId) { + return postRepository.findById(postId).orElseThrow( () -> new PostInvalidException(ErrorType.POST_NOT_FOUND_ERROR) ); diff --git a/src/main/java/com/double_o/dambap/post/presentation/PostController.java b/src/main/java/com/double_o/dambap/post/presentation/PostController.java index 60bbae6..2741347 100644 --- a/src/main/java/com/double_o/dambap/post/presentation/PostController.java +++ b/src/main/java/com/double_o/dambap/post/presentation/PostController.java @@ -93,7 +93,7 @@ public ResponseEntity changePublicity( } @Operation(summary = "내가 나눈 음식 게시글 목록 조회") - @GetMapping(path = "/all-my-shared-post") + @GetMapping(path = "/all-my-posts") public ResponseEntity getAllMySharePost( AuthUser user, @Parameter(description = "한 페이지의 데이터 개수") @@ -104,7 +104,7 @@ public ResponseEntity getAllMySharePost( } @Operation(summary = "전체 나눈 음식 게시글 목록 조회") - @GetMapping(path = "/all-latest-post") + @GetMapping(path = "/all-latest-posts") public ResponseEntity getAllLatestPost( @Parameter(description = "한 페이지의 데이터 개수") @PageableDefault(size = 12) Pageable pageable From ec2dc5dd74507c3592f5a678f130ef0553ca2b4d Mon Sep 17 00:00:00 2001 From: OhHaneol Date: Thu, 4 Sep 2025 23:15:56 +0900 Subject: [PATCH 07/10] =?UTF-8?q?feat:=20=EC=A2=8B=EC=95=84=EC=9A=94=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EC=9D=98=20=EB=B6=84=EB=A6=AC=20=EB=B0=8F=20?= =?UTF-8?q?=EC=B6=94=EC=83=81=ED=99=94=EB=A1=9C=20post=20=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20=EC=9D=98=EC=A1=B4=EC=84=B1=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dambap/like/application/LikeService.java | 39 +++++++++++++++++++ .../double_o/dambap/like/common/Likeable.java | 10 +++++ .../like/infrastructure/LikeRepository.java | 2 +- .../dambap/post/application/PostService.java | 29 ++------------ .../com/double_o/dambap/post/domain/Post.java | 9 +++-- 5 files changed, 59 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/double_o/dambap/like/application/LikeService.java create mode 100644 src/main/java/com/double_o/dambap/like/common/Likeable.java diff --git a/src/main/java/com/double_o/dambap/like/application/LikeService.java b/src/main/java/com/double_o/dambap/like/application/LikeService.java new file mode 100644 index 0000000..c914bf1 --- /dev/null +++ b/src/main/java/com/double_o/dambap/like/application/LikeService.java @@ -0,0 +1,39 @@ +package com.double_o.dambap.like.application; + +import com.double_o.dambap.like.common.Likeable; +import com.double_o.dambap.like.domain.Like; +import com.double_o.dambap.like.infrastructure.LikeRepository; +import com.double_o.dambap.post.domain.Type; +import com.double_o.dambap.user.domain.User; +import java.time.LocalDate; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class LikeService { + + private final LikeRepository likeRepository; + + // 기존 추천한 이력 유무에 따른 추천수 증감 + public void updateLikeStatus(T target, User findUser, Type type) { + + Optional like = likeRepository.findByTargetIdAndLikerId( + target.getId(), findUser.getId()); + + if (like.isEmpty()) { + likeRepository.save(Like.builder() + .likedAt(LocalDate.now()) + .targetId(target.getId()) + .likerId(findUser.getId()) + .type(type) + .build()); + target.increaseLikeCnt(); + } else { + likeRepository.deleteById(like.get().getId()); + target.decreaseLikeCnt(); + } + } + +} diff --git a/src/main/java/com/double_o/dambap/like/common/Likeable.java b/src/main/java/com/double_o/dambap/like/common/Likeable.java new file mode 100644 index 0000000..9e4b126 --- /dev/null +++ b/src/main/java/com/double_o/dambap/like/common/Likeable.java @@ -0,0 +1,10 @@ +package com.double_o.dambap.like.common; + +public interface Likeable { + + Long getId(); + + void increaseLikeCnt(); + + void decreaseLikeCnt(); +} diff --git a/src/main/java/com/double_o/dambap/like/infrastructure/LikeRepository.java b/src/main/java/com/double_o/dambap/like/infrastructure/LikeRepository.java index ef8d8fd..f3e272c 100644 --- a/src/main/java/com/double_o/dambap/like/infrastructure/LikeRepository.java +++ b/src/main/java/com/double_o/dambap/like/infrastructure/LikeRepository.java @@ -10,5 +10,5 @@ @Transactional(readOnly = true) public interface LikeRepository extends JpaRepository { - Optional findByPostIdAndLikerId(Long postId, Long likerId); + Optional findByTargetIdAndLikerId(Long targetId, Long likerId); } diff --git a/src/main/java/com/double_o/dambap/post/application/PostService.java b/src/main/java/com/double_o/dambap/post/application/PostService.java index 0bf7377..f790209 100644 --- a/src/main/java/com/double_o/dambap/post/application/PostService.java +++ b/src/main/java/com/double_o/dambap/post/application/PostService.java @@ -3,7 +3,7 @@ import com.double_o.dambap.auth.model.AuthUser; import com.double_o.dambap.exception.dto.ErrorType; import com.double_o.dambap.exception.post.PostInvalidException; -import com.double_o.dambap.like.domain.Like; +import com.double_o.dambap.like.application.LikeService; import com.double_o.dambap.media.Media; import com.double_o.dambap.post.domain.Post; import com.double_o.dambap.post.domain.TaggedUser; @@ -15,7 +15,6 @@ import com.double_o.dambap.post.infrastructure.PostRepository; import com.double_o.dambap.post.infrastructure.TaggedUserRepository; import com.double_o.dambap.like.dto.response.LikeResponse; -import com.double_o.dambap.like.infrastructure.LikeRepository; import com.double_o.dambap.media.MediaRepository; import com.double_o.dambap.auth.service.AuthValidationUtils; import com.double_o.dambap.post.utils.TaggedUserConstants; @@ -24,9 +23,7 @@ import com.double_o.dambap.common.dto.SuccessResponse; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; -import java.time.LocalDate; import java.util.List; -import java.util.Optional; import java.util.stream.IntStream; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -40,9 +37,9 @@ public class PostService { private final UserValidationService userValidationService; private final PostRepository postRepository; - private final LikeRepository LikeRepository; private final TaggedUserRepository taggedUserRepository; private final MediaRepository mediaRepository; + private final LikeService likeService; /** * 게시글 등록 @@ -134,10 +131,7 @@ public LikeResponse updatePostLike(AuthUser user, Long postId) { Post findPost = getPostOrThrowIfNotExist(postId); - Optional like = LikeRepository.findByPostIdAndLikerId( - findPost.getId(), findUser.getId()); - - updateLikeStatus(like, findPost, findUser); + likeService.updateLikeStatus(findPost, findUser, Type.POST); return LikeResponse.toResponse(findPost.getId(), findPost.getLikeCnt()); } @@ -271,23 +265,6 @@ private List getTaggedUserIds(Post post) { .toList(); } - // 기존 추천한 이력 유무에 따른 추천수 증감 - private void updateLikeStatus(Optional like, Post findPost, User findUser) { - - if (like.isEmpty()) { - LikeRepository.save(Like.builder() - .likedAt(LocalDate.now()) - .targetId(findPost.getId()) - .likerId(findUser.getId()) - .type(Type.POST) - .build()); - findPost.increaseRecommendationCnt(); - } else { - LikeRepository.deleteById(like.get().getId()); - findPost.decreaseRecommendationCnt(); - } - } - // 게시글 정보 응답 dto 로 변환 private PostInfoResponse convertToPostInfoResponse(Post post) { diff --git a/src/main/java/com/double_o/dambap/post/domain/Post.java b/src/main/java/com/double_o/dambap/post/domain/Post.java index d7d5d0b..a8a2f09 100644 --- a/src/main/java/com/double_o/dambap/post/domain/Post.java +++ b/src/main/java/com/double_o/dambap/post/domain/Post.java @@ -3,6 +3,7 @@ import com.double_o.dambap.common.entity.BaseEntity; import com.double_o.dambap.exception.dto.ErrorType; import com.double_o.dambap.exception.post.PostInvalidException; +import com.double_o.dambap.like.common.Likeable; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -21,7 +22,7 @@ @AllArgsConstructor @Getter @Builder -public class Post extends BaseEntity { +public class Post extends BaseEntity implements Likeable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -58,11 +59,13 @@ public void updatePost( this.isPublic = isPublic; } - public void increaseRecommendationCnt() { + @Override + public void increaseLikeCnt() { this.likeCnt++; } - public void decreaseRecommendationCnt() { + @Override + public void decreaseLikeCnt() { if (this.likeCnt > 0) { this.likeCnt--; } else { From b0e88ca8c80afae9c7104658c0e7bb77e0386b6f Mon Sep 17 00:00:00 2001 From: OhHaneol Date: Thu, 4 Sep 2025 23:35:37 +0900 Subject: [PATCH 08/10] =?UTF-8?q?feat:=20=EC=A2=8B=EC=95=84=EC=9A=94=20?= =?UTF-8?q?=EC=88=98=20=EC=A1=B0=ED=9A=8C=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../double_o/dambap/post/application/PostService.java | 10 ++++++++++ .../dambap/post/presentation/PostController.java | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/src/main/java/com/double_o/dambap/post/application/PostService.java b/src/main/java/com/double_o/dambap/post/application/PostService.java index f790209..c388c2b 100644 --- a/src/main/java/com/double_o/dambap/post/application/PostService.java +++ b/src/main/java/com/double_o/dambap/post/application/PostService.java @@ -136,6 +136,16 @@ public LikeResponse updatePostLike(AuthUser user, Long postId) { return LikeResponse.toResponse(findPost.getId(), findPost.getLikeCnt()); } + /** + * 게시글 추천 수 조회 + */ + public LikeResponse getLikeCnt(Long postId) { + + Post findPost = getPostOrThrowIfNotExist(postId); + + return LikeResponse.toResponse(findPost.getId(), findPost.getLikeCnt()); + } + /** * 게시글 공개 여부 전환 */ diff --git a/src/main/java/com/double_o/dambap/post/presentation/PostController.java b/src/main/java/com/double_o/dambap/post/presentation/PostController.java index 2741347..fd63422 100644 --- a/src/main/java/com/double_o/dambap/post/presentation/PostController.java +++ b/src/main/java/com/double_o/dambap/post/presentation/PostController.java @@ -81,6 +81,15 @@ public ResponseEntity recommendSharePost( return ResponseDto.ok(response); } + @Operation(summary = "게시글 추천 수 조회") + @GetMapping(path = "/{postId}/recommendation") + public ResponseEntity getRecommendCnt( + @Parameter(description = "게시글 고유 번호") + @PathVariable("postId") Long postId) { + var response = postService.getLikeCnt(postId); + return ResponseDto.ok(response); + } + @Operation(summary = "게시글 공개여부 전환") @PatchMapping(path = "/{postId}") public ResponseEntity changePublicity( From eee3b7307dac6e5811a9ef8e8ca81eb0281d14ac Mon Sep 17 00:00:00 2001 From: OhHaneol Date: Fri, 5 Sep 2025 00:26:17 +0900 Subject: [PATCH 09/10] =?UTF-8?q?fix:=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20like=20->=20?= =?UTF-8?q?recommendation=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dambap/like/application/LikeService.java | 39 ------------------- .../double_o/dambap/like/common/Likeable.java | 10 ----- .../like/dto/response/LikeResponse.java | 18 --------- .../like/infrastructure/LikeRepository.java | 14 ------- .../dambap/post/application/PostService.java | 20 +++++----- .../com/double_o/dambap/post/domain/Post.java | 18 ++++----- .../post/dto/response/PostResponse.java | 6 +-- .../post/presentation/PostController.java | 4 +- .../application/RecommendService.java | 39 +++++++++++++++++++ .../recommendation/common/Recommendable.java | 10 +++++ .../domain/Recommendation.java} | 20 +++++----- .../dto/response/RecommendResponse.java | 18 +++++++++ .../infrastructure/RecommendRepository.java | 14 +++++++ 13 files changed, 115 insertions(+), 115 deletions(-) delete mode 100644 src/main/java/com/double_o/dambap/like/application/LikeService.java delete mode 100644 src/main/java/com/double_o/dambap/like/common/Likeable.java delete mode 100644 src/main/java/com/double_o/dambap/like/dto/response/LikeResponse.java delete mode 100644 src/main/java/com/double_o/dambap/like/infrastructure/LikeRepository.java create mode 100644 src/main/java/com/double_o/dambap/recommendation/application/RecommendService.java create mode 100644 src/main/java/com/double_o/dambap/recommendation/common/Recommendable.java rename src/main/java/com/double_o/dambap/{like/domain/Like.java => recommendation/domain/Recommendation.java} (60%) create mode 100644 src/main/java/com/double_o/dambap/recommendation/dto/response/RecommendResponse.java create mode 100644 src/main/java/com/double_o/dambap/recommendation/infrastructure/RecommendRepository.java diff --git a/src/main/java/com/double_o/dambap/like/application/LikeService.java b/src/main/java/com/double_o/dambap/like/application/LikeService.java deleted file mode 100644 index c914bf1..0000000 --- a/src/main/java/com/double_o/dambap/like/application/LikeService.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.double_o.dambap.like.application; - -import com.double_o.dambap.like.common.Likeable; -import com.double_o.dambap.like.domain.Like; -import com.double_o.dambap.like.infrastructure.LikeRepository; -import com.double_o.dambap.post.domain.Type; -import com.double_o.dambap.user.domain.User; -import java.time.LocalDate; -import java.util.Optional; -import lombok.RequiredArgsConstructor; -import org.springframework.stereotype.Service; - -@Service -@RequiredArgsConstructor -public class LikeService { - - private final LikeRepository likeRepository; - - // 기존 추천한 이력 유무에 따른 추천수 증감 - public void updateLikeStatus(T target, User findUser, Type type) { - - Optional like = likeRepository.findByTargetIdAndLikerId( - target.getId(), findUser.getId()); - - if (like.isEmpty()) { - likeRepository.save(Like.builder() - .likedAt(LocalDate.now()) - .targetId(target.getId()) - .likerId(findUser.getId()) - .type(type) - .build()); - target.increaseLikeCnt(); - } else { - likeRepository.deleteById(like.get().getId()); - target.decreaseLikeCnt(); - } - } - -} diff --git a/src/main/java/com/double_o/dambap/like/common/Likeable.java b/src/main/java/com/double_o/dambap/like/common/Likeable.java deleted file mode 100644 index 9e4b126..0000000 --- a/src/main/java/com/double_o/dambap/like/common/Likeable.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.double_o.dambap.like.common; - -public interface Likeable { - - Long getId(); - - void increaseLikeCnt(); - - void decreaseLikeCnt(); -} diff --git a/src/main/java/com/double_o/dambap/like/dto/response/LikeResponse.java b/src/main/java/com/double_o/dambap/like/dto/response/LikeResponse.java deleted file mode 100644 index 3db07b8..0000000 --- a/src/main/java/com/double_o/dambap/like/dto/response/LikeResponse.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.double_o.dambap.like.dto.response; - -import lombok.AllArgsConstructor; -import lombok.Data; - -@Data -@AllArgsConstructor -public class LikeResponse { - - private Long postId; - private int likeCnt; - - public static LikeResponse toResponse( - Long postId, int likeCnt - ) { - return new LikeResponse(postId, likeCnt); - } -} diff --git a/src/main/java/com/double_o/dambap/like/infrastructure/LikeRepository.java b/src/main/java/com/double_o/dambap/like/infrastructure/LikeRepository.java deleted file mode 100644 index f3e272c..0000000 --- a/src/main/java/com/double_o/dambap/like/infrastructure/LikeRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.double_o.dambap.like.infrastructure; - -import com.double_o.dambap.like.domain.Like; -import java.util.Optional; -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; -import org.springframework.transaction.annotation.Transactional; - -@Repository -@Transactional(readOnly = true) -public interface LikeRepository extends JpaRepository { - - Optional findByTargetIdAndLikerId(Long targetId, Long likerId); -} diff --git a/src/main/java/com/double_o/dambap/post/application/PostService.java b/src/main/java/com/double_o/dambap/post/application/PostService.java index c388c2b..c375e57 100644 --- a/src/main/java/com/double_o/dambap/post/application/PostService.java +++ b/src/main/java/com/double_o/dambap/post/application/PostService.java @@ -3,7 +3,7 @@ import com.double_o.dambap.auth.model.AuthUser; import com.double_o.dambap.exception.dto.ErrorType; import com.double_o.dambap.exception.post.PostInvalidException; -import com.double_o.dambap.like.application.LikeService; +import com.double_o.dambap.recommendation.application.RecommendService; import com.double_o.dambap.media.Media; import com.double_o.dambap.post.domain.Post; import com.double_o.dambap.post.domain.TaggedUser; @@ -14,7 +14,7 @@ import com.double_o.dambap.post.dto.response.PostResponse; import com.double_o.dambap.post.infrastructure.PostRepository; import com.double_o.dambap.post.infrastructure.TaggedUserRepository; -import com.double_o.dambap.like.dto.response.LikeResponse; +import com.double_o.dambap.recommendation.dto.response.RecommendResponse; import com.double_o.dambap.media.MediaRepository; import com.double_o.dambap.auth.service.AuthValidationUtils; import com.double_o.dambap.post.utils.TaggedUserConstants; @@ -39,7 +39,7 @@ public class PostService { private final PostRepository postRepository; private final TaggedUserRepository taggedUserRepository; private final MediaRepository mediaRepository; - private final LikeService likeService; + private final RecommendService recommendService; /** * 게시글 등록 @@ -55,7 +55,7 @@ public PostResponse createPost(AuthUser user, PostRequest request) { .expireDays(request.getExpireDays()) .content(request.getContent()) .isPublic(request.isPublic()) - .likeCnt(0) + .recommendationCnt(0) .writerId(findUser.getId()) .build(); @@ -125,25 +125,25 @@ public SuccessResponse deletePost(AuthUser user, Long postId) { * 게시글 좋아요 */ @Transactional - public LikeResponse updatePostLike(AuthUser user, Long postId) { + public RecommendResponse updatePostRecommendStatus(AuthUser user, Long postId) { User findUser = userValidationService.getUserOrThrowIfNotExist(user.getId()); Post findPost = getPostOrThrowIfNotExist(postId); - likeService.updateLikeStatus(findPost, findUser, Type.POST); + recommendService.updateRecommendStatus(findPost, findUser, Type.POST); - return LikeResponse.toResponse(findPost.getId(), findPost.getLikeCnt()); + return RecommendResponse.toResponse(findPost.getId(), findPost.getRecommendationCnt()); } /** * 게시글 추천 수 조회 */ - public LikeResponse getLikeCnt(Long postId) { + public RecommendResponse getRecommendationCnt(Long postId) { Post findPost = getPostOrThrowIfNotExist(postId); - return LikeResponse.toResponse(findPost.getId(), findPost.getLikeCnt()); + return RecommendResponse.toResponse(findPost.getId(), findPost.getRecommendationCnt()); } /** @@ -208,7 +208,7 @@ private PostResponse getPostResponse(Post post, List mediaUrls, mediaUrls, taggedUserIds, post.isPublic(), - post.getLikeCnt(), + post.getRecommendationCnt(), post.getWriterId() ); } diff --git a/src/main/java/com/double_o/dambap/post/domain/Post.java b/src/main/java/com/double_o/dambap/post/domain/Post.java index a8a2f09..4caf57d 100644 --- a/src/main/java/com/double_o/dambap/post/domain/Post.java +++ b/src/main/java/com/double_o/dambap/post/domain/Post.java @@ -3,7 +3,7 @@ import com.double_o.dambap.common.entity.BaseEntity; import com.double_o.dambap.exception.dto.ErrorType; import com.double_o.dambap.exception.post.PostInvalidException; -import com.double_o.dambap.like.common.Likeable; +import com.double_o.dambap.recommendation.common.Recommendable; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; @@ -22,7 +22,7 @@ @AllArgsConstructor @Getter @Builder -public class Post extends BaseEntity implements Likeable { +public class Post extends BaseEntity implements Recommendable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -39,8 +39,8 @@ public class Post extends BaseEntity implements Likeable { private boolean isPublic; // cnt 정보 - @Column(name = "like_cnt") - private int likeCnt; + @Column(name = "recommendation_cnt", nullable = false) + private int recommendationCnt = 0; // 참조 정보 @Column(name = "writer_id") @@ -60,14 +60,14 @@ public void updatePost( } @Override - public void increaseLikeCnt() { - this.likeCnt++; + public void increaseRecommendationCnt() { + this.recommendationCnt++; } @Override - public void decreaseLikeCnt() { - if (this.likeCnt > 0) { - this.likeCnt--; + public void decreaseRecommendationCnt() { + if (this.recommendationCnt > 0) { + this.recommendationCnt--; } else { throw new PostInvalidException(ErrorType.CNT_NEGATIVE_ERROR); } diff --git a/src/main/java/com/double_o/dambap/post/dto/response/PostResponse.java b/src/main/java/com/double_o/dambap/post/dto/response/PostResponse.java index 9c9965f..bedd661 100644 --- a/src/main/java/com/double_o/dambap/post/dto/response/PostResponse.java +++ b/src/main/java/com/double_o/dambap/post/dto/response/PostResponse.java @@ -24,7 +24,7 @@ public class PostResponse { private List mediaUrls; private List taggedUserIds; private boolean isPublic; - private int likeCnt; + private int recommendationCnt; private Long writerId; public static PostResponse toResponse( @@ -38,10 +38,10 @@ public static PostResponse toResponse( List mediaUrls, List taggedUserIds, boolean isPublic, - int likeCnt, + int recommendationCnt, Long writerId ) { return new PostResponse(id, createdAt, modifiedAt, category, manufactureDate, expireDays, - content, mediaUrls, taggedUserIds, isPublic, likeCnt, writerId); + content, mediaUrls, taggedUserIds, isPublic, recommendationCnt, writerId); } } diff --git a/src/main/java/com/double_o/dambap/post/presentation/PostController.java b/src/main/java/com/double_o/dambap/post/presentation/PostController.java index fd63422..00e5cd7 100644 --- a/src/main/java/com/double_o/dambap/post/presentation/PostController.java +++ b/src/main/java/com/double_o/dambap/post/presentation/PostController.java @@ -77,7 +77,7 @@ public ResponseEntity recommendSharePost( @Parameter(description = "게시글 고유 번호") @PathVariable("postId") Long postId ) { - var response = postService.updatePostLike(user, postId); + var response = postService.updatePostRecommendStatus(user, postId); return ResponseDto.ok(response); } @@ -86,7 +86,7 @@ public ResponseEntity recommendSharePost( public ResponseEntity getRecommendCnt( @Parameter(description = "게시글 고유 번호") @PathVariable("postId") Long postId) { - var response = postService.getLikeCnt(postId); + var response = postService.getRecommendationCnt(postId); return ResponseDto.ok(response); } diff --git a/src/main/java/com/double_o/dambap/recommendation/application/RecommendService.java b/src/main/java/com/double_o/dambap/recommendation/application/RecommendService.java new file mode 100644 index 0000000..89e4546 --- /dev/null +++ b/src/main/java/com/double_o/dambap/recommendation/application/RecommendService.java @@ -0,0 +1,39 @@ +package com.double_o.dambap.recommendation.application; + +import com.double_o.dambap.recommendation.common.Recommendable; +import com.double_o.dambap.recommendation.domain.Recommendation; +import com.double_o.dambap.recommendation.infrastructure.RecommendRepository; +import com.double_o.dambap.post.domain.Type; +import com.double_o.dambap.user.domain.User; +import java.time.LocalDate; +import java.util.Optional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class RecommendService { + + private final RecommendRepository recommendRepository; + + // 기존 추천한 이력 유무에 따른 추천수 증감 + public void updateRecommendStatus(T target, User findUser, Type type) { + + Optional recommendation = recommendRepository.findByTargetIdAndRecommenderId( + target.getId(), findUser.getId()); + + if (recommendation.isPresent()) { + recommendRepository.deleteById(recommendation.get().getId()); + target.decreaseRecommendationCnt(); + } else { + recommendRepository.save(Recommendation.builder() + .recommendedAt(LocalDate.now()) + .targetId(target.getId()) + .recommenderId(findUser.getId()) + .type(type) + .build()); + target.increaseRecommendationCnt(); + } + } + +} diff --git a/src/main/java/com/double_o/dambap/recommendation/common/Recommendable.java b/src/main/java/com/double_o/dambap/recommendation/common/Recommendable.java new file mode 100644 index 0000000..e381d8c --- /dev/null +++ b/src/main/java/com/double_o/dambap/recommendation/common/Recommendable.java @@ -0,0 +1,10 @@ +package com.double_o.dambap.recommendation.common; + +public interface Recommendable { + + Long getId(); + + void increaseRecommendationCnt(); + + void decreaseRecommendationCnt(); +} diff --git a/src/main/java/com/double_o/dambap/like/domain/Like.java b/src/main/java/com/double_o/dambap/recommendation/domain/Recommendation.java similarity index 60% rename from src/main/java/com/double_o/dambap/like/domain/Like.java rename to src/main/java/com/double_o/dambap/recommendation/domain/Recommendation.java index 9db7c33..8053934 100644 --- a/src/main/java/com/double_o/dambap/like/domain/Like.java +++ b/src/main/java/com/double_o/dambap/recommendation/domain/Recommendation.java @@ -1,4 +1,4 @@ -package com.double_o.dambap.like.domain; +package com.double_o.dambap.recommendation.domain; import com.double_o.dambap.post.domain.Type; import jakarta.persistence.Column; @@ -19,31 +19,31 @@ @Entity // 조회 성능을 위한 JPA 이용 인덱스 추가 @Table( - name = "like", + name = "recommendation", indexes = { - @Index(name = "idx_like_targetid", columnList = "target_id"), - @Index(name = "idx_like_likerid", columnList = "liker_id"), - @Index(name = "uq_like_targetid_likerid", columnList = "target_id, liker_id", unique = true) + @Index(name = "idx_recommendation_targetid", columnList = "target_id"), + @Index(name = "idx_recommendation_recommenderid", columnList = "recommender_id"), + @Index(name = "uq_recommendation_targetid_recommenderid", columnList = "target_id, recommender_id", unique = true) } ) @NoArgsConstructor @AllArgsConstructor @Getter @Builder -public class Like { +public class Recommendation { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; - @Column(name = "liked_at") - private LocalDate likedAt; + @Column(name = "recommended_at") + private LocalDate recommendedAt; @Column(name = "target_id") private Long targetId; - @Column(name = "liker_id") - private Long likerId; + @Column(name = "recommender_id") + private Long recommenderId; @Enumerated(EnumType.STRING) private Type type; diff --git a/src/main/java/com/double_o/dambap/recommendation/dto/response/RecommendResponse.java b/src/main/java/com/double_o/dambap/recommendation/dto/response/RecommendResponse.java new file mode 100644 index 0000000..e05d442 --- /dev/null +++ b/src/main/java/com/double_o/dambap/recommendation/dto/response/RecommendResponse.java @@ -0,0 +1,18 @@ +package com.double_o.dambap.recommendation.dto.response; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class RecommendResponse { + + private Long targetId; + private int recommendationCnt; + + public static RecommendResponse toResponse( + Long targetId, int recommendationCnt + ) { + return new RecommendResponse(targetId, recommendationCnt); + } +} diff --git a/src/main/java/com/double_o/dambap/recommendation/infrastructure/RecommendRepository.java b/src/main/java/com/double_o/dambap/recommendation/infrastructure/RecommendRepository.java new file mode 100644 index 0000000..a5cde15 --- /dev/null +++ b/src/main/java/com/double_o/dambap/recommendation/infrastructure/RecommendRepository.java @@ -0,0 +1,14 @@ +package com.double_o.dambap.recommendation.infrastructure; + +import com.double_o.dambap.recommendation.domain.Recommendation; +import java.util.Optional; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +@Repository +@Transactional(readOnly = true) +public interface RecommendRepository extends JpaRepository { + + Optional findByTargetIdAndRecommenderId(Long targetId, Long recommenderId); +} From 494161b8c764d6d5a8ee2f0e546660f83ab2698a Mon Sep 17 00:00:00 2001 From: OhHaneol Date: Fri, 5 Sep 2025 01:11:45 +0900 Subject: [PATCH 10/10] =?UTF-8?q?fix:=20=EC=B6=94=EC=B2=9C=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EC=9C=A0=EB=8B=88=ED=81=AC=20=EC=A0=9C=EC=95=BD?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=EC=97=90=20type=20=EC=B6=94=EA=B0=80(POST,?= =?UTF-8?q?=20REVIEW=20=EA=B5=AC=EB=B6=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dambap/recommendation/application/RecommendService.java | 4 ++-- .../double_o/dambap/recommendation/domain/Recommendation.java | 2 +- .../recommendation/infrastructure/RecommendRepository.java | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/double_o/dambap/recommendation/application/RecommendService.java b/src/main/java/com/double_o/dambap/recommendation/application/RecommendService.java index 89e4546..47cf73e 100644 --- a/src/main/java/com/double_o/dambap/recommendation/application/RecommendService.java +++ b/src/main/java/com/double_o/dambap/recommendation/application/RecommendService.java @@ -19,8 +19,8 @@ public class RecommendService { // 기존 추천한 이력 유무에 따른 추천수 증감 public void updateRecommendStatus(T target, User findUser, Type type) { - Optional recommendation = recommendRepository.findByTargetIdAndRecommenderId( - target.getId(), findUser.getId()); + Optional recommendation = recommendRepository.findByTargetIdAndRecommenderIdAndType( + target.getId(), findUser.getId(), type); if (recommendation.isPresent()) { recommendRepository.deleteById(recommendation.get().getId()); diff --git a/src/main/java/com/double_o/dambap/recommendation/domain/Recommendation.java b/src/main/java/com/double_o/dambap/recommendation/domain/Recommendation.java index 8053934..99f9967 100644 --- a/src/main/java/com/double_o/dambap/recommendation/domain/Recommendation.java +++ b/src/main/java/com/double_o/dambap/recommendation/domain/Recommendation.java @@ -23,7 +23,7 @@ indexes = { @Index(name = "idx_recommendation_targetid", columnList = "target_id"), @Index(name = "idx_recommendation_recommenderid", columnList = "recommender_id"), - @Index(name = "uq_recommendation_targetid_recommenderid", columnList = "target_id, recommender_id", unique = true) + @Index(name = "uq_recommendation_targetid_recommenderid_type", columnList = "target_id, recommender_id, type", unique = true) } ) @NoArgsConstructor diff --git a/src/main/java/com/double_o/dambap/recommendation/infrastructure/RecommendRepository.java b/src/main/java/com/double_o/dambap/recommendation/infrastructure/RecommendRepository.java index a5cde15..e25c706 100644 --- a/src/main/java/com/double_o/dambap/recommendation/infrastructure/RecommendRepository.java +++ b/src/main/java/com/double_o/dambap/recommendation/infrastructure/RecommendRepository.java @@ -1,5 +1,6 @@ package com.double_o.dambap.recommendation.infrastructure; +import com.double_o.dambap.post.domain.Type; import com.double_o.dambap.recommendation.domain.Recommendation; import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; @@ -10,5 +11,5 @@ @Transactional(readOnly = true) public interface RecommendRepository extends JpaRepository { - Optional findByTargetIdAndRecommenderId(Long targetId, Long recommenderId); + Optional findByTargetIdAndRecommenderIdAndType(Long targetId, Long recommenderId, Type type); }