From 7e9b2695bd2f842baa815f4f8f6031be11763470 Mon Sep 17 00:00:00 2001 From: yjjjwww Date: Mon, 19 Jun 2023 20:48:48 +0900 Subject: [PATCH 1/2] =?UTF-8?q?fix=20:=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=B6=88=EB=9F=AC=EC=98=A4?= =?UTF-8?q?=EA=B8=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 페이지 목록을 가져올 때 해당하는 글 총 개수도 포함 - 게시글 총 개수를 구하는 API 삭제 --- .../controller/ArticleController.java | 6 ---- .../dto/article/ArticlePageResultDto.java | 28 +++++++++++++++++++ .../impl/ArticleRepositoryImpl.java | 22 +++++++++++++-- .../fab/banggabgo/service/ArticleService.java | 10 ++----- .../service/impl/ArticleServiceImpl.java | 15 ++++------ .../controller/ArticleControllerTest.java | 13 --------- .../service/impl/ArticleServiceImplTest.java | 22 +++------------ 7 files changed, 60 insertions(+), 56 deletions(-) create mode 100644 src/main/java/com/fab/banggabgo/dto/article/ArticlePageResultDto.java diff --git a/src/main/java/com/fab/banggabgo/controller/ArticleController.java b/src/main/java/com/fab/banggabgo/controller/ArticleController.java index 4f797fd..353bcad 100644 --- a/src/main/java/com/fab/banggabgo/controller/ArticleController.java +++ b/src/main/java/com/fab/banggabgo/controller/ArticleController.java @@ -80,12 +80,6 @@ public ResponseEntity getArticleByPageable( return ApiResponse.builder().code(ResponseCode.RESPONSE_SUCCESS).data(result).toEntity(); } - @GetMapping("/total") - public ResponseEntity getArticleTotalCnt() { - var result = articleService.getArticleTotalCnt(); - return ApiResponse.builder().code(ResponseCode.RESPONSE_SUCCESS).data(result).toEntity(); - } - @GetMapping("/filter") public ResponseEntity getArticleByFilter( @RequestParam("page") Integer page, diff --git a/src/main/java/com/fab/banggabgo/dto/article/ArticlePageResultDto.java b/src/main/java/com/fab/banggabgo/dto/article/ArticlePageResultDto.java new file mode 100644 index 0000000..90f15b8 --- /dev/null +++ b/src/main/java/com/fab/banggabgo/dto/article/ArticlePageResultDto.java @@ -0,0 +1,28 @@ +package com.fab.banggabgo.dto.article; + +import com.fab.banggabgo.entity.Article; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.data.domain.Page; + +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ArticlePageResultDto { + + private long totalCnt; + private List articleList; + + public static ArticlePageResultDto toDto(Page
articlePage) { + return ArticlePageResultDto.builder() + .totalCnt(articlePage.getTotalElements()) + .articleList(ArticlePageDto.toDtoList(articlePage)) + .build(); + } +} diff --git a/src/main/java/com/fab/banggabgo/repository/impl/ArticleRepositoryImpl.java b/src/main/java/com/fab/banggabgo/repository/impl/ArticleRepositoryImpl.java index c426e9c..2a79ce7 100644 --- a/src/main/java/com/fab/banggabgo/repository/impl/ArticleRepositoryImpl.java +++ b/src/main/java/com/fab/banggabgo/repository/impl/ArticleRepositoryImpl.java @@ -39,13 +39,20 @@ public Page
getArticle(Pageable pageable, boolean isRecruiting) { .limit(pageable.getPageSize()) .distinct(); + var articleCountQuery = queryFactory.select(qArticle.count()) + .from(qArticle) + .join(qArticle.user, qUser) + .where(qArticle.isDeleted.eq(false)) + .distinct(); + if (isRecruiting) { articleQuery = articleQuery.where(qArticle.isRecruiting.eq(true)); + articleCountQuery = articleCountQuery.where(qArticle.isRecruiting.eq(true)); } List
articleList = articleQuery.fetch(); - return new PageImpl<>(articleList); + return new PageImpl<>(articleList, pageable, articleCountQuery.fetchOne()); } public Page
getArticleByFilter(Pageable pageable, boolean isRecruiting, String region, @@ -62,29 +69,40 @@ public Page
getArticleByFilter(Pageable pageable, boolean isRecruiting, .limit(pageable.getPageSize()) .distinct(); + var articleCountQuery = queryFactory.select(qArticle.count()) + .from(qArticle) + .join(qArticle.user, qUser) + .where(qArticle.isDeleted.eq(false)) + .distinct(); + if (isRecruiting) { articleQuery = articleQuery.where(qArticle.isRecruiting.eq(true)); + articleCountQuery = articleCountQuery.where(qArticle.isRecruiting.eq(true)); } if (!"상관 없음".equals(region)) { articleQuery = articleQuery.where(qArticle.region.eq(Seoul.fromValue(region))); + articleCountQuery = articleCountQuery.where(qArticle.region.eq(Seoul.fromValue(region))); } if (!"상관 없음".equals(period)) { articleQuery = articleQuery.where(qArticle.period.eq(Period.fromValue(period))); + articleCountQuery = articleCountQuery.where(qArticle.period.eq(Period.fromValue(period))); } if (!"상관 없음".equals(price)) { articleQuery = articleQuery.where(qArticle.price.loe(Integer.parseInt(price))); + articleCountQuery = articleCountQuery.where(qArticle.price.loe(Integer.parseInt(price))); } if (!"상관 없음".equals(gender)) { articleQuery = articleQuery.where(qArticle.gender.eq(Gender.fromValue(gender))); + articleCountQuery = articleCountQuery.where(qArticle.gender.eq(Gender.fromValue(gender))); } List
articleList = articleQuery.fetch(); - return new PageImpl<>(articleList); + return new PageImpl<>(articleList, pageable, articleCountQuery.fetchOne()); } @Override diff --git a/src/main/java/com/fab/banggabgo/service/ArticleService.java b/src/main/java/com/fab/banggabgo/service/ArticleService.java index 1e95836..c2e6c48 100644 --- a/src/main/java/com/fab/banggabgo/service/ArticleService.java +++ b/src/main/java/com/fab/banggabgo/service/ArticleService.java @@ -4,6 +4,7 @@ import com.fab.banggabgo.dto.article.ArticleEditDto; import com.fab.banggabgo.dto.article.ArticleInfoDto; import com.fab.banggabgo.dto.article.ArticlePageDto; +import com.fab.banggabgo.dto.article.ArticlePageResultDto; import com.fab.banggabgo.dto.article.ArticleRegisterDto; import com.fab.banggabgo.entity.User; import java.util.List; @@ -38,19 +39,14 @@ public interface ArticleService { /** * 게시글 페이징 불러오기 */ - List getArticleByPageable(Integer page, Integer size, boolean isRecruiting); + ArticlePageResultDto getArticleByPageable(Integer page, Integer size, boolean isRecruiting); /** * 게시글 검색하기 */ - List getArticleByFilter(Integer page, Integer size, boolean isRecruiting, + ArticlePageResultDto getArticleByFilter(Integer page, Integer size, boolean isRecruiting, String region, String period, String price, String gender); - /** - * 게시글 전체 개수 - */ - Integer getArticleTotalCnt(); - /** * 게시글 찜 등록/삭제 */ diff --git a/src/main/java/com/fab/banggabgo/service/impl/ArticleServiceImpl.java b/src/main/java/com/fab/banggabgo/service/impl/ArticleServiceImpl.java index 2f731c2..5f1af8a 100644 --- a/src/main/java/com/fab/banggabgo/service/impl/ArticleServiceImpl.java +++ b/src/main/java/com/fab/banggabgo/service/impl/ArticleServiceImpl.java @@ -6,6 +6,7 @@ import com.fab.banggabgo.dto.article.ArticleEditDto; import com.fab.banggabgo.dto.article.ArticleInfoDto; import com.fab.banggabgo.dto.article.ArticlePageDto; +import com.fab.banggabgo.dto.article.ArticlePageResultDto; import com.fab.banggabgo.dto.article.ArticleRegisterDto; import com.fab.banggabgo.entity.Apply; import com.fab.banggabgo.entity.Article; @@ -180,7 +181,7 @@ public void deleteArticle(User user, Integer id) { } @Override - public List getArticleByPageable(Integer page, Integer size, + public ArticlePageResultDto getArticleByPageable(Integer page, Integer size, boolean isRecruiting) { page = page < 1 ? 1 : page; @@ -189,11 +190,11 @@ public List getArticleByPageable(Integer page, Integer size, Page
articleList = articleRepository.getArticle(pageable, isRecruiting); - return ArticlePageDto.toDtoList(articleList); + return ArticlePageResultDto.toDto(articleList); } @Override - public List getArticleByFilter(Integer page, Integer size, boolean isRecruiting, + public ArticlePageResultDto getArticleByFilter(Integer page, Integer size, boolean isRecruiting, String region, String period, String price, String gender) { page = page < 1 ? 1 : page; @@ -203,13 +204,7 @@ public List getArticleByFilter(Integer page, Integer size, boole Page
articleList = articleRepository.getArticleByFilter(pageable, isRecruiting, region, period, price, gender); - return ArticlePageDto.toDtoList(articleList); - } - - @Override - public Integer getArticleTotalCnt() { - - return articleRepository.getArticleTotalCnt(); + return ArticlePageResultDto.toDto(articleList); } @Override diff --git a/src/test/java/com/fab/banggabgo/controller/ArticleControllerTest.java b/src/test/java/com/fab/banggabgo/controller/ArticleControllerTest.java index 335a446..ce79643 100644 --- a/src/test/java/com/fab/banggabgo/controller/ArticleControllerTest.java +++ b/src/test/java/com/fab/banggabgo/controller/ArticleControllerTest.java @@ -558,19 +558,6 @@ void getArticleByFilterSuccess() throws Exception { .andDo(print()); } - @Test - @DisplayName("게시글 총 개수 가져오기") - @WithMockUser - void getArticleTotalCntSuccess() throws Exception { - //given - //when - //then - mockMvc.perform(get("/api/articles/total") - .with(SecurityMockMvcRequestPostProcessors.csrf())) - .andExpect(status().isOk()) - .andDo(print()); - } - @Test @DisplayName("글 찜 등록 및 삭제 성공") @WithMockUser diff --git a/src/test/java/com/fab/banggabgo/service/impl/ArticleServiceImplTest.java b/src/test/java/com/fab/banggabgo/service/impl/ArticleServiceImplTest.java index 06d8eb0..3f9e731 100644 --- a/src/test/java/com/fab/banggabgo/service/impl/ArticleServiceImplTest.java +++ b/src/test/java/com/fab/banggabgo/service/impl/ArticleServiceImplTest.java @@ -507,7 +507,7 @@ void getArticleByPageableSuccess_ISRECRUITING_TRUE() { var result = articleService.getArticleByPageable(1, 5, true); //then - assertEquals(5, result.size()); + assertEquals(5, result.getArticleList().size()); } @Test @@ -541,7 +541,7 @@ void getArticleByPageableSuccess_ALL_ARTICLES() { var result = articleService.getArticleByPageable(1, 5, false); //then - assertEquals(5, result.size()); + assertEquals(5, result.getArticleList().size()); } @Test @@ -576,7 +576,7 @@ void getArticleByFilterSuccess_ISRECRUITING_TRUE() { var result = articleService.getArticleByFilter(1, 5, true, "서초구", "1개월 ~ 3개월", "1000000", "남성"); //then - assertEquals(5, result.size()); + assertEquals(5, result.getArticleList().size()); } @Test @@ -612,21 +612,7 @@ void getArticleByFilterSuccess_ALL_ARTICLES() { "남성"); //then - assertEquals(5, result.size()); - } - - @Test - @DisplayName("글 전체 개수 가져오기 성공") - void getArticleTotalCntSuccess() { - //given - given(articleRepository.getArticleTotalCnt()) - .willReturn(5); - - //when - Integer result = articleService.getArticleTotalCnt(); - - //then - assertEquals(5, result); + assertEquals(5, result.getArticleList().size()); } @Test From 719cb67176a3e0c3becc3eef79e5e8763bccd127 Mon Sep 17 00:00:00 2001 From: yjjjwww Date: Tue, 20 Jun 2023 02:25:58 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix=20:=20conflict=EA=B0=80=20=EB=B0=9C?= =?UTF-8?q?=EC=83=9D=ED=95=98=EB=8A=94=20=EC=BD=94=EB=93=9C=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../banggabgo/service/MyContentService.java | 3 -- .../controller/MyContentControllerTest.java | 43 +++++++++++-------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/fab/banggabgo/service/MyContentService.java b/src/main/java/com/fab/banggabgo/service/MyContentService.java index 79426ce..838f3b7 100644 --- a/src/main/java/com/fab/banggabgo/service/MyContentService.java +++ b/src/main/java/com/fab/banggabgo/service/MyContentService.java @@ -5,7 +5,6 @@ import com.fab.banggabgo.dto.mycontent.FavoriteArticleDto; import com.fab.banggabgo.dto.mycontent.MyArticleDto; import com.fab.banggabgo.dto.mycontent.MyInfoDto; -import com.fab.banggabgo.dto.mycontent.PatchMyInfoDto; import com.fab.banggabgo.dto.mycontent.PatchMyInfoRequestDto; import com.fab.banggabgo.dto.mycontent.PatchMyInfoResultDto; import com.fab.banggabgo.dto.mycontent.PatchMyNicknameRequestDto; @@ -31,8 +30,6 @@ PostMyInfoImageResultDto postMyInfoImage(User user, PostMyInfoImageRequestDto dt throws IOException; PatchMyInfoResultDto patchMyInfo(User user, PatchMyInfoRequestDto form); - PatchMyInfoResultDto patchMyInfo(User user, PatchMyInfoDto form); - List getMyFromApplicantList(User user, Integer page, Integer size); List getMyToApplicantList(User user, Integer page, Integer size); diff --git a/src/test/java/com/fab/banggabgo/controller/MyContentControllerTest.java b/src/test/java/com/fab/banggabgo/controller/MyContentControllerTest.java index 55e69df..4dee4d6 100644 --- a/src/test/java/com/fab/banggabgo/controller/MyContentControllerTest.java +++ b/src/test/java/com/fab/banggabgo/controller/MyContentControllerTest.java @@ -12,6 +12,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; @@ -143,35 +144,39 @@ class applicantList { @Test @DisplayName("신청자리스트 - 성공") @WithMockUser - void successGetApplicantList() throws Exception{ + void successGetApplicantList() throws Exception { mockMvc.perform(get("/api/my/from-applicants?page=1&size=4") - .with(SecurityMockMvcRequestPostProcessors.csrf())) + .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()); } + @Test @DisplayName("신청자리스트 - 성공 페이지 누락") @WithMockUser - void successLostPageGetApplicantList() throws Exception{ + void successLostPageGetApplicantList() throws Exception { mockMvc.perform(get("/api/my/from-applicants?size=4") - .with(SecurityMockMvcRequestPostProcessors.csrf())) + .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()); } + @Test @DisplayName("신청자리스트 - 성공 사이즈 누락") @WithMockUser - void successLostSizeGetApplicantList() throws Exception{ + void successLostSizeGetApplicantList() throws Exception { mockMvc.perform(get("/api/my/from-applicants?page=1") - .with(SecurityMockMvcRequestPostProcessors.csrf())) + .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()); } + @Test @DisplayName("신청자리스트 - 실패 계정 누락") - void FailNonAuthGetApplicantList() throws Exception{ + void FailNonAuthGetApplicantList() throws Exception { mockMvc.perform(get("/api/my/from-applicants?page=1&size=4") - .with(SecurityMockMvcRequestPostProcessors.csrf())) + .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isUnauthorized()); } } + @Nested @DisplayName("내가신청한 신청자리스트") class toApplicantList { @@ -179,35 +184,39 @@ class toApplicantList { @Test @DisplayName("신청한리스트 - 성공") @WithMockUser - void successGetApplicantList() throws Exception{ + void successGetApplicantList() throws Exception { mockMvc.perform(get("/api/my/to-applicants?page=1&size=4") - .with(SecurityMockMvcRequestPostProcessors.csrf())) + .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()); } + @Test @DisplayName("신청한리스트 - 성공 페이지 누락") @WithMockUser - void successLostPageGetApplicantList() throws Exception{ + void successLostPageGetApplicantList() throws Exception { mockMvc.perform(get("/api/my/to-applicants?size=4") - .with(SecurityMockMvcRequestPostProcessors.csrf())) + .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()); } + @Test @DisplayName("신청한리스트 - 성공 사이즈 누락") @WithMockUser - void successLostSizeGetApplicantList() throws Exception{ + void successLostSizeGetApplicantList() throws Exception { mockMvc.perform(get("/api/my/to-applicants?page=1") - .with(SecurityMockMvcRequestPostProcessors.csrf())) + .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isOk()); } + @Test @DisplayName("신청한리스트 - 실패 계정 누락") - void FailNonAuthGetApplicantList() throws Exception{ + void FailNonAuthGetApplicantList() throws Exception { mockMvc.perform(get("/api/my/to-applicants?page=1&size=4") - .with(SecurityMockMvcRequestPostProcessors.csrf())) + .with(SecurityMockMvcRequestPostProcessors.csrf())) .andExpect(status().isUnauthorized()); } - + } + @Test @DisplayName("이미지 변경 테스트") @WithMockUser