Skip to content

Commit

Permalink
feat: 나의 모임 상세 조회 기능 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
oosedus committed Jul 29, 2024
1 parent 44e8aca commit be6f81e
Show file tree
Hide file tree
Showing 5 changed files with 148 additions and 10 deletions.
10 changes: 10 additions & 0 deletions src/main/java/likelion/MZConnent/api/club/MyClubController.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package likelion.MZConnent.api.club;

import likelion.MZConnent.dto.club.response.MyClubDetailResponse;
import likelion.MZConnent.dto.club.response.MyClubSimpleResponse;
import likelion.MZConnent.jwt.principle.UserPrinciple;
import likelion.MZConnent.service.club.MyClubService;
Expand All @@ -8,6 +9,8 @@
import org.springframework.http.ResponseEntity;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
Expand All @@ -22,4 +25,11 @@ public ResponseEntity<MyClubSimpleResponse> getMyClubs(@AuthenticationPrincipal
return ResponseEntity.ok(response);
}

@GetMapping("/api/users/clubs/{clubId}")
public ResponseEntity<MyClubDetailResponse> getMyClubDetail(@AuthenticationPrincipal UserPrinciple userPrinciple, @PathVariable Long clubId) {
MyClubDetailResponse response = myClubService.getMyClubDetail(userPrinciple.getEmail(), clubId);
return ResponseEntity.ok(response);
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package likelion.MZConnent.dto.club.response;

import likelion.MZConnent.domain.club.ClubRole;
import likelion.MZConnent.domain.member.Age;
import likelion.MZConnent.domain.member.Gender;
import likelion.MZConnent.dto.club.SelfIntroductionDto;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.time.LocalDate;
import java.util.List;

@Getter
@NoArgsConstructor
public class MyClubDetailResponse {
private Long clubId;
private String title;
private LocalDate meetingDate;
private String content;
private int currentParticipant;
private MyClubCultureDto culture;
private List<MyClubMemberDto> members;

@Builder
public MyClubDetailResponse(Long clubId, String title, LocalDate meetingDate, String content, int currentParticipant, MyClubCultureDto culture, List<MyClubMemberDto> members) {
this.clubId = clubId;
this.title = title;
this.meetingDate = meetingDate;
this.content = content;
this.currentParticipant = currentParticipant;
this.culture = culture;
this.members = members;
}

@Getter
@NoArgsConstructor
public static class MyClubCultureDto {
private Long cultureId;
private String name;

@Builder
public MyClubCultureDto(Long cultureId, String name) {
this.cultureId = cultureId;
this.name = name;
}
}

@Getter
@NoArgsConstructor
public static class MyClubMemberDto {
private Long userId;
private String username;
private String profileImageUrl;
private Age age;
private Gender gender;
private ClubRole role;
private List<SelfIntroductionDto> selfIntroductions;

@Builder
public MyClubMemberDto(Long userId, String username, String profileImageUrl, Age age, Gender gender, ClubRole role, List<SelfIntroductionDto> selfIntroductions) {
this.userId = userId;
this.username = username;
this.profileImageUrl = profileImageUrl;
this.age = age;
this.gender = gender;
this.role = role;
this.selfIntroductions = selfIntroductions;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
public class SaveReviewResponse {
private Long reviewId;
private ReviewerDto reviewer;
private CultureDto culture;
private ReviewCultureDto culture;
private String title;
private String reviewImageUrl1;
private String reviewImageUrl2;
Expand All @@ -24,7 +24,7 @@ public class SaveReviewResponse {
private int likeCount;

@Builder
public SaveReviewResponse(Long reviewId, ReviewerDto reviewer, CultureDto culture, String title, String reviewImageUrl1, String reviewImageUrl2, String reviewImageUrl3, String reviewImageUrl4, LocalDateTime createdDate, int likeCount) {
public SaveReviewResponse(Long reviewId, ReviewerDto reviewer, ReviewCultureDto culture, String title, String reviewImageUrl1, String reviewImageUrl2, String reviewImageUrl3, String reviewImageUrl4, LocalDateTime createdDate, int likeCount) {
this.reviewId = reviewId;
this.reviewer = reviewer;
this.culture = culture;
Expand Down Expand Up @@ -54,12 +54,12 @@ public ReviewerDto(Long userId, String username, String profileImage) {

@Getter
@NoArgsConstructor
public static class CultureDto {
public static class ReviewCultureDto {
private Long cultureId;
private String cultureName;

@Builder
public CultureDto(Long cultureId, String cultureName) {
public ReviewCultureDto(Long cultureId, String cultureName) {
this.cultureId = cultureId;
this.cultureName = cultureName;
}
Expand Down
67 changes: 62 additions & 5 deletions src/main/java/likelion/MZConnent/service/club/MyClubService.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

import likelion.MZConnent.domain.club.Club;
import likelion.MZConnent.domain.member.Member;
import likelion.MZConnent.dto.club.response.ClubSimpleResponse;
import likelion.MZConnent.dto.club.SelfIntroductionDto;
import likelion.MZConnent.dto.club.response.MyClubDetailResponse;
import likelion.MZConnent.dto.club.response.MyClubSimpleResponse;
import likelion.MZConnent.repository.member.MemberRepository;
import lombok.RequiredArgsConstructor;
Expand All @@ -19,12 +20,11 @@ public class MyClubService {
private final MemberRepository memberRepository;

public MyClubSimpleResponse getMyClubs(String email) {
Member member = memberRepository.findByEmail(email)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 사용자입니다."));
Member member = getMemberByEmail(email);
List<Club> clubList = getClubsByMember(member);

List<MyClubSimpleResponse.MyClubSimpleDto> myClubs = clubList.stream()
.map(this::convertToDto)
.map(this::convertToSimpleDto)
.collect(Collectors.toList());

return MyClubSimpleResponse.builder()
Expand All @@ -38,7 +38,7 @@ private List<Club> getClubsByMember(Member member) {
.collect(Collectors.toList());
}

private MyClubSimpleResponse.MyClubSimpleDto convertToDto(Club club) {
private MyClubSimpleResponse.MyClubSimpleDto convertToSimpleDto(Club club) {
return MyClubSimpleResponse.MyClubSimpleDto.builder()
.clubId(club.getClubId())
.title(club.getTitle())
Expand All @@ -48,4 +48,61 @@ private MyClubSimpleResponse.MyClubSimpleDto convertToDto(Club club) {
.maxParticipant(club.getMaxParticipant())
.build();
}

public MyClubDetailResponse getMyClubDetail(String email, Long clubId) {
Member member = getMemberByEmail(email);
Club club = getClubByMemberAndId(member, clubId);

MyClubDetailResponse.MyClubCultureDto cultureDto = convertToCultureDto(club);
List<MyClubDetailResponse.MyClubMemberDto> memberDtos = convertToMemberDtos(club);

return MyClubDetailResponse.builder()
.clubId(club.getClubId())
.title(club.getTitle())
.meetingDate(club.getMeetingDate())
.content(club.getContent())
.currentParticipant(club.getClubMembers().size())
.culture(cultureDto)
.members(memberDtos)
.build();
}

private Member getMemberByEmail(String email) {
return memberRepository.findByEmail(email)
.orElseThrow(() -> new IllegalArgumentException("존재하지 않는 사용자입니다."));
}

private Club getClubByMemberAndId(Member member, Long clubId) {
return member.getClubMembers().stream()
.map(cm -> cm.getClub())
.filter(c -> c.getClubId().equals(clubId))
.findFirst()
.orElseThrow(() -> new IllegalArgumentException("해당 클럽을 찾을 수 없습니다."));
}

private MyClubDetailResponse.MyClubCultureDto convertToCultureDto(Club club) {
return MyClubDetailResponse.MyClubCultureDto.builder()
.cultureId(club.getCulture().getCultureId())
.name(club.getCulture().getName())
.build();
}

private List<MyClubDetailResponse.MyClubMemberDto> convertToMemberDtos(Club club) {
return club.getClubMembers().stream()
.map(cm -> MyClubDetailResponse.MyClubMemberDto.builder()
.userId(cm.getMember().getId())
.username(cm.getMember().getUsername())
.profileImageUrl(cm.getMember().getProfileImageUrl())
.age(cm.getMember().getAge())
.gender(cm.getMember().getGender())
.role(cm.getClubRole())
.selfIntroductions(cm.getMember().getSelfIntroductions().stream()
.map(si -> SelfIntroductionDto.builder()
.cultureCategoryId(si.getCultureCategory().getId())
.name(si.getCultureCategory().getName())
.build())
.collect(Collectors.toList()))
.build())
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ private SaveReviewResponse buildSaveReviewResponse(Review review, Member member,
.username(member.getUsername())
.profileImage(member.getProfileImageUrl())
.build())
.culture(SaveReviewResponse.CultureDto.builder()
.culture(SaveReviewResponse.ReviewCultureDto.builder()
.cultureId(culture.getCultureId())
.cultureName(culture.getName())
.build())
Expand Down

0 comments on commit be6f81e

Please sign in to comment.