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 21a8b0e1..d40e57cd 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/api/src/main/java/com/pinback/api/config/cors/CorsConfig.java b/api/src/main/java/com/pinback/api/config/cors/CorsConfig.java index e020e8ad..49a0d5a6 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( 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 5ffda778..917fe874 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 cfa05e68..8919756b 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 a1873bb8..34282a61 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) 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 023581b0..f9d44259 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/main/java/com/pinback/infrastructure/article/repository/ArticleRepositoryCustom.java b/infrastructure/src/main/java/com/pinback/infrastructure/article/repository/ArticleRepositoryCustom.java index fafedce0..f877dde5 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 e43a465a..e03e4eec 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 508b445e..fae22fb2 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(), 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 97ab973b..367f59ef 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);