From 981729bf0f1784774b19f712b750ed42fb9ff047 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sun, 14 Sep 2025 00:59:13 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20=EC=9D=BD=EC=9D=8C=EC=97=AC?= =?UTF-8?q?=EB=B6=80=EB=A5=BC=20=EC=A1=B0=ED=9A=8C=EC=A1=B0=EA=B1=B4?= =?UTF-8?q?=EC=97=90=20=ED=8F=AC=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../article/repository/ArticleRepositoryCustom.java | 10 ++++++---- .../repository/ArticleRepositoryCustomImpl.java | 7 ++++--- .../article/service/ArticleGetService.java | 13 +++++++++---- 3 files changed, 19 insertions(+), 11 deletions(-) diff --git a/infrastructure/src/main/java/com/pinback/infrastructure/article/repository/ArticleRepositoryCustom.java b/infrastructure/src/main/java/com/pinback/infrastructure/article/repository/ArticleRepositoryCustom.java index fafedce..f877dde 100644 --- a/infrastructure/src/main/java/com/pinback/infrastructure/article/repository/ArticleRepositoryCustom.java +++ b/infrastructure/src/main/java/com/pinback/infrastructure/article/repository/ArticleRepositoryCustom.java @@ -13,11 +13,13 @@ public interface ArticleRepositoryCustom { ArticlesWithUnreadCount findAllCustom(UUID userId, Pageable pageable); - ArticlesWithUnreadCount findAllByCategory(UUID userId, long articleId, Pageable pageable); + ArticlesWithUnreadCount findAllByCategory(UUID userId, long articleId, boolean isRead, Pageable pageable); - Page
findTodayRemind(UUID userId, Pageable pageable, LocalDateTime startAt, LocalDateTime endAt, Boolean isRead); - - RemindArticlesWithCount findTodayRemindWithCount(UUID userId, Pageable pageable, LocalDateTime startAt, LocalDateTime endAt, Boolean isRead); + Page
findTodayRemind(UUID userId, Pageable pageable, LocalDateTime startAt, LocalDateTime endAt, + Boolean isRead); + + RemindArticlesWithCount findTodayRemindWithCount(UUID userId, Pageable pageable, LocalDateTime startAt, + LocalDateTime endAt, Boolean isRead); ArticlesWithUnreadCount findAllByIsReadFalse(UUID userId, Pageable pageable); diff --git a/infrastructure/src/main/java/com/pinback/infrastructure/article/repository/ArticleRepositoryCustomImpl.java b/infrastructure/src/main/java/com/pinback/infrastructure/article/repository/ArticleRepositoryCustomImpl.java index e43a465..e03e4ee 100644 --- a/infrastructure/src/main/java/com/pinback/infrastructure/article/repository/ArticleRepositoryCustomImpl.java +++ b/infrastructure/src/main/java/com/pinback/infrastructure/article/repository/ArticleRepositoryCustomImpl.java @@ -25,7 +25,7 @@ @Repository @RequiredArgsConstructor public class ArticleRepositoryCustomImpl implements ArticleRepositoryCustom { - + private final JPAQueryFactory queryFactory; @Override @@ -58,9 +58,10 @@ public ArticlesWithUnreadCount findAllCustom(UUID userId, Pageable pageable) { } @Override - public ArticlesWithUnreadCount findAllByCategory(UUID userId, long categoryId, Pageable pageable) { + public ArticlesWithUnreadCount findAllByCategory(UUID userId, long categoryId, boolean isRead, Pageable pageable) { - BooleanExpression conditions = article.category.id.eq(categoryId); + BooleanExpression conditions = article.category.id.eq(categoryId) + .and(article.isRead.eq(isRead)); List
articles = queryFactory .selectFrom(article) diff --git a/infrastructure/src/main/java/com/pinback/infrastructure/article/service/ArticleGetService.java b/infrastructure/src/main/java/com/pinback/infrastructure/article/service/ArticleGetService.java index 508b445..fae22fb 100644 --- a/infrastructure/src/main/java/com/pinback/infrastructure/article/service/ArticleGetService.java +++ b/infrastructure/src/main/java/com/pinback/infrastructure/article/service/ArticleGetService.java @@ -54,8 +54,10 @@ public ArticlesWithUnreadCountDto findAll(User user, PageRequest pageRequest) { } @Override - public ArticlesWithUnreadCountDto findAllByCategory(User user, Category category, PageRequest pageRequest) { + public ArticlesWithUnreadCountDto findAllByCategory(User user, Category category, boolean isRead, + PageRequest pageRequest) { ArticlesWithUnreadCount infraResult = articleRepository.findAllByCategory(user.getId(), category.getId(), + isRead, pageRequest); return convertToDto(infraResult); } @@ -73,12 +75,15 @@ public Article findByUserAndId(User user, long articleId) { @Override public Page
findTodayRemind(User user, LocalDateTime remindDateTime, Pageable pageable, Boolean isRead) { - return articleRepository.findTodayRemind(user.getId(), pageable, remindDateTime, remindDateTime.plusDays(1), isRead); + return articleRepository.findTodayRemind(user.getId(), pageable, remindDateTime, remindDateTime.plusDays(1), + isRead); } @Override - public RemindArticlesWithCountDto findTodayRemindWithCount(User user, LocalDateTime remindDateTime, Pageable pageable, Boolean isRead) { - RemindArticlesWithCount infraResult = articleRepository.findTodayRemindWithCount(user.getId(), pageable, remindDateTime, remindDateTime.plusDays(1), isRead); + public RemindArticlesWithCountDto findTodayRemindWithCount(User user, LocalDateTime remindDateTime, + Pageable pageable, Boolean isRead) { + RemindArticlesWithCount infraResult = articleRepository.findTodayRemindWithCount(user.getId(), pageable, + remindDateTime, remindDateTime.plusDays(1), isRead); return new RemindArticlesWithCountDto( infraResult.readCount(), infraResult.unreadCount(), From 1000e7fd73e37665105415c933c44dd7cd9d5352 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sun, 14 Sep 2025 01:07:39 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=EC=B9=B4=ED=85=8C=EA=B3=A0=EB=A6=AC=EB=B3=84=20?= =?UTF-8?q?=EC=95=84=ED=8B=B0=ED=81=B4=20=EC=A1=B0=ED=9A=8C=EC=8B=9C=20?= =?UTF-8?q?=EC=9D=BD=EC=9D=8C=20=EC=A1=B0=EA=B1=B4=EC=9D=84=20=EA=B8=B0?= =?UTF-8?q?=EB=B0=98=EC=9C=BC=EB=A1=9C=20=EC=A1=B0=ED=9A=8C=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pinback/api/article/controller/ArticleController.java | 3 ++- .../application/article/port/in/GetArticlePort.java | 3 +-- .../article/port/out/ArticleGetServicePort.java | 7 ++++--- .../article/usecase/query/GetArticleUsecase.java | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/com/pinback/api/article/controller/ArticleController.java b/api/src/main/java/com/pinback/api/article/controller/ArticleController.java index 21a8b0e..d40e57c 100644 --- a/api/src/main/java/com/pinback/api/article/controller/ArticleController.java +++ b/api/src/main/java/com/pinback/api/article/controller/ArticleController.java @@ -93,11 +93,12 @@ public ResponseDto getAllArticles( public ResponseDto getAllArticlesByCategory( @Parameter(hidden = true) @CurrentUser User user, @Parameter(description = "카테고리 ID") @RequestParam Long categoryId, + @Parameter(description = "읽음 상태 (true: 읽음, false: 안읽음)", example = "true") @RequestParam(name = "read-status") boolean isRead, @Parameter(description = "페이지 번호 (0부터 시작)") @RequestParam(defaultValue = "0") int page, @Parameter(description = "페이지 크기") @RequestParam(defaultValue = "8") int size ) { PageQuery query = new PageQuery(page, size); - ArticlesPageResponse response = getArticlePort.getAllArticlesByCategory(user, categoryId, query); + ArticlesPageResponse response = getArticlePort.getAllArticlesByCategory(user, categoryId, isRead, query); return ResponseDto.ok(response); } diff --git a/application/src/main/java/com/pinback/application/article/port/in/GetArticlePort.java b/application/src/main/java/com/pinback/application/article/port/in/GetArticlePort.java index 5ffda77..917fe87 100644 --- a/application/src/main/java/com/pinback/application/article/port/in/GetArticlePort.java +++ b/application/src/main/java/com/pinback/application/article/port/in/GetArticlePort.java @@ -6,7 +6,6 @@ import com.pinback.application.article.dto.response.ArticleDetailResponse; import com.pinback.application.article.dto.response.ArticlesPageResponse; import com.pinback.application.article.dto.response.GetAllArticlesResponse; -import com.pinback.application.article.dto.response.RemindArticlesResponse; import com.pinback.application.article.dto.response.TodayRemindResponse; import com.pinback.domain.user.entity.User; @@ -17,7 +16,7 @@ public interface GetArticlePort { GetAllArticlesResponse getAllArticles(User user, PageQuery query); - ArticlesPageResponse getAllArticlesByCategory(User user, long categoryId, PageQuery query); + ArticlesPageResponse getAllArticlesByCategory(User user, long categoryId, boolean isRead, PageQuery query); ArticlesPageResponse getUnreadArticles(User user, PageQuery query); diff --git a/application/src/main/java/com/pinback/application/article/port/out/ArticleGetServicePort.java b/application/src/main/java/com/pinback/application/article/port/out/ArticleGetServicePort.java index cfa05e6..8919756 100644 --- a/application/src/main/java/com/pinback/application/article/port/out/ArticleGetServicePort.java +++ b/application/src/main/java/com/pinback/application/article/port/out/ArticleGetServicePort.java @@ -26,11 +26,12 @@ public interface ArticleGetServicePort { ArticlesWithUnreadCountDto findAll(User user, PageRequest pageRequest); - ArticlesWithUnreadCountDto findAllByCategory(User user, Category category, PageRequest pageRequest); + ArticlesWithUnreadCountDto findAllByCategory(User user, Category category, boolean isRead, PageRequest pageRequest); ArticlesWithUnreadCountDto findUnreadArticles(User user, PageRequest pageRequest); Page
findTodayRemind(User user, LocalDateTime remindDateTime, Pageable pageable, Boolean isRead); - - RemindArticlesWithCountDto findTodayRemindWithCount(User user, LocalDateTime remindDateTime, Pageable pageable, Boolean isRead); + + RemindArticlesWithCountDto findTodayRemindWithCount(User user, LocalDateTime remindDateTime, Pageable pageable, + Boolean isRead); } diff --git a/application/src/main/java/com/pinback/application/article/usecase/query/GetArticleUsecase.java b/application/src/main/java/com/pinback/application/article/usecase/query/GetArticleUsecase.java index a1873bb..34282a6 100644 --- a/application/src/main/java/com/pinback/application/article/usecase/query/GetArticleUsecase.java +++ b/application/src/main/java/com/pinback/application/article/usecase/query/GetArticleUsecase.java @@ -67,11 +67,11 @@ public GetAllArticlesResponse getAllArticles(User user, PageQuery query) { } @Override - public ArticlesPageResponse getAllArticlesByCategory(User user, long categoryId, PageQuery query) { + public ArticlesPageResponse getAllArticlesByCategory(User user, long categoryId, boolean isRead, PageQuery query) { Category category = getCategoryPort.getCategoryAndUser(categoryId, user); ArticlesWithUnreadCountDto result = articleGetServicePort.findAllByCategory( - user, category, PageRequest.of(query.pageNumber(), query.pageSize())); + user, category, isRead, PageRequest.of(query.pageNumber(), query.pageSize())); List articleResponses = result.article().stream() .map(ArticleResponse::from) From 946b0a1571da8b7aa1cd1f056a55371604c20d7d Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sun, 14 Sep 2025 01:08:50 +0900 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20cors=20=EA=B2=BD=EB=A1=9C=EC=97=90?= =?UTF-8?q?=20api=20=EB=8F=84=EB=A9=94=EC=9D=B8=EC=9D=84=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/src/main/java/com/pinback/api/config/cors/CorsConfig.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/com/pinback/api/config/cors/CorsConfig.java b/api/src/main/java/com/pinback/api/config/cors/CorsConfig.java index e020e8a..49a0d5a 100644 --- a/api/src/main/java/com/pinback/api/config/cors/CorsConfig.java +++ b/api/src/main/java/com/pinback/api/config/cors/CorsConfig.java @@ -25,7 +25,8 @@ public CorsConfigurationSource corsConfigurationSource() { "https://pinback-client.vercel.app", "https://pinback.today", "https://landing.pinback.today", - "https://www.pinback.today" + "https://www.pinback.today", + "https://api.pinack.today" )); configuration.setAllowedMethods(Arrays.asList( From 829fc8cfa4824b74e338d0ca326a679215ebb2e4 Mon Sep 17 00:00:00 2001 From: rootTiket Date: Sun, 14 Sep 2025 01:17:46 +0900 Subject: [PATCH 4/4] =?UTF-8?q?test:=20=EC=A1=B0=ED=9A=8C=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=EC=9D=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EC=97=90=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../article/usecase/query/GetArticleUsecaseTest.java | 6 +++--- .../article/service/ArticleGetServiceTest.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/application/src/test/java/com/pinback/application/article/usecase/query/GetArticleUsecaseTest.java b/application/src/test/java/com/pinback/application/article/usecase/query/GetArticleUsecaseTest.java index 023581b..f9d4425 100644 --- a/application/src/test/java/com/pinback/application/article/usecase/query/GetArticleUsecaseTest.java +++ b/application/src/test/java/com/pinback/application/article/usecase/query/GetArticleUsecaseTest.java @@ -142,15 +142,15 @@ void getAllArticlesByCategory_Success() { ArticlesWithUnreadCountDto dto = new ArticlesWithUnreadCountDto(3L, articlePage); when(getCategoryPort.getCategoryAndUser(categoryId, user)).thenReturn(category); - when(articleGetServicePort.findAllByCategory(user, category, pageRequest)).thenReturn(dto); + when(articleGetServicePort.findAllByCategory(user, category, true, pageRequest)).thenReturn(dto); // when - ArticlesPageResponse response = getArticleUsecase.getAllArticlesByCategory(user, categoryId, pageQuery); + ArticlesPageResponse response = getArticleUsecase.getAllArticlesByCategory(user, categoryId, true, pageQuery); // then assertThat(response.articles()).hasSize(3); verify(getCategoryPort).getCategoryAndUser(categoryId, user); - verify(articleGetServicePort).findAllByCategory(user, category, pageRequest); + verify(articleGetServicePort).findAllByCategory(user, category, true, pageRequest); } @DisplayName("읽지 않은 아티클만 조회할 수 있다") diff --git a/infrastructure/src/test/java/com/pinback/infrastructure/article/service/ArticleGetServiceTest.java b/infrastructure/src/test/java/com/pinback/infrastructure/article/service/ArticleGetServiceTest.java index 97ab973..367f59e 100644 --- a/infrastructure/src/test/java/com/pinback/infrastructure/article/service/ArticleGetServiceTest.java +++ b/infrastructure/src/test/java/com/pinback/infrastructure/article/service/ArticleGetServiceTest.java @@ -131,7 +131,7 @@ void findAllByCategoryTest() { PageRequest pageRequest = PageRequest.of(0, 10); //when - ArticlesWithUnreadCountDto result = articleGetService.findAllByCategory(user, category1, pageRequest); + ArticlesWithUnreadCountDto result = articleGetService.findAllByCategory(user, category1, false, pageRequest); //then assertThat(result.article().getContent()).hasSize(1);