Skip to content

Commit 7be8fa4

Browse files
authored
Merge pull request #39 from SMUNION/feat/38
✨ feat: 동아리 세부 내역 조회 API 추가
2 parents 8c065bc + eea7773 commit 7be8fa4

File tree

6 files changed

+145
-0
lines changed

6 files changed

+145
-0
lines changed

src/main/java/com/project/smunionbe/domain/club/controller/ClubController.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,23 @@ public CustomResponse<ClubResDTO.GetMemberClubListResDTO> getAllMemberClub(
9696
return CustomResponse.onSuccess(response);
9797

9898
}
99+
100+
@GetMapping("/detail")
101+
@Operation(
102+
summary = "동아리 상세 조회 API",
103+
description = "동아리의 전체적인 정보를 조회하는 API 입니다."
104+
)
105+
public CustomResponse<ClubResDTO.ClubDetailResDTO> getClubDetail(
106+
@AuthenticationPrincipal CustomUserDetails auth,
107+
HttpSession session
108+
) {
109+
110+
Long selectedMemberClubId = clubSelectionService.getSelectedProfile(session, auth.getMember().getId());
111+
112+
ClubResDTO.ClubDetailResDTO response =
113+
clubQueryService.getclubDetailResDTO(selectedMemberClubId);
114+
115+
return CustomResponse.onSuccess(response);
116+
117+
}
99118
}

src/main/java/com/project/smunionbe/domain/club/dto/response/ClubResDTO.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package com.project.smunionbe.domain.club.dto.response;
22

3+
import com.project.smunionbe.domain.notification.attendance.dto.response.AttendanceResDTO;
4+
import com.project.smunionbe.domain.notification.fee.dto.response.FeeResDTO;
5+
import com.project.smunionbe.domain.notification.vote.dto.response.VoteResDTO;
6+
37
import java.util.List;
48

59
public record ClubResDTO() {
@@ -28,4 +32,16 @@ public record GetMemberClubListResDTO(
2832
List<ClubResDTO.MemberClubResponse> memberClubResponseList
2933
){
3034
}
35+
36+
public record ClubDetailResDTO(
37+
String name,
38+
String description,
39+
String thumbnailUrl,
40+
List<AttendanceResDTO.AttendanceDetailResponse> attendanceDetailResponseList,
41+
List<FeeResDTO.FeeNoticeResponse> feeNoticeResponseList,
42+
List<VoteResDTO.VoteResponse> voteResponseList,
43+
List<GalleryResDTO.GetGalleryResDTO> getGalleryResDTOList
44+
45+
){
46+
}
3147
}

src/main/java/com/project/smunionbe/domain/club/service/query/ClubQueryService.java

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,28 @@
33

44
import com.project.smunionbe.domain.club.dto.response.ClubResDTO;
55
import com.project.smunionbe.domain.club.dto.response.DepartmentResDTO;
6+
import com.project.smunionbe.domain.club.dto.response.GalleryResDTO;
67
import com.project.smunionbe.domain.club.entity.Club;
78
import com.project.smunionbe.domain.club.exception.ClubErrorCode;
89
import com.project.smunionbe.domain.club.exception.ClubException;
10+
import com.project.smunionbe.domain.club.repository.ClubRepository;
11+
import com.project.smunionbe.domain.club.repository.GalleryRepository;
912
import com.project.smunionbe.domain.member.entity.MemberClub;
13+
import com.project.smunionbe.domain.member.exception.MemberClubErrorCode;
14+
import com.project.smunionbe.domain.member.exception.MemberClubException;
1015
import com.project.smunionbe.domain.member.repository.MemberClubRepository;
16+
import com.project.smunionbe.domain.notification.attendance.dto.response.AttendanceResDTO;
17+
import com.project.smunionbe.domain.notification.attendance.repository.AttendanceRepository;
18+
import com.project.smunionbe.domain.notification.fee.dto.response.FeeResDTO;
19+
import com.project.smunionbe.domain.notification.fee.repository.FeeNoticeRepository;
20+
import com.project.smunionbe.domain.notification.vote.dto.response.VoteResDTO;
21+
import com.project.smunionbe.domain.notification.vote.repository.VoteNoticeRepository;
1122
import lombok.RequiredArgsConstructor;
1223
import lombok.extern.slf4j.Slf4j;
1324
import org.springframework.stereotype.Service;
1425
import org.springframework.transaction.annotation.Transactional;
1526

27+
import java.time.LocalDateTime;
1628
import java.util.List;
1729

1830
@Service
@@ -21,6 +33,12 @@
2133
@Transactional(readOnly = true)
2234
public class ClubQueryService {
2335
private final MemberClubRepository memberClubRepository;
36+
private final ClubRepository clubRepository;
37+
private final AttendanceRepository attendanceRepository;
38+
private final FeeNoticeRepository feeNoticeRepository;
39+
private final VoteNoticeRepository voteNoticeRepository;
40+
private final GalleryRepository galleryRepository;
41+
2442
public ClubResDTO.GetMemberClubListResDTO getAllMemberClubList(
2543
Long memberClubId
2644
) {
@@ -42,4 +60,82 @@ public ClubResDTO.GetMemberClubListResDTO getAllMemberClubList(
4260

4361
return new ClubResDTO.GetMemberClubListResDTO(memberClubResponseList);
4462
}
63+
64+
public ClubResDTO.ClubDetailResDTO getclubDetailResDTO(
65+
Long memberClubId
66+
) {
67+
MemberClub memberClub = memberClubRepository.findById(memberClubId)
68+
.orElseThrow(() -> new MemberClubException(MemberClubErrorCode.INVALID_MEMBER_CLUB));
69+
Club club = clubRepository.findById(memberClub.getClub().getId())
70+
.orElseThrow(() -> new ClubException(ClubErrorCode.CLUB_NOT_FOUND));
71+
72+
Long clubId = club.getId();
73+
74+
75+
List<AttendanceResDTO.AttendanceDetailResponse> attendanceDetailResponses = attendanceRepository.findAllByClubId(clubId)
76+
.stream()
77+
.map(attendanceNotice -> new AttendanceResDTO.AttendanceDetailResponse(
78+
attendanceNotice.getId(),
79+
attendanceNotice.getTitle(),
80+
attendanceNotice.getContent(),
81+
attendanceNotice.getTarget(),
82+
attendanceNotice.getDate(),
83+
attendanceNotice.getCreatedAt()
84+
))
85+
.toList();
86+
87+
List<FeeResDTO.FeeNoticeResponse> feeNoticeResponseList = feeNoticeRepository.findAllByClubId(clubId)
88+
.stream()
89+
.map(feeNotice -> new FeeResDTO.FeeNoticeResponse(
90+
feeNotice.getId(),
91+
feeNotice.getTitle(),
92+
feeNotice.getContent(),
93+
feeNotice.getTarget(),
94+
feeNotice.getAmount(),
95+
feeNotice.getBank(),
96+
feeNotice.getAccountNumber(),
97+
feeNotice.getParticipantCount(),
98+
feeNotice.getDate(),
99+
feeNotice.getCreatedAt()
100+
101+
))
102+
.toList();
103+
104+
List<VoteResDTO.VoteResponse> voteResponses = voteNoticeRepository.findAllByClubId(clubId)
105+
.stream()
106+
.map(voteNotice -> new VoteResDTO.VoteResponse(
107+
voteNotice.getId(),
108+
voteNotice.getTitle(),
109+
voteNotice.getContent(),
110+
voteNotice.getTarget(),
111+
voteNotice.getDate(),
112+
voteNotice.isAllowDuplicate(),
113+
voteNotice.isAnonymous(),
114+
voteNotice.getCreatedAt()
115+
))
116+
.toList();
117+
118+
List<GalleryResDTO.GetGalleryResDTO> galleryResDTOS = galleryRepository.findAllByClubId(memberClub.getClub().getId())
119+
.stream()
120+
.map(gallery -> new GalleryResDTO.GetGalleryResDTO(
121+
gallery.getId(),
122+
gallery.getName(),
123+
gallery.getThumbnailUrl()
124+
))
125+
.toList();
126+
127+
return new ClubResDTO.ClubDetailResDTO(
128+
club.getName(),
129+
club.getDescription(),
130+
club.getThumbnailUrl(),
131+
attendanceDetailResponses,
132+
feeNoticeResponseList,
133+
voteResponses,
134+
galleryResDTOS
135+
);
136+
}
137+
138+
139+
140+
45141
}

src/main/java/com/project/smunionbe/domain/notification/attendance/repository/AttendanceRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.project.smunionbe.domain.notification.attendance.repository;
22

3+
import com.project.smunionbe.domain.club.entity.Gallery;
34
import com.project.smunionbe.domain.notification.attendance.entity.AttendanceNotice;
45
import org.springframework.data.domain.Pageable;
56
import org.springframework.data.domain.Slice;
@@ -21,4 +22,7 @@ Slice<AttendanceNotice> findByClubIdAndCursor(
2122
@Param("cursor") Long cursor,
2223
Pageable pageable
2324
);
25+
26+
List<AttendanceNotice> findAllByClubId(Long clubId);
27+
2428
}

src/main/java/com/project/smunionbe/domain/notification/fee/repository/FeeNoticeRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.project.smunionbe.domain.notification.fee.repository;
22

3+
import com.project.smunionbe.domain.club.entity.Gallery;
34
import com.project.smunionbe.domain.notification.fee.entity.FeeNotice;
45
import org.springframework.data.domain.Pageable;
56
import org.springframework.data.jpa.repository.JpaRepository;
@@ -21,4 +22,7 @@ List<FeeNotice> findByClubIdWithCursor(
2122
@Param("cursor") Long cursor,
2223
Pageable pageable
2324
);
25+
26+
List<FeeNotice> findAllByClubId(Long clubId);
27+
2428
}

src/main/java/com/project/smunionbe/domain/notification/vote/repository/VoteNoticeRepository.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.project.smunionbe.domain.notification.vote.repository;
22

3+
import com.project.smunionbe.domain.club.entity.Gallery;
34
import com.project.smunionbe.domain.notification.vote.entity.VoteNotice;
45
import org.springframework.data.domain.Pageable;
56
import org.springframework.data.domain.Slice;
67
import org.springframework.data.jpa.repository.JpaRepository;
78
import org.springframework.data.jpa.repository.Query;
89
import org.springframework.data.repository.query.Param;
910

11+
import java.util.List;
12+
1013
public interface VoteNoticeRepository extends JpaRepository<VoteNotice, Long> {
1114

1215
@Query("SELECT vn FROM VoteNotice vn " +
@@ -18,4 +21,7 @@ Slice<VoteNotice> findByClubIdAndCursor(
1821
@Param("cursor") Long cursor,
1922
Pageable pageable
2023
);
24+
List<VoteNotice> findAllByClubId(Long clubId);
25+
26+
2127
}

0 commit comments

Comments
 (0)