From c309c6a1f98fe7b2159a73de4fc6ea5c123bab51 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Wed, 27 Nov 2024 17:46:40 +0900 Subject: [PATCH 01/10] =?UTF-8?q?feat(center):=20=EC=BB=A4=EB=AE=A4?= =?UTF-8?q?=EB=8B=88=ED=8B=B0=EC=97=90=EC=84=9C=20=EC=84=BC=ED=84=B0=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=ED=95=84=20=EC=A1=B0=ED=9A=8C=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=B0=8F=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CenterForCommunityResponseDto.java | 28 ------------------- .../center/repository/CenterRepository.java | 1 - .../repository/CenterRepositoryImpl.java | 11 -------- .../service/query/CenterQueryService.java | 12 -------- .../usecase/query/CenterQueryUseCase.java | 3 -- .../repository/CenterRepositoryTest.java | 22 --------------- .../service/query/CenterQueryServiceTest.java | 26 ----------------- 7 files changed, 103 deletions(-) delete mode 100644 src/main/java/com/somemore/center/dto/response/CenterForCommunityResponseDto.java diff --git a/src/main/java/com/somemore/center/dto/response/CenterForCommunityResponseDto.java b/src/main/java/com/somemore/center/dto/response/CenterForCommunityResponseDto.java deleted file mode 100644 index 37a0683f4..000000000 --- a/src/main/java/com/somemore/center/dto/response/CenterForCommunityResponseDto.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.somemore.center.dto.response; - -import com.fasterxml.jackson.databind.PropertyNamingStrategies; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import com.somemore.center.domain.Center; -import com.somemore.community.dto.response.WriterDetailDto; -import com.somemore.volunteer.domain.Tier; - -import java.util.UUID; - -@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) -public record CenterForCommunityResponseDto( - UUID id, - String name, - String imgUrl, - Tier tier -) implements WriterDetailDto { - - public static CenterForCommunityResponseDto fromEntity(Center center) { - return new CenterForCommunityResponseDto( - center.getId(), - center.getName(), - center.getImgUrl(), - null - ); - } -} - diff --git a/src/main/java/com/somemore/center/repository/CenterRepository.java b/src/main/java/com/somemore/center/repository/CenterRepository.java index 406a01126..946553a08 100644 --- a/src/main/java/com/somemore/center/repository/CenterRepository.java +++ b/src/main/java/com/somemore/center/repository/CenterRepository.java @@ -14,6 +14,5 @@ default boolean doesNotExistById(UUID id) { return !existsById(id); } Optional
findCenterById(UUID id); - String findNameById(UUID id); void deleteAllInBatch(); } diff --git a/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java b/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java index 4fb68911d..4cabb71a7 100644 --- a/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java +++ b/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java @@ -31,17 +31,6 @@ public Optional
findCenterById(UUID id) { return centerJpaRepository.findCenterById(id); } - @Override - public String findNameById(UUID id) { - QCenter center = QCenter.center; - - return queryFactory - .select(center.name) - .from(center) - .where(center.id.eq(id)) - .fetchOne(); - } - @Override public void deleteAllInBatch() { centerJpaRepository.deleteAllInBatch(); diff --git a/src/main/java/com/somemore/center/service/query/CenterQueryService.java b/src/main/java/com/somemore/center/service/query/CenterQueryService.java index c208052b9..29f0cfc4e 100644 --- a/src/main/java/com/somemore/center/service/query/CenterQueryService.java +++ b/src/main/java/com/somemore/center/service/query/CenterQueryService.java @@ -1,7 +1,6 @@ package com.somemore.center.service.query; import com.somemore.center.domain.Center; -import com.somemore.center.dto.response.CenterForCommunityResponseDto; import com.somemore.center.dto.response.CenterProfileResponseDto; import com.somemore.center.dto.response.PreferItemResponseDto; import com.somemore.center.repository.CenterRepository; @@ -45,15 +44,4 @@ private Center getCenterById(UUID centerId) { return centerRepository.findCenterById(centerId) .orElseThrow(() -> new BadRequestException(NOT_EXISTS_CENTER.getMessage())); } - - @Override - public String getNameById(UUID id) { - return centerRepository.findNameById(id); - } - - @Override - public CenterForCommunityResponseDto getCenterDetailForCommunity(UUID id) { - Center center = getCenterById(id); - return CenterForCommunityResponseDto.fromEntity(center); - } } diff --git a/src/main/java/com/somemore/center/usecase/query/CenterQueryUseCase.java b/src/main/java/com/somemore/center/usecase/query/CenterQueryUseCase.java index 68aafc007..7c12cb28c 100644 --- a/src/main/java/com/somemore/center/usecase/query/CenterQueryUseCase.java +++ b/src/main/java/com/somemore/center/usecase/query/CenterQueryUseCase.java @@ -1,6 +1,5 @@ package com.somemore.center.usecase.query; -import com.somemore.center.dto.response.CenterForCommunityResponseDto; import com.somemore.center.dto.response.CenterProfileResponseDto; import java.util.UUID; @@ -9,6 +8,4 @@ public interface CenterQueryUseCase { CenterProfileResponseDto getCenterProfileByCenterId(UUID centerId); void validateCenterExists(UUID centerId); - String getNameById(UUID id); - CenterForCommunityResponseDto getCenterDetailForCommunity(UUID id); } diff --git a/src/test/java/com/somemore/center/repository/CenterRepositoryTest.java b/src/test/java/com/somemore/center/repository/CenterRepositoryTest.java index b6573a8d7..142685832 100644 --- a/src/test/java/com/somemore/center/repository/CenterRepositoryTest.java +++ b/src/test/java/com/somemore/center/repository/CenterRepositoryTest.java @@ -81,26 +81,4 @@ void notExistsById() { //then assertThat(isExist).isFalse(); } - - @DisplayName("센터의 id로 name을 조회한다. (Repository)") - @Test - void findNameById() { - //given - Center center = Center.create( - "기본 기관 이름", - "010-1234-5678", - "http://example.com/image.jpg", - "기관 소개 내용", - "http://example.com", - "account123", - "password123" - ); - centerRepository.save(center); - - //when - String centerName = centerRepository.findNameById(center.getId()); - - //then - assertThat(centerName).isEqualTo("기본 기관 이름"); - } } diff --git a/src/test/java/com/somemore/center/service/query/CenterQueryServiceTest.java b/src/test/java/com/somemore/center/service/query/CenterQueryServiceTest.java index 0ff4ae5ef..2cff5e618 100644 --- a/src/test/java/com/somemore/center/service/query/CenterQueryServiceTest.java +++ b/src/test/java/com/somemore/center/service/query/CenterQueryServiceTest.java @@ -118,30 +118,4 @@ void validateExistingCenter() { // then assertThatCode(callable).doesNotThrowAnyException(); } - - @DisplayName("센터의 id로 name을 조회한다.") - @Test - void getNameById() { - - //given - Center center = Center.create( - "기본 기관 이름", - "010-1234-5678", - "http://example.com/image.jpg", - "기관 소개 내용", - "http://example.com", - "account123", - "password123" - ); - - Center savedCenter = centerRepository.save(center); - - //when - String name = centerQueryService.getNameById(savedCenter.getId()); - - //then - assertThat(name).isEqualTo("기본 기관 이름"); - - } - } From 52dc2e69f483caa320d3ce4cdaea8353bd619e0d Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Wed, 27 Nov 2024 17:48:12 +0900 Subject: [PATCH 02/10] =?UTF-8?q?feat(volunteer):=20=EC=BB=A4=EB=AE=A4?= =?UTF-8?q?=EB=8B=88=ED=8B=B0=EC=97=90=EC=84=9C=20=EB=B4=89=EC=82=AC?= =?UTF-8?q?=EC=9E=90=20=ED=94=84=EB=A1=9C=ED=95=84=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=B0=8F=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/WriterDetailDto.java | 12 -------- .../VolunteerForCommunityResponseDto.java | 28 ------------------- .../repository/VolunteerDetailRepository.java | 1 - .../repository/VolunteerJpaRepository.java | 1 - .../repository/VolunteerRepository.java | 1 - .../repository/VolunteerRepositoryImpl.java | 5 ---- .../service/query/FindVolunteerIdService.java | 9 ------ .../usecase/query/FindVolunteerIdUseCase.java | 3 -- 8 files changed, 60 deletions(-) delete mode 100644 src/main/java/com/somemore/community/dto/response/WriterDetailDto.java delete mode 100644 src/main/java/com/somemore/volunteer/dto/response/VolunteerForCommunityResponseDto.java diff --git a/src/main/java/com/somemore/community/dto/response/WriterDetailDto.java b/src/main/java/com/somemore/community/dto/response/WriterDetailDto.java deleted file mode 100644 index ee32de949..000000000 --- a/src/main/java/com/somemore/community/dto/response/WriterDetailDto.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.somemore.community.dto.response; - -import com.somemore.volunteer.domain.Tier; - -import java.util.UUID; - -public interface WriterDetailDto { - UUID id(); - String name(); - String imgUrl(); - Tier tier(); -} diff --git a/src/main/java/com/somemore/volunteer/dto/response/VolunteerForCommunityResponseDto.java b/src/main/java/com/somemore/volunteer/dto/response/VolunteerForCommunityResponseDto.java deleted file mode 100644 index 662d6fe07..000000000 --- a/src/main/java/com/somemore/volunteer/dto/response/VolunteerForCommunityResponseDto.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.somemore.volunteer.dto.response; - -import com.fasterxml.jackson.databind.PropertyNamingStrategies; -import com.fasterxml.jackson.databind.annotation.JsonNaming; -import com.somemore.community.dto.response.WriterDetailDto; -import com.somemore.volunteer.domain.Tier; -import com.somemore.volunteer.domain.Volunteer; - -import java.util.UUID; - -@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) -public record VolunteerForCommunityResponseDto( - UUID id, - String name, - String imgUrl, - Tier tier -) implements WriterDetailDto { - - public static VolunteerForCommunityResponseDto fromEntity(Volunteer volunteer) { - return new VolunteerForCommunityResponseDto( - volunteer.getId(), - volunteer.getNickname(), - volunteer.getImgUrl(), - volunteer.getTier() - ); - } -} - diff --git a/src/main/java/com/somemore/volunteer/repository/VolunteerDetailRepository.java b/src/main/java/com/somemore/volunteer/repository/VolunteerDetailRepository.java index 7dcb9f3c1..82e8f96f7 100644 --- a/src/main/java/com/somemore/volunteer/repository/VolunteerDetailRepository.java +++ b/src/main/java/com/somemore/volunteer/repository/VolunteerDetailRepository.java @@ -7,6 +7,5 @@ import java.util.UUID; public interface VolunteerDetailRepository extends JpaRepository { - Optional findByVolunteerId(UUID volunteerId); } diff --git a/src/main/java/com/somemore/volunteer/repository/VolunteerJpaRepository.java b/src/main/java/com/somemore/volunteer/repository/VolunteerJpaRepository.java index 16e5105da..01272d276 100644 --- a/src/main/java/com/somemore/volunteer/repository/VolunteerJpaRepository.java +++ b/src/main/java/com/somemore/volunteer/repository/VolunteerJpaRepository.java @@ -7,6 +7,5 @@ import java.util.UUID; public interface VolunteerJpaRepository extends JpaRepository { - Volunteer findById(UUID id); Optional findByOauthId(String oauthId); } diff --git a/src/main/java/com/somemore/volunteer/repository/VolunteerRepository.java b/src/main/java/com/somemore/volunteer/repository/VolunteerRepository.java index bcc37359d..03c29cad3 100644 --- a/src/main/java/com/somemore/volunteer/repository/VolunteerRepository.java +++ b/src/main/java/com/somemore/volunteer/repository/VolunteerRepository.java @@ -9,7 +9,6 @@ @Repository public interface VolunteerRepository { Volunteer save(Volunteer volunteer); - Volunteer findById(UUID id); String findNicknameById(UUID id); Optional findByOauthId(String oauthId); void deleteAllInBatch(); diff --git a/src/main/java/com/somemore/volunteer/repository/VolunteerRepositoryImpl.java b/src/main/java/com/somemore/volunteer/repository/VolunteerRepositoryImpl.java index bb19af698..b47f5afbc 100644 --- a/src/main/java/com/somemore/volunteer/repository/VolunteerRepositoryImpl.java +++ b/src/main/java/com/somemore/volunteer/repository/VolunteerRepositoryImpl.java @@ -21,11 +21,6 @@ public Volunteer save(Volunteer volunteer) { return volunteerJpaRepository.save(volunteer); } - @Override - public Volunteer findById(UUID id) { - return volunteerJpaRepository.findById(id); - } - @Override public String findNicknameById(UUID id) { QVolunteer volunteer = QVolunteer.volunteer; diff --git a/src/main/java/com/somemore/volunteer/service/query/FindVolunteerIdService.java b/src/main/java/com/somemore/volunteer/service/query/FindVolunteerIdService.java index 970a643d4..3abdd8ca3 100644 --- a/src/main/java/com/somemore/volunteer/service/query/FindVolunteerIdService.java +++ b/src/main/java/com/somemore/volunteer/service/query/FindVolunteerIdService.java @@ -1,7 +1,5 @@ package com.somemore.volunteer.service.query; -import com.somemore.volunteer.domain.Volunteer; -import com.somemore.volunteer.dto.response.VolunteerForCommunityResponseDto; import com.somemore.volunteer.repository.VolunteerRepository; import com.somemore.volunteer.usecase.query.FindVolunteerIdUseCase; import jakarta.persistence.EntityNotFoundException; @@ -31,11 +29,4 @@ public UUID findVolunteerIdByOAuthId(String oAuthId) { public String getNicknameById(UUID id) { return volunteerRepository.findNicknameById(id); } - - @Override - public VolunteerForCommunityResponseDto getVolunteerDetailForCommunity(UUID id) { - Volunteer volunteer = volunteerRepository.findById(id); - - return VolunteerForCommunityResponseDto.fromEntity(volunteer); - } } diff --git a/src/main/java/com/somemore/volunteer/usecase/query/FindVolunteerIdUseCase.java b/src/main/java/com/somemore/volunteer/usecase/query/FindVolunteerIdUseCase.java index cf1775afb..b07e47543 100644 --- a/src/main/java/com/somemore/volunteer/usecase/query/FindVolunteerIdUseCase.java +++ b/src/main/java/com/somemore/volunteer/usecase/query/FindVolunteerIdUseCase.java @@ -1,11 +1,8 @@ package com.somemore.volunteer.usecase.query; -import com.somemore.volunteer.dto.response.VolunteerForCommunityResponseDto; - import java.util.UUID; public interface FindVolunteerIdUseCase { UUID findVolunteerIdByOAuthId(String oAuthId); String getNicknameById(UUID id); - VolunteerForCommunityResponseDto getVolunteerDetailForCommunity(UUID id); } From 09d5f0b4427247475b31e4ac21979c6dc20ce887 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Wed, 27 Nov 2024 17:53:17 +0900 Subject: [PATCH 03/10] =?UTF-8?q?test(community):=20=EC=BB=A4=EB=AE=A4?= =?UTF-8?q?=EB=8B=88=ED=8B=B0=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/CommunityRepositoryTest.java | 46 ++++-- .../CommunityBoardQueryServiceTest.java | 154 ++++++------------ 2 files changed, 86 insertions(+), 114 deletions(-) diff --git a/src/test/java/com/somemore/community/repository/CommunityRepositoryTest.java b/src/test/java/com/somemore/community/repository/CommunityRepositoryTest.java index b908f2db8..c322fcd8a 100644 --- a/src/test/java/com/somemore/community/repository/CommunityRepositoryTest.java +++ b/src/test/java/com/somemore/community/repository/CommunityRepositoryTest.java @@ -1,7 +1,11 @@ package com.somemore.community.repository; import com.somemore.IntegrationTestSupport; +import com.somemore.auth.oauth.OAuthProvider; import com.somemore.community.domain.CommunityBoard; +import com.somemore.community.domain.CommunityBoardWithNickname; +import com.somemore.volunteer.domain.Volunteer; +import com.somemore.volunteer.repository.VolunteerRepository; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -18,6 +22,8 @@ class CommunityRepositoryTest extends IntegrationTestSupport { @Autowired private CommunityBoardRepository communityBoardRepository; + @Autowired + private VolunteerRepository volunteerRepository; @DisplayName("커뮤니티 게시글 id로 커뮤니티 상세 정보를 조회할 수 있다. (Repository)") @Test @@ -68,48 +74,62 @@ void getCommunityBoardByDeletedId() { @Test void getCommunityBoards() { //given + String oAuthId = "example-oauth-id"; + Volunteer volunteer = Volunteer.createDefault(OAuthProvider.NAVER, oAuthId); + volunteerRepository.save(volunteer); + CommunityBoard communityBoard1 = CommunityBoard.builder() .title("테스트 커뮤니티 게시글 제목1") .content("테스트 커뮤니티 게시글 내용1") .imgUrl("http://community.example.com/123") - .writerId(UUID.randomUUID()) + .writerId(volunteer.getId()) .build(); CommunityBoard communityBoard2 = CommunityBoard.builder() .title("테스트 커뮤니티 게시글 제목2") .content("테스트 커뮤니티 게시글 내용2") .imgUrl("http://community.example.com/12") - .writerId(UUID.randomUUID()) + .writerId(volunteer.getId()) .build(); communityBoardRepository.save(communityBoard1); communityBoardRepository.save(communityBoard2); //when - List communityBoards = communityBoardRepository.getCommunityBoards(); + List communityBoards = communityBoardRepository.getCommunityBoards(); //then assertThat(communityBoards).hasSize(2); - assertThat(communityBoards.get(0)).isEqualTo(communityBoard2); - assertThat(communityBoards.get(1)).isEqualTo(communityBoard1); + assertThat(communityBoards.getFirst().getCommunityBoard().getId()).isEqualTo(communityBoard2.getId()); + assertThat(communityBoards.getFirst().getCommunityBoard().getTitle()).isEqualTo(communityBoard2.getTitle()); + assertThat(communityBoards.getFirst().getWriterNickname()).isEqualTo(volunteer.getNickname()); + assertThat(communityBoards.getFirst().getCommunityBoard().getCreatedAt()).isEqualTo(communityBoard2.getCreatedAt()); + assertThat(communityBoards.getLast().getCommunityBoard().getId()).isEqualTo(communityBoard1.getId()); + assertThat(communityBoards.getLast().getCommunityBoard().getTitle()).isEqualTo(communityBoard1.getTitle()); + assertThat(communityBoards.getLast().getWriterNickname()).isEqualTo(volunteer.getNickname()); + assertThat(communityBoards.getLast().getCommunityBoard().getCreatedAt()).isEqualTo(communityBoard1.getCreatedAt()); } @DisplayName("저장된 커뮤니티 게시글 리스트를 작성자별로 조회할 수 있다. (Repository)") @Test void getCommunityBoardsByWriterId() { //given + String oAuthId = "example-oauth-id"; + Volunteer volunteer = Volunteer.createDefault(OAuthProvider.NAVER, oAuthId); + volunteerRepository.save(volunteer); + CommunityBoard communityBoard1 = CommunityBoard.builder() .title("테스트 커뮤니티 게시글 제목1") .content("테스트 커뮤니티 게시글 내용1") .imgUrl("http://community.example.com/123") - .writerId(UUID.randomUUID()) + .writerId(volunteer.getId()) .build(); CommunityBoard communityBoard2 = CommunityBoard.builder() .title("테스트 커뮤니티 게시글 제목2") .content("테스트 커뮤니티 게시글 내용2") .imgUrl("http://community.example.com/12") - .writerId(communityBoard1.getWriterId()) + .writerId(volunteer.getId()) .build(); CommunityBoard communityBoard3 = CommunityBoard.builder() @@ -124,11 +144,17 @@ void getCommunityBoardsByWriterId() { communityBoardRepository.save(communityBoard3); //when - List communityBoards = communityBoardRepository.findByWriterId(communityBoard1.getWriterId()); + List communityBoards = communityBoardRepository.findByWriterId(volunteer.getId()); //then assertThat(communityBoards).hasSize(2); - assertThat(communityBoards.get(0)).isEqualTo(communityBoard2); - assertThat(communityBoards.get(1)).isEqualTo(communityBoard1); + assertThat(communityBoards.getFirst().getCommunityBoard().getId()).isEqualTo(communityBoard2.getId()); + assertThat(communityBoards.getFirst().getCommunityBoard().getTitle()).isEqualTo(communityBoard2.getTitle()); + assertThat(communityBoards.getFirst().getWriterNickname()).isEqualTo(volunteer.getNickname()); + assertThat(communityBoards.getFirst().getCommunityBoard().getCreatedAt()).isEqualTo(communityBoard2.getCreatedAt()); + assertThat(communityBoards.getLast().getCommunityBoard().getId()).isEqualTo(communityBoard1.getId()); + assertThat(communityBoards.getLast().getCommunityBoard().getTitle()).isEqualTo(communityBoard1.getTitle()); + assertThat(communityBoards.getLast().getWriterNickname()).isEqualTo(volunteer.getNickname()); + assertThat(communityBoards.getLast().getCommunityBoard().getCreatedAt()).isEqualTo(communityBoard1.getCreatedAt()); } } diff --git a/src/test/java/com/somemore/community/service/CommunityBoardQueryServiceTest.java b/src/test/java/com/somemore/community/service/CommunityBoardQueryServiceTest.java index 0f3aaf55a..7f4a508ef 100644 --- a/src/test/java/com/somemore/community/service/CommunityBoardQueryServiceTest.java +++ b/src/test/java/com/somemore/community/service/CommunityBoardQueryServiceTest.java @@ -2,7 +2,6 @@ import com.somemore.IntegrationTestSupport; import com.somemore.auth.oauth.OAuthProvider; -import com.somemore.center.domain.Center; import com.somemore.center.repository.CenterRepository; import com.somemore.community.domain.CommunityBoard; import com.somemore.community.dto.request.CommunityBoardCreateRequestDto; @@ -17,12 +16,14 @@ import com.somemore.volunteer.repository.VolunteerRepository; import org.assertj.core.api.ThrowableAssert; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import java.util.List; import java.util.Optional; +import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatExceptionOfType; @@ -42,32 +43,12 @@ class CommunityBoardQueryServiceTest extends IntegrationTestSupport { @Autowired CommunityBoardQueryService communityBoardQueryService; - @AfterEach - void tearDown() { - communityBoardRepository.deleteAllInBatch(); - } - - @DisplayName("저장된 커뮤니티 게시글 리스트를 조회한다.") - @Test - void getAllCommunityBoards() { - - //given - String oAuthId = "example-oauth-id"; - Volunteer volunteer = Volunteer.createDefault(OAuthProvider.NAVER, oAuthId); - - Volunteer savedVolunteer = volunteerRepository.save(volunteer); - - Center center = Center.create( - "기본 기관 이름", - "010-1234-5678", - "http://example.com/image.jpg", - "기관 소개 내용", - "http://example.com", - "account123", - "password123" - ); - Center savedCenter = centerRepository.save(center); + private UUID writerId1, writerId2; + private Long communityId1, communityId2; + private String imgUrl, nickName1, nickName2; + @BeforeEach + void setUp() { CommunityBoardCreateRequestDto dto1 = CommunityBoardCreateRequestDto.builder() .title("커뮤니티 테스트 제목1") .content("커뮤니티 테스트 내용1") @@ -78,12 +59,37 @@ void getAllCommunityBoards() { .content("커뮤니티 테스트 내용2") .build(); + String oAuthId = "example-oauth-id"; + Volunteer volunteer = Volunteer.createDefault(OAuthProvider.NAVER, oAuthId); + + volunteerRepository.save(volunteer); + + String oAuthId2 = "example-oauth-id"; + Volunteer volunteer2 = Volunteer.createDefault(OAuthProvider.NAVER, oAuthId2); + + volunteerRepository.save(volunteer2); - String imgUrl1 = "https://image.test.url/123"; + writerId1 = volunteer.getId(); + writerId2 = volunteer2.getId(); + nickName1 = volunteer.getNickname(); + nickName2 = volunteer2.getNickname(); + imgUrl = "https://image.test.url/123"; - Long communityId1 = createCommunityBoardUseCase.createCommunityBoard(dto1, savedCenter.getId(), null); - Long communityId2 = createCommunityBoardUseCase.createCommunityBoard(dto2, savedVolunteer.getId(), imgUrl1); + communityId1 = createCommunityBoardUseCase.createCommunityBoard(dto1, writerId1, imgUrl); + communityId2 = createCommunityBoardUseCase.createCommunityBoard(dto2, writerId2, null); + } + + @AfterEach + void tearDown() { + communityBoardRepository.deleteAllInBatch(); + } + + @DisplayName("저장된 커뮤니티 게시글 리스트를 조회한다.") + @Test + void getAllCommunityBoards() { + + //given // when List dtos = communityBoardQueryService.getCommunityBoards(); @@ -91,21 +97,20 @@ void getAllCommunityBoards() { Optional communityBoard1 = communityBoardRepository.findById(communityId1); Optional communityBoard2 = communityBoardRepository.findById(communityId2); - assertThat(dtos) .isNotNull() .hasSize(2); CommunityBoardGetResponseDto board1 = dtos.getLast(); assertThat(board1.id()).isEqualTo(communityId1); - assertThat(board1.writerNickname()).isEqualTo(savedCenter.getName()); - assertThat(board1.title()).isEqualTo(dto1.title()); + assertThat(board1.title()).isEqualTo(communityBoard1.get().getTitle()); + assertThat(board1.writerNickname()).isEqualTo(nickName1); assertThat(board1.createdAt()).isEqualTo(communityBoard1.get().getCreatedAt()); CommunityBoardGetResponseDto board2 = dtos.getFirst(); assertThat(board2.id()).isEqualTo(communityId2); - assertThat(board2.writerNickname()).isEqualTo(savedVolunteer.getNickname()); - assertThat(board2.title()).isEqualTo(dto2.title()); + assertThat(board2.title()).isEqualTo(communityBoard2.get().getTitle()); + assertThat(board2.writerNickname()).isEqualTo(nickName2); assertThat(board2.createdAt()).isEqualTo(communityBoard2.get().getCreatedAt()); } @@ -114,48 +119,21 @@ void getAllCommunityBoards() { void getCommunityBoardsByWriter() { //given - String oAuthId = "example-oauth-id"; - Volunteer volunteer = Volunteer.createDefault(OAuthProvider.NAVER, oAuthId); - - Volunteer savedVolunteer = volunteerRepository.save(volunteer); - - CommunityBoardCreateRequestDto dto1 = CommunityBoardCreateRequestDto.builder() - .title("커뮤니티 테스트 제목1") - .content("커뮤니티 테스트 내용1") - .build(); - - CommunityBoardCreateRequestDto dto2 = CommunityBoardCreateRequestDto.builder() - .title("커뮤니티 테스트 제목2") - .content("커뮤니티 테스트 내용2") - .build(); - - String imgUrl1 = "https://image.test.url/123"; - - Long communityId1 = createCommunityBoardUseCase.createCommunityBoard(dto1, savedVolunteer.getId(), null); - Long communityId2 = createCommunityBoardUseCase.createCommunityBoard(dto2, savedVolunteer.getId(), imgUrl1); - //when - List dtos = communityBoardQueryService.getCommunityBoardsByWriterId(volunteer.getId()); + List dtos = communityBoardQueryService.getCommunityBoardsByWriterId(writerId1); //then Optional communityBoard1 = communityBoardRepository.findById(communityId1); - Optional communityBoard2 = communityBoardRepository.findById(communityId2); assertThat(dtos) .isNotNull() - .hasSize(2); + .hasSize(1); - CommunityBoardGetResponseDto board1 = dtos.getLast(); + CommunityBoardGetResponseDto board1 = dtos.getFirst(); assertThat(board1.id()).isEqualTo(communityId1); - assertThat(board1.writerNickname()).isEqualTo(savedVolunteer.getNickname()); - assertThat(board1.title()).isEqualTo(dto1.title()); + assertThat(board1.title()).isEqualTo(communityBoard1.get().getTitle()); + assertThat(board1.writerNickname()).isEqualTo(nickName1); assertThat(board1.createdAt()).isEqualTo(communityBoard1.get().getCreatedAt()); - - CommunityBoardGetResponseDto board2 = dtos.getFirst(); - assertThat(board2.id()).isEqualTo(communityId2); - assertThat(board2.writerNickname()).isEqualTo(savedVolunteer.getNickname()); - assertThat(board2.title()).isEqualTo(dto2.title()); - assertThat(board2.createdAt()).isEqualTo(communityBoard2.get().getCreatedAt()); } @DisplayName("커뮤니티 게시글의 상세 정보를 조회한다.") @@ -163,34 +141,16 @@ void getCommunityBoardsByWriter() { void getCommunityBoardDetail() { //given - String oAuthId = "example-oauth-id"; - Volunteer volunteer = Volunteer.createDefault(OAuthProvider.NAVER, oAuthId); - - Volunteer savedVolunteer = volunteerRepository.save(volunteer); - - CommunityBoardCreateRequestDto dto1 = CommunityBoardCreateRequestDto.builder() - .title("커뮤니티 테스트 제목") - .content("커뮤니티 테스트 내용") - .build(); - - String imgUrl = "https://image.test.url/123"; - - Long communityId1 = createCommunityBoardUseCase.createCommunityBoard(dto1, savedVolunteer.getId(), imgUrl); - //when CommunityBoardGetDetailResponseDto communityBoard = communityBoardQueryService.getCommunityBoardDetail(communityId1); //then assertThat(communityBoard).isNotNull(); assertThat(communityBoard.id()).isEqualTo(communityId1); - assertThat(communityBoard.title()).isEqualTo("커뮤니티 테스트 제목"); - assertThat(communityBoard.content()).isEqualTo("커뮤니티 테스트 내용"); - assertThat(communityBoard.imageUrl()).isEqualTo("https://image.test.url/123"); - - assertThat(communityBoard.writerDetailDto().id()).isEqualTo(savedVolunteer.getId()); - assertThat(communityBoard.writerDetailDto().name()).isEqualTo(savedVolunteer.getNickname()); - assertThat(communityBoard.writerDetailDto().imgUrl()).isEqualTo(savedVolunteer.getImgUrl()); - assertThat(communityBoard.writerDetailDto().tier()).isEqualTo(savedVolunteer.getTier()); + assertThat(communityBoard.title()).isEqualTo("커뮤니티 테스트 제목1"); + assertThat(communityBoard.content()).isEqualTo("커뮤니티 테스트 내용1"); + assertThat(communityBoard.writerId()).isEqualTo(writerId1); + assertThat(communityBoard.imageUrl()).isEqualTo(imgUrl); } @DisplayName("삭제된 커뮤니티 게시글의 상세 정보를 조회할 때 예외를 던진다.") @@ -198,24 +158,10 @@ void getCommunityBoardDetail() { void getCommunityBoardDetailWithDeletedId() { //given - String oAuthId = "example-oauth-id"; - Volunteer volunteer = Volunteer.createDefault(OAuthProvider.NAVER, oAuthId); - - Volunteer savedVolunteer = volunteerRepository.save(volunteer); - - CommunityBoardCreateRequestDto dto1 = CommunityBoardCreateRequestDto.builder() - .title("커뮤니티 테스트 제목") - .content("커뮤니티 테스트 내용") - .build(); - - String imgUrl = "https://image.test.url/123"; - - Long communityId = createCommunityBoardUseCase.createCommunityBoard(dto1, savedVolunteer.getId(), imgUrl); - - deleteCommunityBoardUseCase.deleteCommunityBoard(savedVolunteer.getId(), communityId); + deleteCommunityBoardUseCase.deleteCommunityBoard(writerId1, communityId1); //when - ThrowableAssert.ThrowingCallable callable = () -> communityBoardQueryService.getCommunityBoardDetail(communityId); + ThrowableAssert.ThrowingCallable callable = () -> communityBoardQueryService.getCommunityBoardDetail(communityId1); //then assertThatExceptionOfType(BadRequestException.class) From 4180256152da6f78ec07c2d2199b7fff91a872f9 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Wed, 27 Nov 2024 17:57:23 +0900 Subject: [PATCH 04/10] =?UTF-8?q?feat(community):=20=EC=BB=A4=EB=AE=A4?= =?UTF-8?q?=EB=8B=88=ED=8B=B0=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20=EB=B0=98=ED=99=98=20?= =?UTF-8?q?class=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../community/domain/CommunityBoardWithNickname.java | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/main/java/com/somemore/community/domain/CommunityBoardWithNickname.java diff --git a/src/main/java/com/somemore/community/domain/CommunityBoardWithNickname.java b/src/main/java/com/somemore/community/domain/CommunityBoardWithNickname.java new file mode 100644 index 000000000..30e6d35ea --- /dev/null +++ b/src/main/java/com/somemore/community/domain/CommunityBoardWithNickname.java @@ -0,0 +1,11 @@ +package com.somemore.community.domain; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@Getter +@RequiredArgsConstructor +public class CommunityBoardWithNickname { + private final CommunityBoard communityBoard; + private final String writerNickname; +} From f726c0df540dbfcf3659d9c310ab5947e802ef9c Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Wed, 27 Nov 2024 17:59:14 +0900 Subject: [PATCH 05/10] =?UTF-8?q?feat(community):=20=EC=BB=A4=EB=AE=A4?= =?UTF-8?q?=EB=8B=88=ED=8B=B0=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=A1=B0=ED=9A=8C=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=EA=B0=92=20=EB=B0=8F=20queryDSL=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CommunityBoardGetResponseDto.java | 12 +++++----- .../repository/CommunityBoardRepository.java | 5 +++-- .../repository/CommunityRepositoryImpl.java | 22 +++++++++++++++---- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/somemore/community/dto/response/CommunityBoardGetResponseDto.java b/src/main/java/com/somemore/community/dto/response/CommunityBoardGetResponseDto.java index 112b59e08..b69ed2e36 100644 --- a/src/main/java/com/somemore/community/dto/response/CommunityBoardGetResponseDto.java +++ b/src/main/java/com/somemore/community/dto/response/CommunityBoardGetResponseDto.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; -import com.somemore.community.domain.CommunityBoard; +import com.somemore.community.domain.CommunityBoardWithNickname; import java.time.LocalDateTime; @@ -13,12 +13,12 @@ public record CommunityBoardGetResponseDto( String writerNickname, LocalDateTime createdAt ) { - public static CommunityBoardGetResponseDto fromEntity(CommunityBoard board, String writerNickname) { + public static CommunityBoardGetResponseDto fromEntity(CommunityBoardWithNickname board) { return new CommunityBoardGetResponseDto( - board.getId(), - board.getTitle(), - writerNickname, - board.getCreatedAt() + board.getCommunityBoard().getId(), + board.getCommunityBoard().getTitle(), + board.getWriterNickname(), + board.getCommunityBoard().getCreatedAt() ); } } diff --git a/src/main/java/com/somemore/community/repository/CommunityBoardRepository.java b/src/main/java/com/somemore/community/repository/CommunityBoardRepository.java index ccb3a9d07..465ba94f8 100644 --- a/src/main/java/com/somemore/community/repository/CommunityBoardRepository.java +++ b/src/main/java/com/somemore/community/repository/CommunityBoardRepository.java @@ -1,6 +1,7 @@ package com.somemore.community.repository; import com.somemore.community.domain.CommunityBoard; +import com.somemore.community.domain.CommunityBoardWithNickname; import java.util.List; import java.util.Optional; @@ -9,7 +10,7 @@ public interface CommunityBoardRepository { CommunityBoard save(CommunityBoard communityBoard); Optional findById(Long id); - List getCommunityBoards(); - List findByWriterId(UUID writerId); + List getCommunityBoards(); + List findByWriterId(UUID writerId); void deleteAllInBatch(); } diff --git a/src/main/java/com/somemore/community/repository/CommunityRepositoryImpl.java b/src/main/java/com/somemore/community/repository/CommunityRepositoryImpl.java index 8393474bc..fac85ef44 100644 --- a/src/main/java/com/somemore/community/repository/CommunityRepositoryImpl.java +++ b/src/main/java/com/somemore/community/repository/CommunityRepositoryImpl.java @@ -1,8 +1,12 @@ package com.somemore.community.repository; +import com.querydsl.core.types.Projections; import com.querydsl.jpa.impl.JPAQueryFactory; import com.somemore.community.domain.CommunityBoard; +import com.somemore.community.domain.CommunityBoardWithNickname; import com.somemore.community.domain.QCommunityBoard; +import com.somemore.community.dto.response.CommunityBoardGetResponseDto; +import com.somemore.volunteer.domain.QVolunteer; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -34,22 +38,32 @@ public Optional findById(Long id) { } @Override - public List getCommunityBoards() { + public List getCommunityBoards() { QCommunityBoard communityBoard = QCommunityBoard.communityBoard; + QVolunteer volunteer = QVolunteer.volunteer; return queryFactory - .selectFrom(communityBoard) + .select(Projections.constructor(CommunityBoardWithNickname.class, + communityBoard, + volunteer.nickname)) + .from(communityBoard) + .join(volunteer).on(communityBoard.writerId.eq(volunteer.id)) .where(communityBoard.deleted.eq(false)) .orderBy(communityBoard.createdAt.desc()) .fetch(); } @Override - public List findByWriterId(UUID writerId) { + public List findByWriterId(UUID writerId) { QCommunityBoard communityBoard = QCommunityBoard.communityBoard; + QVolunteer volunteer = QVolunteer.volunteer; return queryFactory - .selectFrom(communityBoard) + .select(Projections.constructor(CommunityBoardWithNickname.class, + communityBoard, + volunteer.nickname)) + .from(communityBoard) + .join(volunteer).on(communityBoard.writerId.eq(volunteer.id)) .where(communityBoard.writerId.eq(writerId) .and(communityBoard.deleted.eq(false)) ) From cf728c2a393807f9a7687d4b323c9363cc6ee7c5 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Wed, 27 Nov 2024 17:59:26 +0900 Subject: [PATCH 06/10] =?UTF-8?q?feat(community):=20=EC=BB=A4=EB=AE=A4?= =?UTF-8?q?=EB=8B=88=ED=8B=B0=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20=EC=83=81?= =?UTF-8?q?=EC=84=B8=20=EC=A1=B0=ED=9A=8C=20responseDto=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../response/CommunityBoardGetDetailResponseDto.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/somemore/community/dto/response/CommunityBoardGetDetailResponseDto.java b/src/main/java/com/somemore/community/dto/response/CommunityBoardGetDetailResponseDto.java index c14231a3c..b9a0f69f4 100644 --- a/src/main/java/com/somemore/community/dto/response/CommunityBoardGetDetailResponseDto.java +++ b/src/main/java/com/somemore/community/dto/response/CommunityBoardGetDetailResponseDto.java @@ -5,26 +5,27 @@ import com.somemore.community.domain.CommunityBoard; import java.time.LocalDateTime; +import java.util.UUID; @JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class) public record CommunityBoardGetDetailResponseDto( Long id, + UUID writerId, String title, String content, String imageUrl, LocalDateTime createdAt, - LocalDateTime updatedAt, - WriterDetailDto writerDetailDto + LocalDateTime updatedAt ) { - public static CommunityBoardGetDetailResponseDto fromEntity(CommunityBoard board, WriterDetailDto writer) { + public static CommunityBoardGetDetailResponseDto fromEntity(CommunityBoard board) { return new CommunityBoardGetDetailResponseDto( board.getId(), + board.getWriterId(), board.getTitle(), board.getContent(), board.getImgUrl(), board.getCreatedAt(), - board.getUpdatedAt(), - writer + board.getUpdatedAt() ); } } \ No newline at end of file From a04367787e86f8ab73067c3de71e7f06bb571a5b Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Wed, 27 Nov 2024 17:59:58 +0900 Subject: [PATCH 07/10] =?UTF-8?q?feat(community):=20=EC=BB=A4=EB=AE=A4?= =?UTF-8?q?=EB=8B=88=ED=8B=B0=20=EA=B2=8C=EC=8B=9C=EA=B8=80=20query=20serv?= =?UTF-8?q?ice=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CommunityBoardQueryService.java | 39 +++---------------- 1 file changed, 6 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java b/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java index 00aeb74b8..3f8dc65dd 100644 --- a/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java +++ b/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java @@ -2,14 +2,12 @@ import com.somemore.center.usecase.query.CenterQueryUseCase; import com.somemore.community.domain.CommunityBoard; +import com.somemore.community.domain.CommunityBoardWithNickname; import com.somemore.community.dto.response.CommunityBoardGetDetailResponseDto; import com.somemore.community.dto.response.CommunityBoardGetResponseDto; -import com.somemore.community.dto.response.WriterDetailDto; import com.somemore.community.repository.CommunityBoardRepository; import com.somemore.community.usecase.CommunityBoardQueryUseCase; import com.somemore.global.exception.BadRequestException; -import com.somemore.volunteer.dto.response.VolunteerForCommunityResponseDto; -import com.somemore.volunteer.usecase.query.FindVolunteerIdUseCase; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -26,28 +24,22 @@ public class CommunityBoardQueryService implements CommunityBoardQueryUseCase { private final CommunityBoardRepository communityBoardRepository; - private final CenterQueryUseCase centerQueryUseCase; - private final FindVolunteerIdUseCase findVolunteerIdUseCase; @Override public List getCommunityBoards() { - List boards = communityBoardRepository.getCommunityBoards(); + List boards = communityBoardRepository.getCommunityBoards(); return boards.stream() - .map(board -> { - String writerNickname = getWriterNickname(board.getWriterId()); - return CommunityBoardGetResponseDto.fromEntity(board, writerNickname); - }) + .map(CommunityBoardGetResponseDto::fromEntity) .toList(); } @Override public List getCommunityBoardsByWriterId(UUID writerId) { - List boards = communityBoardRepository.findByWriterId(writerId); - String writerNickname = getWriterNickname(writerId); + List boards = communityBoardRepository.findByWriterId(writerId); return boards.stream() - .map(board -> CommunityBoardGetResponseDto.fromEntity(board, writerNickname)) + .map(CommunityBoardGetResponseDto::fromEntity) .toList(); } @@ -55,25 +47,6 @@ public List getCommunityBoardsByWriterId(UUID writ public CommunityBoardGetDetailResponseDto getCommunityBoardDetail(Long id) { CommunityBoard board = communityBoardRepository.findById(id) .orElseThrow(() -> new BadRequestException(NOT_EXISTS_COMMUNITY_BOARD.getMessage())); - - return CommunityBoardGetDetailResponseDto.fromEntity(board, getWriterDetail(board.getWriterId())); - } - - private String getWriterNickname(UUID writerId) { - String nickname = findVolunteerIdUseCase.getNicknameById(writerId); - - if (nickname == null) { - nickname = centerQueryUseCase.getNameById(writerId); - } - return nickname; - } - - private WriterDetailDto getWriterDetail(UUID writerId) { - VolunteerForCommunityResponseDto volunteer = findVolunteerIdUseCase.getVolunteerDetailForCommunity(writerId); - - if (volunteer == null) { - return centerQueryUseCase.getCenterDetailForCommunity(writerId); - } - return volunteer; + return CommunityBoardGetDetailResponseDto.fromEntity(board); } } \ No newline at end of file From eb22bfdc928487aa8c7fd0768f9ed62a05da96f9 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Wed, 27 Nov 2024 18:12:07 +0900 Subject: [PATCH 08/10] =?UTF-8?q?chore:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20import=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/somemore/center/repository/CenterRepositoryImpl.java | 2 -- .../somemore/community/repository/CommunityRepositoryImpl.java | 1 - .../somemore/community/service/CommunityBoardQueryService.java | 1 - .../somemore/volunteer/repository/VolunteerJpaRepository.java | 1 - 4 files changed, 5 deletions(-) diff --git a/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java b/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java index 4cabb71a7..939e23675 100644 --- a/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java +++ b/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java @@ -2,7 +2,6 @@ import com.querydsl.jpa.impl.JPAQueryFactory; import com.somemore.center.domain.Center; -import com.somemore.center.domain.QCenter; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -14,7 +13,6 @@ public class CenterRepositoryImpl implements CenterRepository { private final CenterJpaRepository centerJpaRepository; - private final JPAQueryFactory queryFactory; @Override public Center save(Center center) { diff --git a/src/main/java/com/somemore/community/repository/CommunityRepositoryImpl.java b/src/main/java/com/somemore/community/repository/CommunityRepositoryImpl.java index fac85ef44..296e9d351 100644 --- a/src/main/java/com/somemore/community/repository/CommunityRepositoryImpl.java +++ b/src/main/java/com/somemore/community/repository/CommunityRepositoryImpl.java @@ -5,7 +5,6 @@ import com.somemore.community.domain.CommunityBoard; import com.somemore.community.domain.CommunityBoardWithNickname; import com.somemore.community.domain.QCommunityBoard; -import com.somemore.community.dto.response.CommunityBoardGetResponseDto; import com.somemore.volunteer.domain.QVolunteer; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java b/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java index 3f8dc65dd..850a0579d 100644 --- a/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java +++ b/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java @@ -1,6 +1,5 @@ package com.somemore.community.service; -import com.somemore.center.usecase.query.CenterQueryUseCase; import com.somemore.community.domain.CommunityBoard; import com.somemore.community.domain.CommunityBoardWithNickname; import com.somemore.community.dto.response.CommunityBoardGetDetailResponseDto; diff --git a/src/main/java/com/somemore/volunteer/repository/VolunteerJpaRepository.java b/src/main/java/com/somemore/volunteer/repository/VolunteerJpaRepository.java index 01272d276..f7261b45d 100644 --- a/src/main/java/com/somemore/volunteer/repository/VolunteerJpaRepository.java +++ b/src/main/java/com/somemore/volunteer/repository/VolunteerJpaRepository.java @@ -4,7 +4,6 @@ import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; -import java.util.UUID; public interface VolunteerJpaRepository extends JpaRepository { Optional findByOauthId(String oauthId); From 653033bd43e7d23f6673f363bca2cd20da123c31 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Wed, 27 Nov 2024 18:15:20 +0900 Subject: [PATCH 09/10] =?UTF-8?q?chore:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20import=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/somemore/center/repository/CenterRepositoryImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java b/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java index 939e23675..67224b14f 100644 --- a/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java +++ b/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java @@ -1,6 +1,5 @@ package com.somemore.center.repository; -import com.querydsl.jpa.impl.JPAQueryFactory; import com.somemore.center.domain.Center; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; From c8ccff0d412a204b793a056f45bffb2e382c0748 Mon Sep 17 00:00:00 2001 From: ayoung-dev Date: Thu, 28 Nov 2024 00:46:24 +0900 Subject: [PATCH 10/10] =?UTF-8?q?fix:=20CoummunityBoardView=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - entity -> dto 메서드 추출 - CommunityBoardView record로 변경 - CommunityBoard 조회 쿼리 추출 --- .../community/domain/CommunityBoardView.java | 6 +++ .../domain/CommunityBoardWithNickname.java | 11 ------ .../CommunityBoardGetResponseDto.java | 12 +++--- .../repository/CommunityBoardRepository.java | 6 +-- .../repository/CommunityRepositoryImpl.java | 36 ++++++++---------- .../service/CommunityBoardQueryService.java | 26 ++++++------- .../repository/CommunityRepositoryTest.java | 38 +++++++++---------- .../CommunityBoardQueryServiceTest.java | 4 +- 8 files changed, 65 insertions(+), 74 deletions(-) create mode 100644 src/main/java/com/somemore/community/domain/CommunityBoardView.java delete mode 100644 src/main/java/com/somemore/community/domain/CommunityBoardWithNickname.java diff --git a/src/main/java/com/somemore/community/domain/CommunityBoardView.java b/src/main/java/com/somemore/community/domain/CommunityBoardView.java new file mode 100644 index 000000000..01cbd31a9 --- /dev/null +++ b/src/main/java/com/somemore/community/domain/CommunityBoardView.java @@ -0,0 +1,6 @@ +package com.somemore.community.domain; + +public record CommunityBoardView( + CommunityBoard communityBoard, + String writerNickname) { +} diff --git a/src/main/java/com/somemore/community/domain/CommunityBoardWithNickname.java b/src/main/java/com/somemore/community/domain/CommunityBoardWithNickname.java deleted file mode 100644 index 30e6d35ea..000000000 --- a/src/main/java/com/somemore/community/domain/CommunityBoardWithNickname.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.somemore.community.domain; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; - -@Getter -@RequiredArgsConstructor -public class CommunityBoardWithNickname { - private final CommunityBoard communityBoard; - private final String writerNickname; -} diff --git a/src/main/java/com/somemore/community/dto/response/CommunityBoardGetResponseDto.java b/src/main/java/com/somemore/community/dto/response/CommunityBoardGetResponseDto.java index b69ed2e36..30f5400c8 100644 --- a/src/main/java/com/somemore/community/dto/response/CommunityBoardGetResponseDto.java +++ b/src/main/java/com/somemore/community/dto/response/CommunityBoardGetResponseDto.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy; import com.fasterxml.jackson.databind.annotation.JsonNaming; -import com.somemore.community.domain.CommunityBoardWithNickname; +import com.somemore.community.domain.CommunityBoardView; import java.time.LocalDateTime; @@ -13,12 +13,12 @@ public record CommunityBoardGetResponseDto( String writerNickname, LocalDateTime createdAt ) { - public static CommunityBoardGetResponseDto fromEntity(CommunityBoardWithNickname board) { + public static CommunityBoardGetResponseDto fromEntity(CommunityBoardView board) { return new CommunityBoardGetResponseDto( - board.getCommunityBoard().getId(), - board.getCommunityBoard().getTitle(), - board.getWriterNickname(), - board.getCommunityBoard().getCreatedAt() + board.communityBoard().getId(), + board.communityBoard().getTitle(), + board.writerNickname(), + board.communityBoard().getCreatedAt() ); } } diff --git a/src/main/java/com/somemore/community/repository/CommunityBoardRepository.java b/src/main/java/com/somemore/community/repository/CommunityBoardRepository.java index 465ba94f8..f7df7bbd5 100644 --- a/src/main/java/com/somemore/community/repository/CommunityBoardRepository.java +++ b/src/main/java/com/somemore/community/repository/CommunityBoardRepository.java @@ -1,7 +1,7 @@ package com.somemore.community.repository; import com.somemore.community.domain.CommunityBoard; -import com.somemore.community.domain.CommunityBoardWithNickname; +import com.somemore.community.domain.CommunityBoardView; import java.util.List; import java.util.Optional; @@ -10,7 +10,7 @@ public interface CommunityBoardRepository { CommunityBoard save(CommunityBoard communityBoard); Optional findById(Long id); - List getCommunityBoards(); - List findByWriterId(UUID writerId); + List getCommunityBoards(); + List findByWriterId(UUID writerId); void deleteAllInBatch(); } diff --git a/src/main/java/com/somemore/community/repository/CommunityRepositoryImpl.java b/src/main/java/com/somemore/community/repository/CommunityRepositoryImpl.java index 296e9d351..26ec5360e 100644 --- a/src/main/java/com/somemore/community/repository/CommunityRepositoryImpl.java +++ b/src/main/java/com/somemore/community/repository/CommunityRepositoryImpl.java @@ -1,9 +1,10 @@ package com.somemore.community.repository; import com.querydsl.core.types.Projections; +import com.querydsl.jpa.impl.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import com.somemore.community.domain.CommunityBoard; -import com.somemore.community.domain.CommunityBoardWithNickname; +import com.somemore.community.domain.CommunityBoardView; import com.somemore.community.domain.QCommunityBoard; import com.somemore.volunteer.domain.QVolunteer; import lombok.RequiredArgsConstructor; @@ -37,39 +38,34 @@ public Optional findById(Long id) { } @Override - public List getCommunityBoards() { - QCommunityBoard communityBoard = QCommunityBoard.communityBoard; - QVolunteer volunteer = QVolunteer.volunteer; - - return queryFactory - .select(Projections.constructor(CommunityBoardWithNickname.class, - communityBoard, - volunteer.nickname)) - .from(communityBoard) - .join(volunteer).on(communityBoard.writerId.eq(volunteer.id)) - .where(communityBoard.deleted.eq(false)) - .orderBy(communityBoard.createdAt.desc()) + public List getCommunityBoards() { + return getCommunityBoardsQuery() + .where(QCommunityBoard.communityBoard.deleted.eq(false)) .fetch(); } @Override - public List findByWriterId(UUID writerId) { + public List findByWriterId(UUID writerId) { + return getCommunityBoardsQuery() + .where(QCommunityBoard.communityBoard.writerId.eq(writerId) + .and(QCommunityBoard.communityBoard.deleted.eq(false))) + .fetch(); + } + + private JPAQuery getCommunityBoardsQuery() { QCommunityBoard communityBoard = QCommunityBoard.communityBoard; QVolunteer volunteer = QVolunteer.volunteer; return queryFactory - .select(Projections.constructor(CommunityBoardWithNickname.class, + .select(Projections.constructor(CommunityBoardView.class, communityBoard, volunteer.nickname)) .from(communityBoard) .join(volunteer).on(communityBoard.writerId.eq(volunteer.id)) - .where(communityBoard.writerId.eq(writerId) - .and(communityBoard.deleted.eq(false)) - ) - .orderBy(communityBoard.createdAt.desc()) - .fetch(); + .orderBy(communityBoard.createdAt.desc()); } + @Override public void deleteAllInBatch() { communityBoardJpaRepository.deleteAllInBatch(); diff --git a/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java b/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java index 850a0579d..e451949ff 100644 --- a/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java +++ b/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java @@ -1,7 +1,7 @@ package com.somemore.community.service; import com.somemore.community.domain.CommunityBoard; -import com.somemore.community.domain.CommunityBoardWithNickname; +import com.somemore.community.domain.CommunityBoardView; import com.somemore.community.dto.response.CommunityBoardGetDetailResponseDto; import com.somemore.community.dto.response.CommunityBoardGetResponseDto; import com.somemore.community.repository.CommunityBoardRepository; @@ -13,10 +13,10 @@ import java.util.List; import java.util.UUID; +import java.util.function.Function; import static com.somemore.global.exception.ExceptionMessage.NOT_EXISTS_COMMUNITY_BOARD; - @RequiredArgsConstructor @Transactional(readOnly = true) @Service @@ -26,20 +26,14 @@ public class CommunityBoardQueryService implements CommunityBoardQueryUseCase { @Override public List getCommunityBoards() { - List boards = communityBoardRepository.getCommunityBoards(); - - return boards.stream() - .map(CommunityBoardGetResponseDto::fromEntity) - .toList(); + List boards = communityBoardRepository.getCommunityBoards(); + return mapEntitiesToDtos(boards, CommunityBoardGetResponseDto::fromEntity); } @Override public List getCommunityBoardsByWriterId(UUID writerId) { - List boards = communityBoardRepository.findByWriterId(writerId); - - return boards.stream() - .map(CommunityBoardGetResponseDto::fromEntity) - .toList(); + List boards = communityBoardRepository.findByWriterId(writerId); + return mapEntitiesToDtos(boards, CommunityBoardGetResponseDto::fromEntity); } @Override @@ -48,4 +42,10 @@ public CommunityBoardGetDetailResponseDto getCommunityBoardDetail(Long id) { .orElseThrow(() -> new BadRequestException(NOT_EXISTS_COMMUNITY_BOARD.getMessage())); return CommunityBoardGetDetailResponseDto.fromEntity(board); } -} \ No newline at end of file + + private List mapEntitiesToDtos(List entities, Function mapper) { + return entities.stream() + .map(mapper) + .toList(); + } +} diff --git a/src/test/java/com/somemore/community/repository/CommunityRepositoryTest.java b/src/test/java/com/somemore/community/repository/CommunityRepositoryTest.java index c322fcd8a..f39083074 100644 --- a/src/test/java/com/somemore/community/repository/CommunityRepositoryTest.java +++ b/src/test/java/com/somemore/community/repository/CommunityRepositoryTest.java @@ -3,7 +3,7 @@ import com.somemore.IntegrationTestSupport; import com.somemore.auth.oauth.OAuthProvider; import com.somemore.community.domain.CommunityBoard; -import com.somemore.community.domain.CommunityBoardWithNickname; +import com.somemore.community.domain.CommunityBoardView; import com.somemore.volunteer.domain.Volunteer; import com.somemore.volunteer.repository.VolunteerRepository; import org.junit.jupiter.api.DisplayName; @@ -96,18 +96,18 @@ void getCommunityBoards() { communityBoardRepository.save(communityBoard2); //when - List communityBoards = communityBoardRepository.getCommunityBoards(); + List communityBoards = communityBoardRepository.getCommunityBoards(); //then assertThat(communityBoards).hasSize(2); - assertThat(communityBoards.getFirst().getCommunityBoard().getId()).isEqualTo(communityBoard2.getId()); - assertThat(communityBoards.getFirst().getCommunityBoard().getTitle()).isEqualTo(communityBoard2.getTitle()); - assertThat(communityBoards.getFirst().getWriterNickname()).isEqualTo(volunteer.getNickname()); - assertThat(communityBoards.getFirst().getCommunityBoard().getCreatedAt()).isEqualTo(communityBoard2.getCreatedAt()); - assertThat(communityBoards.getLast().getCommunityBoard().getId()).isEqualTo(communityBoard1.getId()); - assertThat(communityBoards.getLast().getCommunityBoard().getTitle()).isEqualTo(communityBoard1.getTitle()); - assertThat(communityBoards.getLast().getWriterNickname()).isEqualTo(volunteer.getNickname()); - assertThat(communityBoards.getLast().getCommunityBoard().getCreatedAt()).isEqualTo(communityBoard1.getCreatedAt()); + assertThat(communityBoards.getFirst().communityBoard().getId()).isEqualTo(communityBoard2.getId()); + assertThat(communityBoards.getFirst().communityBoard().getTitle()).isEqualTo(communityBoard2.getTitle()); + assertThat(communityBoards.getFirst().writerNickname()).isEqualTo(volunteer.getNickname()); + assertThat(communityBoards.getFirst().communityBoard().getCreatedAt()).isEqualTo(communityBoard2.getCreatedAt()); + assertThat(communityBoards.getLast().communityBoard().getId()).isEqualTo(communityBoard1.getId()); + assertThat(communityBoards.getLast().communityBoard().getTitle()).isEqualTo(communityBoard1.getTitle()); + assertThat(communityBoards.getLast().writerNickname()).isEqualTo(volunteer.getNickname()); + assertThat(communityBoards.getLast().communityBoard().getCreatedAt()).isEqualTo(communityBoard1.getCreatedAt()); } @DisplayName("저장된 커뮤니티 게시글 리스트를 작성자별로 조회할 수 있다. (Repository)") @@ -144,17 +144,17 @@ void getCommunityBoardsByWriterId() { communityBoardRepository.save(communityBoard3); //when - List communityBoards = communityBoardRepository.findByWriterId(volunteer.getId()); + List communityBoards = communityBoardRepository.findByWriterId(volunteer.getId()); //then assertThat(communityBoards).hasSize(2); - assertThat(communityBoards.getFirst().getCommunityBoard().getId()).isEqualTo(communityBoard2.getId()); - assertThat(communityBoards.getFirst().getCommunityBoard().getTitle()).isEqualTo(communityBoard2.getTitle()); - assertThat(communityBoards.getFirst().getWriterNickname()).isEqualTo(volunteer.getNickname()); - assertThat(communityBoards.getFirst().getCommunityBoard().getCreatedAt()).isEqualTo(communityBoard2.getCreatedAt()); - assertThat(communityBoards.getLast().getCommunityBoard().getId()).isEqualTo(communityBoard1.getId()); - assertThat(communityBoards.getLast().getCommunityBoard().getTitle()).isEqualTo(communityBoard1.getTitle()); - assertThat(communityBoards.getLast().getWriterNickname()).isEqualTo(volunteer.getNickname()); - assertThat(communityBoards.getLast().getCommunityBoard().getCreatedAt()).isEqualTo(communityBoard1.getCreatedAt()); + assertThat(communityBoards.getFirst().communityBoard().getId()).isEqualTo(communityBoard2.getId()); + assertThat(communityBoards.getFirst().communityBoard().getTitle()).isEqualTo(communityBoard2.getTitle()); + assertThat(communityBoards.getFirst().writerNickname()).isEqualTo(volunteer.getNickname()); + assertThat(communityBoards.getFirst().communityBoard().getCreatedAt()).isEqualTo(communityBoard2.getCreatedAt()); + assertThat(communityBoards.getLast().communityBoard().getId()).isEqualTo(communityBoard1.getId()); + assertThat(communityBoards.getLast().communityBoard().getTitle()).isEqualTo(communityBoard1.getTitle()); + assertThat(communityBoards.getLast().writerNickname()).isEqualTo(volunteer.getNickname()); + assertThat(communityBoards.getLast().communityBoard().getCreatedAt()).isEqualTo(communityBoard1.getCreatedAt()); } } diff --git a/src/test/java/com/somemore/community/service/CommunityBoardQueryServiceTest.java b/src/test/java/com/somemore/community/service/CommunityBoardQueryServiceTest.java index 7f4a508ef..3d82d4281 100644 --- a/src/test/java/com/somemore/community/service/CommunityBoardQueryServiceTest.java +++ b/src/test/java/com/somemore/community/service/CommunityBoardQueryServiceTest.java @@ -43,7 +43,7 @@ class CommunityBoardQueryServiceTest extends IntegrationTestSupport { @Autowired CommunityBoardQueryService communityBoardQueryService; - private UUID writerId1, writerId2; + private UUID writerId1; private Long communityId1, communityId2; private String imgUrl, nickName1, nickName2; @@ -70,7 +70,7 @@ void setUp() { volunteerRepository.save(volunteer2); writerId1 = volunteer.getId(); - writerId2 = volunteer2.getId(); + UUID writerId2 = volunteer2.getId(); nickName1 = volunteer.getNickname(); nickName2 = volunteer2.getNickname(); imgUrl = "https://image.test.url/123";