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,

@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();

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