Skip to content

Commit ae01159

Browse files
committed
feat: 백엔드 채팅방 나가기 기능 구현
1 parent 4479932 commit ae01159

5 files changed

Lines changed: 25 additions & 13 deletions

File tree

NBE_5_7_2_02TEAM/src/main/java/io/twogether/nbe_5_7_2_02team/chat/dao/ChatMemberRepository.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package io.twogether.nbe_5_7_2_02team.chat.dao;
22

33
import io.twogether.nbe_5_7_2_02team.chat.domain.ChatMember;
4+
import io.twogether.nbe_5_7_2_02team.chat.domain.ChatMemberStatus;
45
import io.twogether.nbe_5_7_2_02team.chat.domain.ChatRoom;
56
import io.twogether.nbe_5_7_2_02team.member.domain.Member;
67

8+
import java.util.Collection;
79
import org.springframework.data.jpa.repository.JpaRepository;
810

911
import java.util.List;
@@ -14,7 +16,7 @@ public interface ChatMemberRepository extends JpaRepository<ChatMember, Long> {
1416

1517
List<ChatMember> findByChatRoom(ChatRoom chatRoom);
1618

17-
List<ChatMember> findByMember(Member member);
19+
List<ChatMember> findByMemberAndChatMemberStatusIn(Member member, Collection<ChatMemberStatus> chatMemberStatuses);
1820

1921
void deleteByChatRoom(ChatRoom chatRoom);
2022

NBE_5_7_2_02TEAM/src/main/java/io/twogether/nbe_5_7_2_02team/chat/domain/ChatMember.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import lombok.Builder;
1818
import lombok.Getter;
1919
import lombok.NoArgsConstructor;
20+
import lombok.Setter;
2021

2122
@Entity
2223
@Getter
@@ -35,6 +36,7 @@ public class ChatMember extends BaseEntity {
3536
@JoinColumn(name = "member_id")
3637
private Member member;
3738

39+
@Setter
3840
@Column(name = "status")
3941
@Enumerated(EnumType.STRING)
4042
private ChatMemberStatus chatMemberStatus;
@@ -45,8 +47,4 @@ public ChatMember(ChatRoom chatRoom, Member member, ChatMemberStatus chatMemberS
4547
this.member = member;
4648
this.chatMemberStatus = chatMemberStatus;
4749
}
48-
49-
public void updateStatus(ChatMemberStatus chatMemberStatus) {
50-
this.chatMemberStatus = chatMemberStatus;
51-
}
5250
}
Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package io.twogether.nbe_5_7_2_02team.chat.dto.request;
22

3+
import com.fasterxml.jackson.annotation.JsonCreator;
4+
import com.fasterxml.jackson.annotation.JsonProperty;
35
import io.twogether.nbe_5_7_2_02team.chat.domain.ChatMemberStatus;
46

57
import lombok.Getter;
6-
import lombok.RequiredArgsConstructor;
78

89
@Getter
9-
@RequiredArgsConstructor
1010
public class ChatMemberUpdateRequest {
1111
private final ChatMemberStatus chatMemberStatus;
12+
13+
@JsonCreator
14+
public ChatMemberUpdateRequest(@JsonProperty("chatMemberStatus") ChatMemberStatus chatMemberStatus) {
15+
this.chatMemberStatus = chatMemberStatus;
16+
}
1217
}

NBE_5_7_2_02TEAM/src/main/java/io/twogether/nbe_5_7_2_02team/chat/service/ChatMemberService.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package io.twogether.nbe_5_7_2_02team.chat.service;
22

3+
import static io.twogether.nbe_5_7_2_02team.chat.domain.ChatMemberStatus.LEFT;
4+
import static io.twogether.nbe_5_7_2_02team.chat.domain.ChatMemberStatus.OFFLINE;
35
import static io.twogether.nbe_5_7_2_02team.chat.domain.ChatMemberStatus.ONLINE;
4-
import static io.twogether.nbe_5_7_2_02team.global.response.error.ErrorCode.CHAT_MEMBER_ALREADY_EXISTS;
56
import static io.twogether.nbe_5_7_2_02team.global.response.error.ErrorCode.CHAT_MEMBER_NOT_ENTER;
67
import static io.twogether.nbe_5_7_2_02team.global.response.error.ErrorCode.CHAT_MEMBER_UNDEFINED_STATUS;
78
import static io.twogether.nbe_5_7_2_02team.global.response.error.ErrorCode.CHAT_ROOM_EMPTY;
@@ -16,6 +17,7 @@
1617
import io.twogether.nbe_5_7_2_02team.global.exception.ErrorException;
1718
import io.twogether.nbe_5_7_2_02team.member.domain.Member;
1819

20+
import java.util.Arrays;
1921
import lombok.RequiredArgsConstructor;
2022

2123
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@@ -39,7 +41,7 @@ public List<ChatRoomGetResponse> getChatRoomListByUser(
3941
@AuthenticationPrincipal UserDetails userDetails) {
4042
Member member = checkUserLogin.checkUserLogin(userDetails);
4143

42-
List<ChatMember> chatMemberList = chatMemberRepository.findByMember(member);
44+
List<ChatMember> chatMemberList = chatMemberRepository.findByMemberAndChatMemberStatusIn(member, Arrays.asList(ONLINE, OFFLINE));
4345

4446
return chatMemberList.stream()
4547
.map(chatMember -> ChatRoomGetResponse.from(chatMember.getChatRoom()))
@@ -68,7 +70,11 @@ public Long createChatMember(Long chatroomId, UserDetails userDetails) {
6870
ChatMember chatMember = chatMemberRepository.findByChatRoomAndMember(chatRoom, member);
6971

7072
if (chatMember != null) {
71-
throw new ErrorException(CHAT_MEMBER_ALREADY_EXISTS);
73+
if (chatMember.getChatMemberStatus() == LEFT) {
74+
chatMember.setChatMemberStatus(ONLINE);
75+
}
76+
77+
return chatMember.getId();
7278
}
7379

7480
Long id =
@@ -105,7 +111,7 @@ public Long updateChatMember(
105111
throw new ErrorException(CHAT_MEMBER_UNDEFINED_STATUS);
106112
}
107113

108-
chatMember.updateStatus(chatMemberStatus);
114+
chatMember.setChatMemberStatus(chatMemberStatus);
109115
return chatMemberRepository.save(chatMember).getId();
110116
}
111117
}

frontend/src/pages/ChatRoomList.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ function ChatRoomList() {
9797

9898
const handleCloseRoom = () => {
9999
setSelectedRoom(null);
100-
setSelectedRoomTitle(""); // 선택된 방 제목도 초기화
100+
setSelectedRoomTitle("");
101+
fetchData();
101102
};
102103

103104
return (
@@ -163,7 +164,7 @@ function ChatRoomList() {
163164

164165
<div
165166
className={`transition-all duration-300 ease-in-out ${selectedRoom ? "w-2/3 md:w-3/4 lg:w-4/5 opacity-100" : "w-0 opacity-0"
166-
} h-full flex items-center justify-center`}
167+
} h-full flex items-center justify-center`}
167168
>
168169
{selectedRoom && (
169170
<div className="w-[500px] h-[95%] rounded-xl overflow-hidden shadow-lg bg-white">

0 commit comments

Comments
 (0)