Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public record WebsiteClubDetailResponse(
Recruitment recruitment
) {

@Schema(name = "WebsiteClubDetailUniversityResponse")
public record University(
@Schema(description = "대학 고유 ID", example = "1", requiredMode = REQUIRED)
Integer id,
Expand All @@ -59,7 +60,17 @@ public record University(
UniversityRegion region,

@Schema(description = "지역명", example = "충청도", requiredMode = REQUIRED)
String regionName
String regionName,

@Schema(
description = "대학 로고 이미지 URL",
example = "https://example.com/koreatech-logo.png",
requiredMode = REQUIRED
)
String imageUrl,
Comment thread
dh2906 marked this conversation as resolved.

@Schema(description = "대학에 등록된 동아리 수", example = "28", requiredMode = REQUIRED)
Long clubCount
) {
}

Expand Down Expand Up @@ -95,7 +106,7 @@ private static Recruitment from(Club club) {
}
}

public static WebsiteClubDetailResponse of(Club club, Long memberCount) {
public static WebsiteClubDetailResponse of(Club club, Long memberCount, Long universityClubCount) {
return new WebsiteClubDetailResponse(
club.getId(),
club.getName(),
Expand All @@ -111,7 +122,9 @@ public static WebsiteClubDetailResponse of(Club club, Long memberCount) {
club.getUniversity().getKoreanName(),
club.getUniversity().getCampus().getDisplayName(),
club.getUniversity().getRegion(),
club.getUniversity().getRegion().getDisplayName()
club.getUniversity().getRegion().getDisplayName(),
club.getUniversity().getImageUrl(),
universityClubCount
),
Recruitment.from(club)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,16 @@ public Map<ClubCategory, Long> countClubCategories(Integer universityId, String
return categoryCounts;
}

public Long countClubsByUniversityId(Integer universityId) {
Long count = jpaQueryFactory
.select(club.count())
.from(club)
.where(createClubCondition(universityId, null, null))
.fetchOne();
Comment thread
coderabbitai[bot] marked this conversation as resolved.

return count == null ? 0 : count;
}

public Optional<Club> findClub(Integer clubId) {
return Optional.ofNullable(jpaQueryFactory
.selectFrom(club)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,9 @@ public WebsiteClubDetailResponse getClubDetail(Integer clubId) {
Club club = websiteQueryRepository.findClub(clubId)
.orElseThrow(() -> CustomException.of(NOT_FOUND_CLUB));
Long memberCount = websiteQueryRepository.countMembersByClubIds(List.of(clubId)).getOrDefault(clubId, 0L);
Long universityClubCount = websiteQueryRepository.countClubsByUniversityId(club.getUniversity().getId());

return WebsiteClubDetailResponse.of(club, memberCount);
return WebsiteClubDetailResponse.of(club, memberCount, universityClubCount);
}

public WebsiteClubsResponse getRecentClubs(List<Integer> clubIds) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,9 +126,11 @@ void getClubDetailSuccess() throws Exception {
University university = persist(UniversityFixture.create(
"한국기술교육대학교",
Campus.MAIN,
UniversityRegion.CHUNGCHEONG
UniversityRegion.CHUNGCHEONG,
"https://example.com/koreatech-logo.png"
));
Club club = persist(createClub(university, "ZEST", ClubCategory.PERFORMANCE));
persist(createClub(university, "BCSD Lab", ClubCategory.ACADEMIC));
persist(ClubRecruitmentFixture.createAlwaysRecruiting(club));
persistMember(club, "회장", "2024000004");
clearPersistenceContext();
Expand All @@ -140,6 +142,8 @@ void getClubDetailSuccess() throws Exception {
.andExpect(jsonPath("$.categoryName").value("공연"))
.andExpect(jsonPath("$.university.name").value("한국기술교육대학교"))
.andExpect(jsonPath("$.university.region").value("CHUNGCHEONG"))
.andExpect(jsonPath("$.university.imageUrl").value("https://example.com/koreatech-logo.png"))
.andExpect(jsonPath("$.university.clubCount").value(2))
.andExpect(jsonPath("$.memberCount").value(1))
.andExpect(jsonPath("$.recruitment.isAlwaysRecruiting").value(true))
.andExpect(jsonPath("$.recruitment.content").value("상시 모집 공고 내용입니다."));
Expand Down
Loading