Skip to content

Commit

Permalink
Fix(be) #21: Member와 GroupChatroom 연관관계 재매핑
Browse files Browse the repository at this point in the history
  • Loading branch information
devbattery committed Jan 21, 2025
1 parent 92ffc1c commit 3772911
Show file tree
Hide file tree
Showing 9 changed files with 82 additions and 71 deletions.
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
package movlit.be.member.domain.entity;

import jakarta.persistence.CascadeType;
import jakarta.persistence.Column;
import jakarta.persistence.Embedded;
import jakarta.persistence.EmbeddedId;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import lombok.Builder;
import lombok.Getter;
Expand Down Expand Up @@ -65,8 +68,8 @@ public class MemberEntity {
private boolean delYn;

@Getter
@ManyToOne(fetch = FetchType.LAZY)
private MemberRChatroom memberRChatroom;
@OneToMany(mappedBy = "member", cascade = CascadeType.ALL, orphanRemoval = true)
private List<MemberRChatroom> memberRChatroom = new ArrayList<>();

@Builder
public MemberEntity(MemberId memberId, String email, String nickname, String password, String dob,
Expand Down Expand Up @@ -102,7 +105,7 @@ public List<MemberGenreEntity> getMemberGenreEntityList() {
}

public void updateMemberRChatroom(MemberRChatroom memberRChatroom) {
this.memberRChatroom = memberRChatroom;
this.memberRChatroom.add(memberRChatroom);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import java.util.Objects;
import movlit.be.common.exception.ContentTypeNotExistException;
import movlit.be.common.util.IdFactory;
import movlit.be.common.util.IdGenerator;
import movlit.be.member.domain.entity.MemberEntity;
import movlit.be.pub_sub.chatRoom.domain.GroupChatroom;
import movlit.be.pub_sub.chatRoom.domain.MemberRChatroom;
Expand All @@ -15,19 +14,15 @@ public class ChatroomConvertor {
private ChatroomConvertor() {
}

public static MemberRChatroom makeMemberRChatroom(MemberEntity member) {
MemberRChatroom memberRChatroom = new MemberRChatroom(IdFactory.createMemberRChatroom(), LocalDateTime.now());
memberRChatroom.addMember(member);
return memberRChatroom;
public static MemberRChatroom makeNonReMemberRChatroom() {
return new MemberRChatroom(IdFactory.createMemberRChatroom(), LocalDateTime.now());
}

public static GroupChatroom makeGroupChatroom(GroupChatroomRequest request, MemberRChatroom memberRChatroom) {
GroupChatroom groupChatroom = new GroupChatroom(IdFactory.createGroupChatroomId(),
public static GroupChatroom makeNonReGroupChatroom(GroupChatroomRequest request) {
return new GroupChatroom(IdFactory.createGroupChatroomId(),
request.getRoomName(),
generateContentId(request.getContentType(), request.getContentId()),
LocalDateTime.now());
groupChatroom.updateMemberRChatroom(memberRChatroom);
return groupChatroom;
}

private static String generateContentId(String contentType, Long contentId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,29 +27,32 @@ public class GroupChatroomService {

private final GroupChatRepository groupChatRepository;
private final MemberReadService memberReadService;
private final MemberRChatroomService memberRChatroomService;

public List<GroupChatroomResponseDto> fetchMyGroupChatList(MemberId memberId) {
if (memberId != null) {

List<GroupChatroomResponseDto> myGroupChatList = groupChatRepository.findAllByMemberId(memberId);
log.info("::GroupChatroomService_fetchMyGroupChatList::");
log.info(">> myGroupchatList : " + myGroupChatList.toString());

return myGroupChatList;
} else {
throw new ChatroomNotFoundException();
}
}
// public List<GroupChatroomResponseDto> fetchMyGroupChatList(MemberId memberId) {
// if (memberId != null) {
//
// List<GroupChatroomResponseDto> myGroupChatList = groupChatRepository.findAllByMemberId(memberId);
// log.info("::GroupChatroomService_fetchMyGroupChatList::");
// log.info(">> myGroupchatList : " + myGroupChatList.toString());
//
// return myGroupChatList;
// } else {
// throw new ChatroomNotFoundException();
// }
// }

@Transactional
public GroupChatroomResponse createGroupChatroom(GroupChatroomRequest request, MemberId memberId) {
GroupChatroom groupChatroom = ChatroomConvertor.makeNonReGroupChatroom(request);
MemberRChatroom memberRChatroom = ChatroomConvertor.makeNonReMemberRChatroom();

MemberEntity member = memberReadService.findEntityByMemberId(memberId);
MemberRChatroom memberRChatroom = ChatroomConvertor.makeMemberRChatroom(member);
memberRChatroomService.save(memberRChatroom);
GroupChatroom groupChatroom = ChatroomConvertor.makeGroupChatroom(request, memberRChatroom);
return groupChatRepository.create(groupChatroom);

memberRChatroom.updateGroupChatRoom(groupChatroom);
memberRChatroom.updateMember(member);
groupChatroom.updateMemberRChatroom(memberRChatroom); // 그룹 채팅방에 멤버를 참여시킨다

return groupChatRepository.create(groupChatroom);
}

public List<GroupChatroomMemberResponse> fetchMembersInGroupChatroom(GroupChatroomId groupChatroomId){
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package movlit.be.pub_sub.chatRoom.domain;

import jakarta.persistence.CascadeType;
import jakarta.persistence.EmbeddedId;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
Expand All @@ -23,8 +27,8 @@ public class GroupChatroom {
private String contentId; // MV_uuid, BK_uuid
private LocalDateTime regDt;

@ManyToOne(fetch = FetchType.LAZY)
private MemberRChatroom memberRChatroom;
@OneToMany(mappedBy = "groupChatroom", cascade = CascadeType.ALL, orphanRemoval = true)
private List<MemberRChatroom> memberRChatroom = new ArrayList<>();

public GroupChatroom(GroupChatroomId groupChatroomId, String roomName, String contentId, LocalDateTime regDt) {
this.groupChatroomId = groupChatroomId;
Expand All @@ -34,8 +38,7 @@ public GroupChatroom(GroupChatroomId groupChatroomId, String roomName, String co
}

public void updateMemberRChatroom(MemberRChatroom memberRChatroom) {
this.memberRChatroom = memberRChatroom;
memberRChatroom.getGroupChatRoom().add(this);
this.memberRChatroom.add(memberRChatroom);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import jakarta.persistence.CascadeType;
import jakarta.persistence.EmbeddedId;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import java.time.LocalDateTime;
Expand All @@ -23,11 +25,11 @@ public class MemberRChatroom {
@EmbeddedId
private MemberRChatroomId memberRChatroomId;

@OneToMany(mappedBy = "memberRChatroom", cascade = CascadeType.ALL, orphanRemoval = true)
private List<MemberEntity> member = new ArrayList<>();
@ManyToOne(fetch = FetchType.LAZY)
private MemberEntity member;

@OneToMany(mappedBy = "memberRChatroom", cascade = CascadeType.ALL, orphanRemoval = true)
private List<GroupChatroom> groupChatRoom = new ArrayList<>();
@ManyToOne(fetch = FetchType.LAZY)
private GroupChatroom groupChatroom;

private LocalDateTime regDt;

Expand All @@ -36,9 +38,12 @@ public MemberRChatroom(MemberRChatroomId memberRChatroomId, LocalDateTime regDt)
this.regDt = regDt;
}

public void addMember(MemberEntity member) {
this.member.add(member);
member.updateMemberRChatroom(this);
public void updateMember(MemberEntity member) {
this.member = member;
}

public void updateGroupChatRoom(GroupChatroom groupChatroom) {
this.groupChatroom = groupChatroom;
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package movlit.be.pub_sub.chatRoom.domain.repository;

import java.util.List;
import java.util.Optional;
import movlit.be.common.util.ids.GroupChatroomId;
import movlit.be.common.util.ids.MemberId;
import movlit.be.pub_sub.chatRoom.domain.GroupChatroom;
Expand All @@ -13,8 +12,11 @@
public interface GroupChatRepository {

GroupChatroomResponse create(GroupChatroom groupChatroom);
List<GroupChatroomResponseDto> findAllByMemberId(MemberId memberId);

// List<GroupChatroomResponseDto> findAllByMemberId(MemberId memberId);

List<GroupChatroomMemberResponse> findMembersByChatroomId(@Param("chatroomId") GroupChatroomId chatroomId);

GroupChatroom findByChatroomId(GroupChatroomId chatroomId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,11 @@ public List<GroupChatroomMemberResponse> findMembersByChatroomId(GroupChatroomId
return members;
}

public List<GroupChatroomResponseDto> findAllByMemberId(MemberId memberId) {
List<GroupChatroomResponseDto> myGroupChatList = groupChatroomJpaRepository.findAllByMemberId(memberId)
.orElseThrow(ChatroomNotFoundException::new);

return myGroupChatList;
}
// public List<GroupChatroomResponseDto> findAllByMemberId(MemberId memberId) {
// List<GroupChatroomResponseDto> myGroupChatList = groupChatroomJpaRepository.findAllByMemberId(memberId)
// .orElseThrow(ChatroomNotFoundException::new);
//
// return myGroupChatList;
// }

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ public interface GroupChatroomJpaRepository extends JpaRepository<GroupChatroom,
)
List<GroupChatroomMemberResponse> findMembersByChatroomId(@Param("chatroomId") GroupChatroomId chatroomId);

@Query("SELECT NEW movlit.be.pub_sub.chatRoom.presentation.dto.GroupChatroomResponseDto( "
+ "gc.groupChatroomId, "
+ "gc.contentId, "
+ "gc.roomName, "
+ "gc.regDt "
+ " ) FROM GroupChatroom gc "
+ "LEFT JOIN MemberRChatroom mrc on mrc.memberRChatroomId = gc.memberRChatroom.memberRChatroomId "
+ "LEFT JOIN MemberEntity m on m.memberRChatroom.memberRChatroomId = mrc.memberRChatroomId "
+ "WHERE m.memberId = :memberId ")
Optional<List<GroupChatroomResponseDto>> findAllByMemberId(@Param("memberId") MemberId memberId);
// @Query("SELECT NEW movlit.be.pub_sub.chatRoom.presentation.dto.GroupChatroomResponseDto( "
// + "gc.groupChatroomId, "
// + "gc.contentId, "
// + "gc.roomName, "
// + "gc.regDt "
// + " ) FROM GroupChatroom gc "
// + "LEFT JOIN MemberRChatroom mrc ON mrc.memberRChatroomId = gc.memberRChatroom.memberRChatroomId "
// + "LEFT JOIN MemberEntity m ON m.memberRChatroom.memberRChatroomId = mrc.memberRChatroomId "
// + "WHERE m.memberId = :memberId ")
// Optional<List<GroupChatroomResponseDto>> findAllByMemberId(@Param("memberId") MemberId memberId);

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,18 @@ public class ChatroomReadController {



@GetMapping("/myGroupChatrooms")
public ResponseEntity fetchMyGroupChats(@AuthenticationPrincipal MyMemberDetails details){
if(details != null){
MemberId memberId = details.getMemberId();
List<GroupChatroomResponseDto> myGroupChatListRes = groupChatroomService.fetchMyGroupChatList(memberId);

return ResponseEntity.ok(myGroupChatListRes);

}else{
return ResponseEntity.badRequest().build();
}

}
// @GetMapping("/myGroupChatrooms")
// public ResponseEntity fetchMyGroupChats(@AuthenticationPrincipal MyMemberDetails details){
// if(details != null){
// MemberId memberId = details.getMemberId();
// List<GroupChatroomResponseDto> myGroupChatListRes = groupChatroomService.fetchMyGroupChatList(memberId);
//
// return ResponseEntity.ok(myGroupChatListRes);
//
// }else{
// return ResponseEntity.badRequest().build();
// }
//
// }

}

0 comments on commit 3772911

Please sign in to comment.