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..67224b14f 100644 --- a/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java +++ b/src/main/java/com/somemore/center/repository/CenterRepositoryImpl.java @@ -1,8 +1,6 @@ package com.somemore.center.repository; -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 +12,6 @@ public class CenterRepositoryImpl implements CenterRepository { private final CenterJpaRepository centerJpaRepository; - private final JPAQueryFactory queryFactory; @Override public Center save(Center center) { @@ -31,17 +28,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/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/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 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..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.CommunityBoard; +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(CommunityBoard board, String writerNickname) { + public static CommunityBoardGetResponseDto fromEntity(CommunityBoardView board) { return new CommunityBoardGetResponseDto( - board.getId(), - board.getTitle(), - writerNickname, - board.getCreatedAt() + board.communityBoard().getId(), + board.communityBoard().getTitle(), + board.writerNickname(), + board.communityBoard().getCreatedAt() ); } } 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/community/repository/CommunityBoardRepository.java b/src/main/java/com/somemore/community/repository/CommunityBoardRepository.java index ccb3a9d07..f7df7bbd5 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.CommunityBoardView; 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..26ec5360e 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.JPAQuery; import com.querydsl.jpa.impl.JPAQueryFactory; import com.somemore.community.domain.CommunityBoard; +import com.somemore.community.domain.CommunityBoardView; import com.somemore.community.domain.QCommunityBoard; +import com.somemore.volunteer.domain.QVolunteer; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Repository; @@ -34,29 +38,34 @@ public Optional findById(Long id) { } @Override - public List getCommunityBoards() { - QCommunityBoard communityBoard = QCommunityBoard.communityBoard; - - return queryFactory - .selectFrom(communityBoard) - .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 - .selectFrom(communityBoard) - .where(communityBoard.writerId.eq(writerId) - .and(communityBoard.deleted.eq(false)) - ) - .orderBy(communityBoard.createdAt.desc()) - .fetch(); + .select(Projections.constructor(CommunityBoardView.class, + communityBoard, + volunteer.nickname)) + .from(communityBoard) + .join(volunteer).on(communityBoard.writerId.eq(volunteer.id)) + .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 aca97f3f7..e451949ff 100644 --- a/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java +++ b/src/main/java/com/somemore/community/service/CommunityBoardQueryService.java @@ -1,79 +1,51 @@ package com.somemore.community.service; -import com.somemore.center.usecase.query.CenterQueryUseCase; import com.somemore.community.domain.CommunityBoard; +import com.somemore.community.domain.CommunityBoardView; 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.FindVolunteerIdUseCase; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; 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 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(); - - return boards.stream() - .map(board -> { - String writerNickname = getWriterNickname(board.getWriterId()); - return CommunityBoardGetResponseDto.fromEntity(board, writerNickname); - }) - .toList(); + List boards = communityBoardRepository.getCommunityBoards(); + return mapEntitiesToDtos(boards, CommunityBoardGetResponseDto::fromEntity); } @Override public List getCommunityBoardsByWriterId(UUID writerId) { - List boards = communityBoardRepository.findByWriterId(writerId); - String writerNickname = getWriterNickname(writerId); - - return boards.stream() - .map(board -> CommunityBoardGetResponseDto.fromEntity(board, writerNickname)) - .toList(); + List boards = communityBoardRepository.findByWriterId(writerId); + return mapEntitiesToDtos(boards, CommunityBoardGetResponseDto::fromEntity); } @Override 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())); + return CommunityBoardGetDetailResponseDto.fromEntity(board); } - 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; + private List mapEntitiesToDtos(List entities, Function mapper) { + return entities.stream() + .map(mapper) + .toList(); } -} \ No newline at end of file +} 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..f7261b45d 100644 --- a/src/main/java/com/somemore/volunteer/repository/VolunteerJpaRepository.java +++ b/src/main/java/com/somemore/volunteer/repository/VolunteerJpaRepository.java @@ -4,9 +4,7 @@ import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; -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/FindVolunteerIdService.java b/src/main/java/com/somemore/volunteer/service/FindVolunteerIdService.java index 7825aa367..eab4b0d2b 100644 --- a/src/main/java/com/somemore/volunteer/service/FindVolunteerIdService.java +++ b/src/main/java/com/somemore/volunteer/service/FindVolunteerIdService.java @@ -1,7 +1,5 @@ package com.somemore.volunteer.service; -import com.somemore.volunteer.domain.Volunteer; -import com.somemore.volunteer.dto.response.VolunteerForCommunityResponseDto; import com.somemore.volunteer.repository.VolunteerRepository; import com.somemore.volunteer.usecase.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/FindVolunteerIdUseCase.java b/src/main/java/com/somemore/volunteer/usecase/FindVolunteerIdUseCase.java index e23eaa20f..47050b561 100644 --- a/src/main/java/com/somemore/volunteer/usecase/FindVolunteerIdUseCase.java +++ b/src/main/java/com/somemore/volunteer/usecase/FindVolunteerIdUseCase.java @@ -1,11 +1,8 @@ package com.somemore.volunteer.usecase; -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); } 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("기본 기관 이름"); - - } - } diff --git a/src/test/java/com/somemore/community/repository/CommunityRepositoryTest.java b/src/test/java/com/somemore/community/repository/CommunityRepositoryTest.java index b908f2db8..f39083074 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.CommunityBoardView; +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().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)") @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().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 0f3aaf55a..3d82d4281 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; + 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(); + UUID 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)