Skip to content

Commit

Permalink
Merge pull request #149 from Re-4aliens/feat/#148_valid-chat-room-opened
Browse files Browse the repository at this point in the history
feat: 채팅 전송시 채팅방 열림 상태를 검증하도록 메서드 추가
  • Loading branch information
coke98 authored Aug 23, 2024
2 parents 8852d98 + 0c8e1a2 commit 5fa4c22
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.aliens.backend.chat.service;

import com.aliens.backend.chat.domain.ChatRoom;
import com.aliens.backend.chat.domain.ChatRoomStatus;
import com.aliens.backend.global.exception.RestApiException;
import com.aliens.backend.global.response.error.ChatError;
import org.springframework.stereotype.Component;
Expand All @@ -11,21 +12,32 @@
public class ChatAuthValidator {
public void validateRoomFromTopic(String topic, List<ChatRoom> validChatRooms) {
Long roomId = getRoomIdFromTopic(topic);
if(!isValidRoom(validChatRooms, roomId)) {
if(!isUserInRoom(validChatRooms, roomId)) {
throw new RestApiException(ChatError.INVALID_ROOM_ACCESS);
}
}

public void validateRoom(Long roomId, List<ChatRoom> validChatRooms) {
if(!isValidRoom(validChatRooms, roomId)) {
if (!isUserInRoom(validChatRooms, roomId)) {
throw new RestApiException(ChatError.INVALID_ROOM_ACCESS);
}
if (!isRoomOpened(validChatRooms, roomId)) {
throw new RestApiException(ChatError.ROOM_NOT_OPEN);
}
}

private boolean isValidRoom (List<ChatRoom> validChatRooms, Long roomId) {
private boolean isUserInRoom(List<ChatRoom> validChatRooms, Long roomId) {
return validChatRooms.stream().anyMatch(chatRoom -> chatRoom.getId().equals(roomId));
}

private boolean isRoomOpened(List<ChatRoom> validChatRooms, Long roomId) {
return validChatRooms.stream()
.filter(chatRoom -> chatRoom.getId().equals(roomId))
.findFirst()
.map(chatRoom -> chatRoom.getStatus().equals(ChatRoomStatus.OPENED))
.orElse(false);
}

private long getRoomIdFromTopic(String topic) {
return Long.parseLong(topic.split("/")[2]);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ public enum ChatError implements ErrorCode {
INVALID_MESSAGE_TYPE(HttpStatus.BAD_REQUEST, "CH1", "메시지 타입이 잘못되었습니다."),
INVALID_ROOM_ACCESS(HttpStatus.FORBIDDEN, "CH2", "채팅방 접근 권한이 없습니다."),
INVALID_REPORT_CATEGORY(HttpStatus.BAD_REQUEST, "CH3", "신고 카테고리가 잘못되었습니다."),
CHAT_ROOM_NOT_FOUND(HttpStatus.NOT_FOUND, "CH4", "채팅방을 찾을 수 없습니다.")
CHAT_ROOM_NOT_FOUND(HttpStatus.NOT_FOUND, "CH4", "채팅방을 찾을 수 없습니다."),
ROOM_NOT_OPEN(HttpStatus.FORBIDDEN, "CH5", "채팅방이 열리지 않았습니다.")
;

private final HttpStatus httpStatusCode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.aliens.backend.chat.controller.dto.request.ReadRequest;
import com.aliens.backend.chat.controller.dto.response.ReadResponse;
import com.aliens.backend.chat.domain.ChatRoom;
import com.aliens.backend.chat.domain.ChatRoomStatus;
import com.aliens.backend.chat.domain.Message;
import com.aliens.backend.chat.domain.MessageType;
import com.aliens.backend.global.BaseIntegrationTest;
Expand Down Expand Up @@ -180,6 +181,7 @@ private MessageSendRequest createMessageSendRequest(Long roomId) {
private void setValidRooms() {
ChatRoom chatroom = mock(ChatRoom.class);
when(chatroom.getId()).thenReturn(authorizedRoomId);
when(chatroom.getStatus()).thenReturn(ChatRoomStatus.OPENED);
List<ChatRoom> chatRooms = new ArrayList<>();
chatRooms.add(chatroom);
when(chatService.getChatRooms(member.getId())).thenReturn(chatRooms);
Expand Down

0 comments on commit 5fa4c22

Please sign in to comment.