Skip to content

Commit 7c63896

Browse files
committed
refator: db와 Redis의 역할 분리, 현재 통합 테스트는 실패
1 parent a31a150 commit 7c63896

File tree

9 files changed

+187
-410
lines changed

9 files changed

+187
-410
lines changed

src/main/java/com/back/domain/studyroom/dto/RoomMemberResponse.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,39 @@
77

88
import java.time.LocalDateTime;
99

10+
/**
11+
* 방 멤버 정보 응답 DTO
12+
isOnline 필드 제거: 이 DTO로 변환된 멤버는 이미 온라인 상태임을 의미
13+
RoomService.getOnlineMembersWithWebSocket()에서 Redis 기반 필터링 후 변환
14+
// Redis에서 온라인 사용자만 필터링
15+
(Set)Long onlineUserIds = sessionManager.getOnlineUsersInRoom(roomId);
16+
17+
// 해당 사용자들의 멤버 정보 조회
18+
(List)RoomMember onlineMembers = repository.findByRoomIdAndUserIdIn(roomId, onlineUserIds);
19+
20+
// DTO 변환 (이미 온라인인 멤버들만 변환됨)
21+
(List)RoomMemberResponse response = onlineMembers.stream()
22+
.map(RoomMemberResponse::from)
23+
.collect(Collectors.toList());
24+
*/
1025
@Getter
1126
@Builder
1227
public class RoomMemberResponse {
1328
private Long userId;
1429
private String nickname;
1530
private RoomRole role;
16-
private boolean isOnline;
1731
private LocalDateTime joinedAt;
1832
private LocalDateTime lastActiveAt;
1933

34+
/**
35+
* RoomMember 엔티티를 응답 DTO로 변환
36+
주의..) 이 메서드로 변환된 멤버는 온라인 상태로 인식되기 때문에 getOnlineMembersWithWebSocket()에서만 사용 해야함!!!!
37+
*/
2038
public static RoomMemberResponse from(RoomMember member) {
2139
return RoomMemberResponse.builder()
2240
.userId(member.getUser().getId())
2341
.nickname(member.getUser().getNickname())
2442
.role(member.getRole())
25-
.isOnline(member.isOnline())
2643
.joinedAt(member.getJoinedAt())
2744
.lastActiveAt(member.getLastActiveAt() != null ? member.getLastActiveAt() : member.getJoinedAt())
2845
.build();

src/main/java/com/back/domain/studyroom/repository/RoomMemberRepository.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
import org.springframework.data.jpa.repository.JpaRepository;
55
import org.springframework.stereotype.Repository;
66

7-
import java.util.Optional;
8-
7+
/**
8+
* 현재.. )
9+
findByConnectionId 메서드 제거 (connectionId 필드 제거로 인해)
10+
실시간 상태 관련 쿼리 메서드 제거
11+
커스텀 쿼리는 RoomMemberRepositoryCustom에서 관리
12+
*/
913
@Repository
1014
public interface RoomMemberRepository extends JpaRepository<RoomMember, Long>, RoomMemberRepositoryCustom {
11-
/**
12-
* WebSocket 연결 ID로 멤버 조회
13-
*/
14-
Optional<RoomMember> findByConnectionId(String connectionId);
15+
// 기본 CRUD는 JpaRepository가 제공
16+
// 커스텀 쿼리는 RoomMemberRepositoryCustom에 정의
1517
}

src/main/java/com/back/domain/studyroom/repository/RoomMemberRepositoryCustom.java

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,14 @@
55

66
import java.util.List;
77
import java.util.Optional;
8-
8+
import java.util.Set;
9+
10+
/**
11+
멤버십 정보 조회 (영구 데이터)
12+
역할 기반 쿼리
13+
실시간 온라인 상태 (WebSocketSessionManager 사용)
14+
온라인 상태는 Redis(WebSocketSessionManager)에서 관리
15+
*/
916
public interface RoomMemberRepositoryCustom {
1017

1118
/**
@@ -19,19 +26,13 @@ public interface RoomMemberRepositoryCustom {
1926
List<RoomMember> findByRoomIdOrderByRole(Long roomId);
2027

2128
/**
22-
* 방의 온라인 멤버 조회
23-
*/
24-
List<RoomMember> findOnlineMembersByRoomId(Long roomId);
25-
26-
/**
27-
* 방의 활성 멤버 수 조회
28-
*/
29-
int countActiveMembersByRoomId(Long roomId);
30-
31-
/**
32-
* 사용자가 참여 중인 모든 방의 멤버십 조회
29+
* 방의 멤버 중 특정 사용자 ID 목록에 해당하는 멤버만 조회
30+
WebSocket에서 온라인 사용자 ID 목록을 받아와서 해당 멤버들의 상세 정보 조회
31+
* @param roomId 방 ID
32+
* @param userIds 조회할 사용자 ID 목록
33+
* @return 해당하는 멤버 목록
3334
*/
34-
List<RoomMember> findActiveByUserId(Long userId);
35+
List<RoomMember> findByRoomIdAndUserIdIn(Long roomId, Set<Long> userIds);
3536

3637
/**
3738
* 특정 역할의 멤버 조회
@@ -62,14 +63,4 @@ public interface RoomMemberRepositoryCustom {
6263
* 특정 역할의 멤버 수 조회
6364
*/
6465
int countByRoomIdAndRole(Long roomId, RoomRole role);
65-
66-
/**
67-
* 방 퇴장 처리 (벌크 업데이트)
68-
*/
69-
void leaveRoom(Long roomId, Long userId);
70-
71-
/**
72-
* 방의 모든 멤버를 오프라인 처리 (방 종료 시)
73-
*/
74-
void disconnectAllMembers(Long roomId);
7566
}

0 commit comments

Comments
 (0)