Skip to content

Commit 5fd6abc

Browse files
committed
🐛Fix: 동호회 leader관리 중복 저장 해결
1 parent c743f9a commit 5fd6abc

File tree

3 files changed

+32
-10
lines changed

3 files changed

+32
-10
lines changed

src/main/java/com/be/sportizebe/domain/club/dto/request/ClubCreateRequest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import com.be.sportizebe.domain.club.entity.Club;
44
import com.be.sportizebe.domain.user.entity.SportType;
5-
import com.be.sportizebe.domain.user.entity.User;
65
import io.swagger.v3.oas.annotations.media.Schema;
76
import jakarta.validation.constraints.NotBlank;
87

@@ -13,14 +12,13 @@ public record ClubCreateRequest(
1312
@Schema(description = "동호회 관련 종목", example = "SOCCER") SportType clubType,
1413
@Schema(description = "최대 정원", example = "20") Integer maxMembers) {
1514

16-
public Club toEntity(User user, String clubImage) {
15+
public Club toEntity(String clubImage) {
1716
return Club.builder()
1817
.name(name)
1918
.introduce(introduce)
2019
.clubType(clubType)
2120
.maxMembers(maxMembers)
2221
.clubImage(clubImage)
23-
.leader(user)
2422
.build();
2523
}
2624
}

src/main/java/com/be/sportizebe/domain/club/entity/Club.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,40 @@ public class Club extends BaseTimeEntity {
3939

4040
private String clubImage; // 동호회 사진 URL
4141

42-
@ManyToOne(fetch = FetchType.LAZY)
43-
@JoinColumn(name = "leader_id", nullable = false)
44-
private User leader; // 동호회장
45-
4642
@OneToOne(mappedBy = "club", fetch = FetchType.LAZY)
4743
private ChatRoom chatRoom; // 동호회 채팅방
4844

4945
@OneToMany(mappedBy = "club", cascade = CascadeType.ALL, orphanRemoval = true)
5046
@Builder.Default
5147
private List<ClubMember> members = new ArrayList<>();
5248

49+
/**
50+
* 동호회장(LEADER) 조회
51+
* ClubMember에서 LEADER 역할을 가진 멤버를 찾아 반환
52+
*/
53+
public ClubMember getLeaderMember() {
54+
return members.stream()
55+
.filter(member -> member.getRole() == ClubMember.ClubRole.LEADER)
56+
.findFirst()
57+
.orElse(null);
58+
}
59+
60+
/**
61+
* 동호회장 User 조회
62+
*/
63+
public User getLeader() {
64+
ClubMember leaderMember = getLeaderMember();
65+
return leaderMember != null ? leaderMember.getUser() : null;
66+
}
67+
68+
/**
69+
* 특정 사용자가 동호회장인지 확인
70+
*/
71+
public boolean isLeader(Long userId) {
72+
ClubMember leaderMember = getLeaderMember();
73+
return leaderMember != null && leaderMember.getUser().getId() == userId;
74+
}
75+
5376
public void update(String name, String introduce, Integer maxMembers, SportType clubType) {
5477
this.name = name;
5578
this.introduce = introduce;

src/main/java/com/be/sportizebe/domain/club/service/ClubServiceImpl.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public ClubResponse createClub(ClubCreateRequest request, MultipartFile image, L
4949
}
5050

5151
// 동호회 엔티티 생성
52-
Club club = request.toEntity(user, clubImageUrl);
52+
Club club = request.toEntity(clubImageUrl);
5353
clubRepository.save(club);
5454

5555
// 동호회 멤버 테이블에 방장(동호회 생성자) 추가
@@ -58,6 +58,7 @@ public ClubResponse createClub(ClubCreateRequest request, MultipartFile image, L
5858
.user(user)
5959
.role(ClubMember.ClubRole.LEADER)
6060
.build();
61+
club.getMembers().add(leaderMember);
6162
clubMemberRepository.save(leaderMember);
6263

6364
// 동호회 단체 채팅방 생성
@@ -73,7 +74,7 @@ public ClubResponse updateClub(Long clubId, ClubUpdateRequest request, Long user
7374
.orElseThrow(() -> new CustomException(ClubErrorCode.CLUB_NOT_FOUND));
7475

7576
// 동호회 방장만 수정 가능하도록 검증
76-
if (club.getLeader().getId() != userId) {
77+
if (!club.isLeader(userId)) {
7778
throw new CustomException(ClubErrorCode.CLUB_UPDATE_DENIED);
7879
}
7980

@@ -97,7 +98,7 @@ public ClubImageResponse updateClubImage(Long clubId, MultipartFile image, Long
9798
.orElseThrow(() -> new CustomException(ClubErrorCode.CLUB_NOT_FOUND));
9899

99100
// 동호회 방장만 수정 가능하도록 검증
100-
if (club.getLeader().getId() != userId) {
101+
if (!club.isLeader(userId)) {
101102
throw new CustomException(ClubErrorCode.CLUB_UPDATE_DENIED);
102103
}
103104

0 commit comments

Comments
 (0)