Skip to content

Commit 6134620

Browse files
authored
feat: community-board 조회 기능 (#45)
* test(community): communityBoard 조회 기능 테스트 작성 - 커뮤니티 게시글 목록 조회 - 커뮤니티 게시글 목록 사용자별 조회 - 커뮤니티 게시글 상세 조회 * test(center): center 이름 조회 기능 테스트 작성 * test(volunteer): volunteer 닉네임 조회 기능 테스트 작성 * feat(community): communityBoard 조회 responseDto 생성 * feat(community): communityBoard Query Usecase 및 Service 생성 * feat(community): communityBoard Repository 구조 변경 및 조회 기능 추가 * feat(center): 커뮤니티 조회에 사용할 ResponseDto 생성 * feat(center): center Query Usecase 및 Service에 center 정보 조회 기능 추가 * feat(center): center Repository 구조 변경 및 조회 기능 추가 * feat(volunteer): 커뮤니티 조회에 사용할 ResponseDto 생성 * feat(volunteer): volunteer Query Usecase 및 Service에 volunteer 정보 조회 기능 추가 * feat(volunteer): volunteer Repository 구조 변경 및 조회 기능 추가 * feat(community): community 예외 메시지 추가 * fix(community): sonarqube 이슈 사항 반영 * refactor(community): 코드 리뷰 사항 반영 - repository 테스트 usecase 주입 - getWriterDetail 메서드 else문 삭제
1 parent 21e76f5 commit 6134620

27 files changed

+886
-10
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.somemore.center.dto.response;
2+
3+
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
4+
import com.fasterxml.jackson.databind.annotation.JsonNaming;
5+
import com.somemore.center.domain.Center;
6+
import com.somemore.community.dto.response.WriterDetailDto;
7+
import com.somemore.volunteer.domain.Tier;
8+
9+
import java.util.UUID;
10+
11+
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
12+
public record CenterForCommunityResponseDto(
13+
UUID id,
14+
String name,
15+
String imgUrl,
16+
Tier tier
17+
) implements WriterDetailDto {
18+
19+
public static CenterForCommunityResponseDto fromEntity(Center center) {
20+
return new CenterForCommunityResponseDto(
21+
center.getId(),
22+
center.getName(),
23+
center.getImgUrl(),
24+
null
25+
);
26+
}
27+
}
28+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.somemore.center.repository;
2+
3+
import com.somemore.center.domain.Center;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
import java.util.Optional;
7+
import java.util.UUID;
8+
9+
public interface CenterJpaRepository extends JpaRepository<Center, Long> {
10+
boolean existsById(UUID id);
11+
Optional<Center> findCenterById(UUID id);
12+
}
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
package com.somemore.center.repository;
22

33
import com.somemore.center.domain.Center;
4-
import org.springframework.data.jpa.repository.JpaRepository;
54
import org.springframework.stereotype.Repository;
65

76
import java.util.Optional;
87
import java.util.UUID;
98

109
@Repository
11-
public interface CenterRepository extends JpaRepository<Center, UUID> {
12-
10+
public interface CenterRepository {
11+
Center save(Center center);
1312
boolean existsById(UUID id);
14-
1513
default boolean doesNotExistById(UUID id) {
1614
return !existsById(id);
1715
}
18-
1916
Optional<Center> findCenterById(UUID id);
17+
String findNameById(UUID id);
18+
void deleteAllInBatch();
2019
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.somemore.center.repository;
2+
3+
import com.querydsl.jpa.impl.JPAQueryFactory;
4+
import com.somemore.center.domain.Center;
5+
import com.somemore.center.domain.QCenter;
6+
import lombok.RequiredArgsConstructor;
7+
import org.springframework.stereotype.Repository;
8+
9+
import java.util.Optional;
10+
import java.util.UUID;
11+
12+
@RequiredArgsConstructor
13+
@Repository
14+
public class CenterRepositoryImpl implements CenterRepository {
15+
16+
private final CenterJpaRepository centerJpaRepository;
17+
private final JPAQueryFactory queryFactory;
18+
19+
@Override
20+
public Center save(Center center) {
21+
return centerJpaRepository.save(center);
22+
}
23+
24+
@Override
25+
public boolean existsById(UUID id) {
26+
return centerJpaRepository.existsById(id);
27+
}
28+
29+
@Override
30+
public Optional<Center> findCenterById(UUID id) {
31+
return centerJpaRepository.findCenterById(id);
32+
}
33+
34+
@Override
35+
public String findNameById(UUID id) {
36+
QCenter center = QCenter.center;
37+
38+
return queryFactory
39+
.select(center.name)
40+
.from(center)
41+
.where(center.id.eq(id))
42+
.fetchOne();
43+
}
44+
45+
@Override
46+
public void deleteAllInBatch() {
47+
centerJpaRepository.deleteAllInBatch();
48+
}
49+
}

src/main/java/com/somemore/center/service/query/CenterQueryService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.somemore.center.service.query;
22

33
import com.somemore.center.domain.Center;
4+
import com.somemore.center.dto.response.CenterForCommunityResponseDto;
45
import com.somemore.center.dto.response.CenterProfileResponseDto;
56
import com.somemore.center.dto.response.PreferItemResponseDto;
67
import com.somemore.center.repository.CenterRepository;
@@ -45,4 +46,14 @@ private Center getCenterById(UUID centerId) {
4546
.orElseThrow(() -> new BadRequestException(NOT_EXISTS_CENTER.getMessage()));
4647
}
4748

49+
@Override
50+
public String getNameById(UUID id) {
51+
return centerRepository.findNameById(id);
52+
}
53+
54+
@Override
55+
public CenterForCommunityResponseDto getCenterDetailForCommunity(UUID id) {
56+
Center center = getCenterById(id);
57+
return CenterForCommunityResponseDto.fromEntity(center);
58+
}
4859
}

src/main/java/com/somemore/center/usecase/query/CenterQueryUseCase.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.somemore.center.usecase.query;
22

3+
import com.somemore.center.dto.response.CenterForCommunityResponseDto;
34
import com.somemore.center.dto.response.CenterProfileResponseDto;
45

56
import java.util.UUID;
@@ -8,4 +9,6 @@ public interface CenterQueryUseCase {
89

910
CenterProfileResponseDto getCenterProfileByCenterId(UUID centerId);
1011
void validateCenterExists(UUID centerId);
12+
String getNameById(UUID id);
13+
CenterForCommunityResponseDto getCenterDetailForCommunity(UUID id);
1114
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.somemore.community.dto.response;
2+
3+
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
4+
import com.fasterxml.jackson.databind.annotation.JsonNaming;
5+
import com.somemore.community.domain.CommunityBoard;
6+
7+
import java.time.LocalDateTime;
8+
9+
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
10+
public record CommunityBoardGetDetailResponseDto(
11+
Long id,
12+
String title,
13+
String content,
14+
String imageUrl,
15+
LocalDateTime createdAt,
16+
LocalDateTime updatedAt,
17+
WriterDetailDto writerDetailDto
18+
) {
19+
public static CommunityBoardGetDetailResponseDto fromEntity(CommunityBoard board, WriterDetailDto writer) {
20+
return new CommunityBoardGetDetailResponseDto(
21+
board.getId(),
22+
board.getTitle(),
23+
board.getContent(),
24+
board.getImgUrl(),
25+
board.getCreatedAt(),
26+
board.getUpdatedAt(),
27+
writer
28+
);
29+
}
30+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.somemore.community.dto.response;
2+
3+
import com.fasterxml.jackson.databind.PropertyNamingStrategies.SnakeCaseStrategy;
4+
import com.fasterxml.jackson.databind.annotation.JsonNaming;
5+
import com.somemore.community.domain.CommunityBoard;
6+
7+
import java.time.LocalDateTime;
8+
9+
@JsonNaming(SnakeCaseStrategy.class)
10+
public record CommunityBoardGetResponseDto(
11+
Long id,
12+
String title,
13+
String writerNickname,
14+
LocalDateTime createdAt
15+
) {
16+
public static CommunityBoardGetResponseDto fromEntity(CommunityBoard board, String writerNickname) {
17+
return new CommunityBoardGetResponseDto(
18+
board.getId(),
19+
board.getTitle(),
20+
writerNickname,
21+
board.getCreatedAt()
22+
);
23+
}
24+
}
25+
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.somemore.community.dto.response;
2+
3+
import com.somemore.volunteer.domain.Tier;
4+
5+
import java.util.UUID;
6+
7+
public interface WriterDetailDto {
8+
UUID id();
9+
String name();
10+
String imgUrl();
11+
Tier tier();
12+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.somemore.community.repository;
2+
3+
import com.somemore.community.domain.CommunityBoard;
4+
import org.springframework.data.jpa.repository.JpaRepository;
5+
6+
public interface CommunityBoardJpaRepository extends JpaRepository<CommunityBoard, Long> {
7+
}

0 commit comments

Comments
 (0)