Skip to content

Commit

Permalink
MATE-109 : [FEAT] 메이트 채팅방 멤버 조회 기능 (#101)
Browse files Browse the repository at this point in the history
* MATE-109 : [FEAT] 채팅방 멤버 조회 컨트롤러 구현

* MATE-109 : [FEAT] 채팅방 멤버 조회 서비스 구현
  • Loading branch information
MisaSohee authored Dec 7, 2024
1 parent 92a2df8 commit 0401ea2
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package com.example.mate.domain.mateChat.controller;

import com.example.mate.common.error.CustomException;
import com.example.mate.common.error.ErrorCode;
import com.example.mate.common.response.ApiResponse;
import com.example.mate.common.response.PageResponse;
import com.example.mate.common.security.auth.AuthMember;
import com.example.mate.domain.mateChat.dto.response.MateChatMessageResponse;
import com.example.mate.domain.mateChat.dto.response.MateChatRoomListResponse;
import com.example.mate.domain.mateChat.dto.response.MateChatRoomResponse;
import com.example.mate.domain.mateChat.service.MateChatRoomService;
import com.example.mate.domain.member.dto.response.MemberSummaryResponse;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
Expand All @@ -19,6 +18,8 @@
import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/mates/chat")
Expand All @@ -43,10 +44,6 @@ public ResponseEntity<ApiResponse<PageResponse<MateChatRoomListResponse>>> getMy
@AuthenticationPrincipal AuthMember member

) {

if (member == null) {
throw new CustomException(ErrorCode.UNAUTHORIZED_USER);
}
PageResponse<MateChatRoomListResponse> response = chatRoomService.getMyChatRooms(member.getMemberId(), pageable);
return ResponseEntity.ok(ApiResponse.success(response));
}
Expand Down Expand Up @@ -81,4 +78,12 @@ public ResponseEntity<Void> leaveChatRoom(
chatRoomService.leaveChatRoom(chatroomId, member.getMemberId());
return ResponseEntity.noContent().build();
}

@GetMapping("/{chatRoomId}/members")
@Operation(summary = "채팅방 멤버 조회", description = "채팅방에 현재 참여 중인 멤버 목록을 조회합니다.")
public ResponseEntity<ApiResponse<List<MemberSummaryResponse>>> getMateChatRoomMembers(@Parameter(description = "채팅방 ID") @PathVariable Long chatRoomId,
@AuthenticationPrincipal AuthMember member) {
List<MemberSummaryResponse> responses = chatRoomService.getChatRoomMembers(chatRoomId, member.getMemberId());
return ResponseEntity.ok(ApiResponse.success(responses));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.example.mate.domain.mateChat.repository.MateChatMessageRepository;
import com.example.mate.domain.mateChat.repository.MateChatRoomMemberRepository;
import com.example.mate.domain.mateChat.repository.MateChatRoomRepository;
import com.example.mate.domain.member.dto.response.MemberSummaryResponse;
import com.example.mate.domain.member.entity.Member;
import com.example.mate.domain.member.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
Expand All @@ -31,6 +32,7 @@
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service
@Transactional
Expand All @@ -43,6 +45,7 @@ public class MateChatRoomService {
private final MemberRepository memberRepository;
private final MateChatMessageService mateChatMessageService;
private final VisitPartRepository visitPartRepository;
private final MateChatRoomMemberRepository mateChatRoomMemberRepository;

// 메이트 게시글에서 채팅방 생성/입장
public MateChatRoomResponse createOrJoinChatRoomFromPost(Long postId, Long memberId) {
Expand Down Expand Up @@ -185,6 +188,23 @@ private MateChatRoomMember joinAsMember(MateChatRoom chatRoom, Member member) {
return chatRoomMemberRepository.save(chatRoomMember);
}

// 채팅방 현재 명단 조회
@Transactional(readOnly = true)
public List<MemberSummaryResponse> getChatRoomMembers(Long roomId, Long memberId) {

// 1. 채팅방 접근 권한 검증
validateChatRoomAccess(roomId, memberId);

// 2. 활성화된 채팅방 멤버 조회
List<MateChatRoomMember> activeMembers = mateChatRoomMemberRepository.findActiveMembers(roomId);


// 3. MemberSummaryResponse로 변환하여 반환
return activeMembers.stream()
.map(member -> MemberSummaryResponse.from(member.getMember()))
.collect(Collectors.toList());
}

// 채팅방 퇴장
public void leaveChatRoom(Long roomId, Long memberId) {
MateChatRoom chatRoom = chatRoomRepository.findById(roomId)
Expand Down

0 comments on commit 0401ea2

Please sign in to comment.