[Project] 채팅방 생성자 채팅 금지

Yumya's record·2024년 11월 26일

[회고] Auction Project

목록 보기
7/7
post-thumbnail

🤐 채팅방 생성자 채팅 금지

현재 진행하고 있는 프로젝트에서,
채팅방 생성자는 방장이 아닌 관전자의 역할을 수행해야 한다고 생각했다.
그래서 채팅방 생성자일 경우 채팅을 금지하는 기능을 구현했다.


🤐 구현

domian

@ManyToOne
@JoinColumn(name = "owner_id")
private User owner;

채팅방 도메인에 채팅방 생성자를 저장한다.

service

public User findOwnerById(String id) {
	return findRoomById(id).getOwner();
}

public boolean isUserOwner(String id, String userName) {
	return findOwnerById(id).getNickName().equals(userName);
}

채팅방의 id를 이용해 채팅방 소유자를 찾고, 이 소유자와 보내는 사람의 닉네임이 일치하는지 판단한다.

controller

@MessageMapping("/chat/message/whisper")
public void messageToOne(WhisperDto whisperDto) {
	if (chatService.isUserOwner(whisperDto.getRoomId(), whisperDto.getSender())) {
    	return;
	}
    
	... // 생략
}

해당 기능이 필요한 @MessageMapping 메서드에서 메시지를 보낸 사람이 채팅방 생성자라면 메서드를 종료시켜 메시지를 보내지 못하도록 한다.


🤐 동작

사용자 A가 채팅방 생성자일 경우 A가 메시지를 보냈을 때 동작이다.

// A -> 모두에게 : 오늘 날씨가 좋네요.

{
	"type" : "TALK",
    "roomId" : 1,
    "sender" : A,
    "message", "오늘 날씨가 좋네요."
}

해당 메시지를 보냈을 때, @MessageMapping 메서드에서 해당 DTO에서 sender 정보를 가져와 채팅방 owner 정보와 비교한다.

이때 owner == sender라면 메시지를 전송하지 않고 메서드를 종료시킨다.
만약 A가 채팅방 생성자가 아닐 경우 해당 메시지는 모두에게 전달된다.

이제 채팅방 생성자가 자신의 채팅방에서 채팅할 수 없다!


이제 채팅과 관련된 다른 기능에 대해 고민해보는 시간을 가질 것이다. ᐝ҉*(ˆ. ̫ . ˆ)

profile
🍀 ٩(ˊᗜˋ*)و 🍀

0개의 댓글