Skip to content

Commit 4764b83

Browse files
committed
feat: 번개 참가 나가기시 채팅방 자동 참가/나가기
1 parent 5a201a0 commit 4764b83

File tree

6 files changed

+34
-4
lines changed

6 files changed

+34
-4
lines changed

src/main/java/com/codeit/side/chat/adapter/out/persistence/ChatMemberRepositoryImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,9 @@ public void join(Long id, Long userId) {
4646
public List<ChatMemberEntity> findAllMemberById(Long roomId) {
4747
return chatMemberJpaRepository.findAllByChatRoomId(roomId);
4848
}
49+
50+
@Override
51+
public void leave(Long chatRoomId, Long userId) {
52+
chatMemberJpaRepository.deleteByChatRoomIdAndUserId(chatRoomId, userId);
53+
}
4954
}

src/main/java/com/codeit/side/chat/adapter/out/persistence/jpa/ChatMemberJpaRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ public interface ChatMemberJpaRepository extends JpaRepository<ChatMemberEntity,
1010
List<ChatMemberEntity> findAllByChatRoomId(Long chatRoomId);
1111

1212
Optional<ChatMemberEntity> findByChatRoomIdAndUserId(Long chatRoomId, Long userId);
13+
14+
void deleteByChatRoomIdAndUserId(Long chatRoomId, Long userId);
1315
}

src/main/java/com/codeit/side/chat/application/port/in/ChatMessageUseCase.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,8 @@ public interface ChatMessageUseCase {
2525
List<ChatRoom> findAllChatRoomsByLighteningIds(List<Long> lighteningIds);
2626

2727
void read(Long roomId, Long userId);
28+
29+
void leaveChatRoom(Long id, String email);
30+
31+
void joinChatRoomByLighteningId(Long id, String email);
2832
}

src/main/java/com/codeit/side/chat/application/port/out/ChatMemberRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ public interface ChatMemberRepository {
1616
void join(Long id, Long userId);
1717

1818
List<ChatMemberEntity> findAllMemberById(Long roomId);
19+
20+
void leave(Long chatRoomId, Long userId);
1921
}

src/main/java/com/codeit/side/chat/application/service/ChatMessageService.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,16 @@ public void joinChatRoom(Long id, String email) {
108108
User user = userQueryRepository.getByEmail(email)
109109
.toDomain();
110110
ChatRoom chatRoom = chatRoomRepository.getBy(id);
111-
if (chatMemberRepository.existsByChatRoomIdAndUserId(chatRoom.getId(), user.getId())) {
112-
throw new IllegalRequestException("이미 채팅방에 참여하고 있는 사용자입니다.");
113-
}
114-
chatMemberRepository.join(id, user.getId());
111+
chatMemberRepository.join(chatRoom.getId(), user.getId());
112+
}
113+
114+
@Override
115+
@Transactional
116+
public void joinChatRoomByLighteningId(Long id, String email) {
117+
User user = userQueryRepository.getByEmail(email)
118+
.toDomain();
119+
ChatRoom chatRoom = chatRoomRepository.getByLighteningId(id);
120+
chatMemberRepository.join(chatRoom.getId(), user.getId());
115121
}
116122

117123
@Override
@@ -130,6 +136,15 @@ public void read(Long roomId, Long userId) {
130136
chatMessageReadRepository.read(roomId, userId);
131137
}
132138

139+
@Override
140+
@Transactional
141+
public void leaveChatRoom(Long id, String email) {
142+
User user = userQueryRepository.getByEmail(email)
143+
.toDomain();
144+
ChatRoom chatRoom = chatRoomRepository.getByLighteningId(id);
145+
chatMemberRepository.leave(chatRoom.getId(), user.getId());
146+
}
147+
133148
private List<ChatRoomInfo> createChatRoomInfos(List<ChatRoom> chatRooms, Map<Long, ChatMessage> allLastMessageByIds, Map<Long, Integer> idToMemberSize) {
134149
return chatRooms.stream()
135150
.map(chatRoom -> createChatRoomInfo(chatRoom, allLastMessageByIds.get(chatRoom.getId()), idToMemberSize.get(chatRoom.getId())))

src/main/java/com/codeit/side/lightening/application/service/LighteningService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public void join(String email, Long id) {
5656
Lightening lightening = lighteningReadRepository.getById(id);
5757
validateLightening(email, lightening);
5858
lighteningCommandRepository.join(email, lightening.getId());
59+
chatMessageUseCase.joinChatRoomByLighteningId(id, email);
5960
}
6061

6162
@Override
@@ -66,6 +67,7 @@ public void leave(String email, Long id) {
6667
throw new UserNotJoinedException(lightening.getId());
6768
}
6869
lighteningCommandRepository.leave(email, lightening.getId());
70+
chatMessageUseCase.leaveChatRoom(id, email);
6971
}
7072

7173
@Override

0 commit comments

Comments
 (0)