From b63bb29eb475e792dd2f518b7a661078e4e763b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EB=A1=9D?= Date: Fri, 26 Dec 2025 10:58:13 +0900 Subject: [PATCH 1/5] =?UTF-8?q?refactor=20:=20=EC=BD=98=ED=85=90=EC=B8=A0?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1=EC=9D=BC=EC=9D=84=20LocalDateTime?= =?UTF-8?q?=ED=98=95=ED=83=9C=EB=A1=9C=20=EB=B0=9B=EC=95=84=EC=98=A4?= =?UTF-8?q?=EA=B8=B0=20#58?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plzdrawing/domain/content/dto/response/ContentsDto.java | 4 ++-- .../plzdrawing/domain/content/facade/ContentFacade.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/example/plzdrawing/domain/content/dto/response/ContentsDto.java b/src/main/java/org/example/plzdrawing/domain/content/dto/response/ContentsDto.java index 7ae0147..fb4d7d8 100644 --- a/src/main/java/org/example/plzdrawing/domain/content/dto/response/ContentsDto.java +++ b/src/main/java/org/example/plzdrawing/domain/content/dto/response/ContentsDto.java @@ -1,7 +1,7 @@ package org.example.plzdrawing.domain.content.dto.response; import io.swagger.v3.oas.annotations.media.Schema; -import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import org.example.plzdrawing.domain.content.enums.TimeTaken; @@ -9,7 +9,7 @@ public record ContentsDto( @Schema(description = "콘텐츠 id", example = "1") Long contentId, @Schema(description = "콘텐츠 생성일자", example = "2025-12-22") - LocalDate createAt, + LocalDateTime createAt, @Schema(description = "콘텐츠 url", example = "[https://s3~, https://s3~]") List contentUrl, @Schema(description = "콘텐츠 해시태그", example = "[사과, 바나나]") diff --git a/src/main/java/org/example/plzdrawing/domain/content/facade/ContentFacade.java b/src/main/java/org/example/plzdrawing/domain/content/facade/ContentFacade.java index 6897a26..6e9a0e0 100644 --- a/src/main/java/org/example/plzdrawing/domain/content/facade/ContentFacade.java +++ b/src/main/java/org/example/plzdrawing/domain/content/facade/ContentFacade.java @@ -86,7 +86,7 @@ public PageResponse getMemberContents(Long memberId, int page, int Long contentId = content.getId(); return new ContentsDto( contentId, - content.getCreatedAt().toLocalDate(), + content.getCreatedAt(), imageMap.getOrDefault(contentId, List.of()), tagMap.getOrDefault(contentId, List.of()), content.getExplanation(), @@ -140,7 +140,7 @@ public PageResponse getLatestContents(int page, int size ContentsDto contentsDto = new ContentsDto( contentId, - content.getCreatedAt().toLocalDate(), + content.getCreatedAt(), imageMap.getOrDefault(contentId, List.of()), tagMap.getOrDefault(contentId, List.of()), content.getExplanation(), From d0d193e0f80d5091c9658d05844c3e30e2990018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EB=A1=9D?= Date: Mon, 29 Dec 2025 10:49:42 +0900 Subject: [PATCH 2/5] =?UTF-8?q?refactor=20:=20=EC=BB=A8=ED=8A=B8=EB=A1=A4?= =?UTF-8?q?=EB=9F=AC=20=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EB=B0=8F=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20#58?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/content/controller/ContentController.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/example/plzdrawing/domain/content/controller/ContentController.java b/src/main/java/org/example/plzdrawing/domain/content/controller/ContentController.java index fdd3a0b..64ae9a3 100644 --- a/src/main/java/org/example/plzdrawing/domain/content/controller/ContentController.java +++ b/src/main/java/org/example/plzdrawing/domain/content/controller/ContentController.java @@ -10,7 +10,7 @@ import org.example.plzdrawing.common.page.PageResponse; import org.example.plzdrawing.domain.content.dto.request.UpdateContentRequest; import org.example.plzdrawing.domain.content.dto.request.UploadContentRequest; -import org.example.plzdrawing.domain.content.dto.response.LatestContentsResponse; +import org.example.plzdrawing.domain.content.dto.response.GetContentsResponse; import org.example.plzdrawing.domain.content.dto.response.UploadContentResponse; import org.example.plzdrawing.domain.content.facade.ContentFacade; import org.springframework.http.MediaType; @@ -66,12 +66,14 @@ public ResponseEntity> getContentsThumbnail( } @GetMapping - @Operation(summary = "최신순 콘텐츠 조회", description = "최신순으로 콘텐츠를 조회한다.") - public ResponseEntity> getLatestContents( + @Operation(summary = "옵션별 콘텐츠 조회", description = "옵션별로 콘텐츠를 조회한다. (0이면 최신순 1이면 좋아요 누른 게시글)") + public ResponseEntity> getLatestContents( + @AuthenticationPrincipal CustomUser customUser, @RequestParam(name = "page", defaultValue = "1") int page, - @RequestParam(name = "size", defaultValue = "10") int size + @RequestParam(name = "size", defaultValue = "10") int size, + @RequestParam(name = "option", defaultValue = "0") int option ) { int safePage = (page < 1) ? 0 : page - 1; - return ResponseEntity.ok(contentFacade.getLatestContents(safePage, size)); + return ResponseEntity.ok(contentFacade.getLatestContents(safePage, size, customUser, option)); } } From b44de4f72cbee05d95e117ed351801235dca2711 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EB=A1=9D?= Date: Mon, 29 Dec 2025 10:50:01 +0900 Subject: [PATCH 3/5] =?UTF-8?q?refactor=20:=20DTO=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD=20#58?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{LatestContentsResponse.java => GetContentsResponse.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/org/example/plzdrawing/domain/content/dto/response/{LatestContentsResponse.java => GetContentsResponse.java} (90%) diff --git a/src/main/java/org/example/plzdrawing/domain/content/dto/response/LatestContentsResponse.java b/src/main/java/org/example/plzdrawing/domain/content/dto/response/GetContentsResponse.java similarity index 90% rename from src/main/java/org/example/plzdrawing/domain/content/dto/response/LatestContentsResponse.java rename to src/main/java/org/example/plzdrawing/domain/content/dto/response/GetContentsResponse.java index 9713056..84ba73c 100644 --- a/src/main/java/org/example/plzdrawing/domain/content/dto/response/LatestContentsResponse.java +++ b/src/main/java/org/example/plzdrawing/domain/content/dto/response/GetContentsResponse.java @@ -3,7 +3,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import org.example.plzdrawing.api.member.dto.response.UploaderDto; -public record LatestContentsResponse( +public record GetContentsResponse( @Schema(description = "업로더 정보") UploaderDto uploaderDto, @Schema(description = "콘텐츠 정보") From d0c1c70043420c1282d2c1a0053b76fa412f191f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EB=A1=9D?= Date: Mon, 29 Dec 2025 10:50:34 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat=20:=20=EC=A2=8B=EC=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=BD=98=ED=85=90=EC=B8=A0=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?jpql=EC=9E=91=EC=84=B1=20#58?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/content/repository/ContentRepository.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/org/example/plzdrawing/domain/content/repository/ContentRepository.java b/src/main/java/org/example/plzdrawing/domain/content/repository/ContentRepository.java index a08474c..0d24dc5 100644 --- a/src/main/java/org/example/plzdrawing/domain/content/repository/ContentRepository.java +++ b/src/main/java/org/example/plzdrawing/domain/content/repository/ContentRepository.java @@ -29,4 +29,12 @@ select c.member.id as memberId, count(c) as cnt group by c.member.id """) List countByMemberIds(@Param("memberIds") List memberIds); + + @Query(""" + select distinct c + from LikeEntity l join l.content c + where l.member = :member + order by c.createdAt desc + """) + Page findByMemberLikeAndCreatedAtDesc(@Param("member")Member member, Pageable pageable); } From 3d1c05320c74bb7c6463765d24eb0e8d45acf318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=98=81=EB=A1=9D?= Date: Mon, 29 Dec 2025 10:51:11 +0900 Subject: [PATCH 5/5] =?UTF-8?q?feat=20:=20=EC=A2=8B=EC=95=84=EC=9A=94=20?= =?UTF-8?q?=ED=95=9C=20=EC=BD=98=ED=85=90=EC=B8=A0=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EC=84=9C=EB=B9=84=EC=8A=A4=20=EB=A1=9C=EC=A7=81=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20#58?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/content/facade/ContentFacade.java | 21 +++++++++++++------ .../content/service/ContentService.java | 5 +++++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/example/plzdrawing/domain/content/facade/ContentFacade.java b/src/main/java/org/example/plzdrawing/domain/content/facade/ContentFacade.java index 6e9a0e0..4e924cd 100644 --- a/src/main/java/org/example/plzdrawing/domain/content/facade/ContentFacade.java +++ b/src/main/java/org/example/plzdrawing/domain/content/facade/ContentFacade.java @@ -1,6 +1,7 @@ package org.example.plzdrawing.domain.content.facade; import static org.example.plzdrawing.common.error.CommonErrorCode.CONTENT_NOT_FOUND; +import static org.example.plzdrawing.common.error.CommonErrorCode.INVALID_FIELD; import java.util.List; import java.util.Map; @@ -14,7 +15,7 @@ import org.example.plzdrawing.domain.content.Content; import org.example.plzdrawing.domain.content.dto.request.UpdateContentRequest; import org.example.plzdrawing.domain.content.dto.request.UploadContentRequest; -import org.example.plzdrawing.domain.content.dto.response.LatestContentsResponse; +import org.example.plzdrawing.domain.content.dto.response.GetContentsResponse; import org.example.plzdrawing.domain.content.dto.response.UploadContentResponse; import org.example.plzdrawing.domain.content.service.ContentImageService; import org.example.plzdrawing.domain.content.service.ContentService; @@ -103,10 +104,18 @@ public PageResponse getMemberContents(Long memberId, int page, int return PageResponse.from(dtoPage); } - public PageResponse getLatestContents(int page, int size) { + public PageResponse getLatestContents(int page, int size, CustomUser customUser, int option) { PageRequest pageRequest = PageRequest.of(page, size); - - Page contentPage = contentService.findLatest(pageRequest); + Page contentPage; + if(option == 0) { + contentPage = contentService.findLatest(pageRequest); + } + else if(option == 1) { + contentPage = contentService.findByMyLikeLatest(customUser.getMember(), pageRequest); + } + else { + throw new RestApiException(INVALID_FIELD.getErrorCode()); + } if (contentPage.isEmpty()) { return PageResponse.from(Page.empty(pageRequest)); } @@ -123,7 +132,7 @@ public PageResponse getLatestContents(int page, int size Map drawingCountMap = contentService.countDrawingsByMemberIds(memberIds); Map reviewStatsMap = reviewService.findSellingMemberStats(memberIds); - List dtoList = contents.stream() + List dtoList = contents.stream() .map(content -> { Long contentId = content.getId(); Long uploaderId = content.getMember().getId(); @@ -149,7 +158,7 @@ public PageResponse getLatestContents(int page, int size likeMap.getOrDefault(contentId, 0L) ); - return new LatestContentsResponse(uploaderDto, contentsDto); + return new GetContentsResponse(uploaderDto, contentsDto); }) .toList(); diff --git a/src/main/java/org/example/plzdrawing/domain/content/service/ContentService.java b/src/main/java/org/example/plzdrawing/domain/content/service/ContentService.java index b1ce382..24fd6db 100644 --- a/src/main/java/org/example/plzdrawing/domain/content/service/ContentService.java +++ b/src/main/java/org/example/plzdrawing/domain/content/service/ContentService.java @@ -11,6 +11,7 @@ import org.example.plzdrawing.domain.content.repository.ContentRepository; import org.example.plzdrawing.domain.member.Member; import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -65,4 +66,8 @@ public Map countDrawingsByMemberIds(List memberIds) { ContentRepository.DrawingCountProjection::getCnt )); } + + public Page findByMyLikeLatest(Member member, PageRequest pageRequest) { + return contentRepository.findByMemberLikeAndCreatedAtDesc(member, pageRequest); + } }