From 0d1d7eaad263e6e2c0c37f08f8eca0fa10cf2909 Mon Sep 17 00:00:00 2001 From: Sukyeong Sung Date: Fri, 28 Feb 2025 23:08:01 +0900 Subject: [PATCH 1/5] =?UTF-8?q?Feat:=20=EB=B0=A9=20=EB=B9=84=EB=B0=80?= =?UTF-8?q?=EB=B2=88=ED=98=B8=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=20?= =?UTF-8?q?=EB=B0=8F=20=EC=B1=84=ED=8C=85=EB=B0=A9=20=EB=82=98=EA=B0=80?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ChatRoomController.java | 4 +-- .../controller/request/ChatRoomRequest.java | 2 ++ .../domain/chat/chatRoom/entity/ChatRoom.java | 4 +++ .../chatRoom/service/ChatRoomService.java | 1 + .../chatRoom/service/ChatRoomServiceImpl.java | 33 ++++++++++++++++++- .../repository/UserChatRoomRepository.java | 3 +- .../commitField/global/error/ErrorCode.java | 5 ++- 7 files changed, 47 insertions(+), 5 deletions(-) diff --git a/src/main/java/cmf/commitField/domain/chat/chatRoom/controller/ChatRoomController.java b/src/main/java/cmf/commitField/domain/chat/chatRoom/controller/ChatRoomController.java index f047c17..8b4d9b8 100644 --- a/src/main/java/cmf/commitField/domain/chat/chatRoom/controller/ChatRoomController.java +++ b/src/main/java/cmf/commitField/domain/chat/chatRoom/controller/ChatRoomController.java @@ -44,13 +44,13 @@ public GlobalResponse createRoom( //채팅방 입장 @PostMapping("/room/join/{roomId}") - public GlobalResponse joinRoom(@PathVariable Long roomId) { + public GlobalResponse joinRoom(@PathVariable Long roomId, @RequestBody ChatRoomRequest chatRoomRequest) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); if (authentication instanceof OAuth2AuthenticationToken) { CustomOAuth2User principal = (CustomOAuth2User) authentication.getPrincipal(); Long userId = principal.getId(); // getId()를 통해 userId를 추출 - chatRoomService.joinRoom(roomId, userId); // userId를 전달 + chatRoomService.joinRoom(roomId, userId, chatRoomRequest); // userId를 전달 return GlobalResponse.success("해당 채팅방에 입장하셨습니다"); } else { throw new IllegalArgumentException("로그인 후에 이용해 주세요."); diff --git a/src/main/java/cmf/commitField/domain/chat/chatRoom/controller/request/ChatRoomRequest.java b/src/main/java/cmf/commitField/domain/chat/chatRoom/controller/request/ChatRoomRequest.java index 455138c..fabf95c 100644 --- a/src/main/java/cmf/commitField/domain/chat/chatRoom/controller/request/ChatRoomRequest.java +++ b/src/main/java/cmf/commitField/domain/chat/chatRoom/controller/request/ChatRoomRequest.java @@ -21,5 +21,7 @@ public class ChatRoomRequest { @Max(100) private Integer userCountMax; + @Length(min = 4, max = 20) + private String password; } diff --git a/src/main/java/cmf/commitField/domain/chat/chatRoom/entity/ChatRoom.java b/src/main/java/cmf/commitField/domain/chat/chatRoom/entity/ChatRoom.java index 5019ee7..a390156 100644 --- a/src/main/java/cmf/commitField/domain/chat/chatRoom/entity/ChatRoom.java +++ b/src/main/java/cmf/commitField/domain/chat/chatRoom/entity/ChatRoom.java @@ -41,6 +41,10 @@ public class ChatRoom extends BaseEntity { @OneToMany(mappedBy = "chatRoom", fetch = FetchType.LAZY) private List hearts; + private String password; + + private Boolean isPrivate; + @Override public String toString() { return "ChatRoom{" + diff --git a/src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomService.java b/src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomService.java index c9c8795..30a0772 100644 --- a/src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomService.java +++ b/src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomService.java @@ -34,4 +34,5 @@ public interface ChatRoomService { List myHeartRoomList(Long userId, Pageable pageable); + void joinRoom(Long roomId, Long userId, ChatRoomRequest chatRoomRequest); } diff --git a/src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomServiceImpl.java b/src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomServiceImpl.java index 52d8668..f3fa701 100644 --- a/src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomServiceImpl.java +++ b/src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomServiceImpl.java @@ -52,6 +52,7 @@ public void createRoom(ChatRoomRequest chatRoomRequest, Long userId) { // 유저정보 조회 User findUser = userRepository.findById(userId) .orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER)); + String password = chatRoomRequest.getPassword(); // findUser가 null이 아닐 경우, User의 ID를 사용 if (findUser == null) { @@ -65,7 +66,12 @@ public void createRoom(ChatRoomRequest chatRoomRequest, Long userId) { .userCountMax(chatRoomRequest.getUserCountMax()) .createdAt(LocalDateTime.now()) .modifiedAt(LocalDateTime.now()) + .isPrivate(false) .build(); + if (password != null) { + chatRoom.setPassword(password); + chatRoom.setIsPrivate(true); + } ChatRoom savedChatRoom = chatRoomRepository.save(chatRoom); // 연관관계 user_chat room 생성 @@ -76,6 +82,11 @@ public void createRoom(ChatRoomRequest chatRoomRequest, Long userId) { userChatRoomRepository.save(userChatRoom); } + @Override + public void joinRoom(Long roomId, Long userId) { + + } + // 방 조회 DTO 변환 메서드 추출 private static List getChatRoomDtos(Page all) { return all.stream() @@ -111,7 +122,7 @@ public List getUserByRoomPartList(Long userId, Pageable pageable) { @Override @Transactional - public void joinRoom(Long roomId, Long userId) { + public void joinRoom(Long roomId, Long userId, ChatRoomRequest chatRoomRequest) { RLock lock = redissonClient.getLock("joinRoomLock:" + roomId); try { boolean available = lock.tryLock(1, TimeUnit.SECONDS); @@ -129,6 +140,15 @@ public void joinRoom(Long roomId, Long userId) { // user_chatroom 현재 인원 카운트 (비즈니스 로직) Long currentUserCount = userChatRoomRepository.countNonLockByChatRoomId(roomId); // lock (기존) + if (chatRoom.getIsPrivate() && chatRoomRequest.getPassword() == null) { + throw new CustomException(ErrorCode.NEED_TO_PASSWORD); + + + + } + if (chatRoom.getIsPrivate() && !chatRoomRequest.getPassword().equals(chatRoom.getPassword())) { + throw new CustomException(ErrorCode.ROOM_PASSWORD_MISMATCH); + } List userChatRoomByChatRoomId = userChatRoomRepository .findUserChatRoomByChatRoom_Id(roomId); @@ -160,6 +180,17 @@ public void joinRoom(Long roomId, Long userId) { @Transactional public void outRoom(Long userId, Long roomId) { ChatRoom room = getChatRoom(roomId); + List userByChatRoomId = userChatRoomRepository + .findUserByChatRoomId(roomId); + List userIds = new ArrayList<>(); + for (UserChatRoom userChatRoom : userByChatRoomId) { + Long id = userChatRoom.getUser().getId(); + userIds.add(id); + } + // 만약 방에 없는데 나가기를 시도한 경우 + if (!userIds.contains(userId)) { + throw new CustomException(ErrorCode.METHOD_NOT_ALLOWED); + } // 방장이 아니라면 if (!Objects.equals(room.getRoomCreator(), userId)) { userChatRoomRepository.deleteUserChatRoomByChatRoom_IdAndUserId(roomId, userId); diff --git a/src/main/java/cmf/commitField/domain/chat/userChatRoom/repository/UserChatRoomRepository.java b/src/main/java/cmf/commitField/domain/chat/userChatRoom/repository/UserChatRoomRepository.java index ce0ef5d..68dfd2c 100644 --- a/src/main/java/cmf/commitField/domain/chat/userChatRoom/repository/UserChatRoomRepository.java +++ b/src/main/java/cmf/commitField/domain/chat/userChatRoom/repository/UserChatRoomRepository.java @@ -32,6 +32,7 @@ public interface UserChatRoomRepository extends JpaRepository findUserChatRoomByChatRoom_Id(Long chatRoomId); List findUserChatRoomByChatRoomId(Long roomId); - + //out room 조회 + List findUserByChatRoomId(Long roomId); } diff --git a/src/main/java/cmf/commitField/global/error/ErrorCode.java b/src/main/java/cmf/commitField/global/error/ErrorCode.java index 42d3792..dd9a2b8 100644 --- a/src/main/java/cmf/commitField/global/error/ErrorCode.java +++ b/src/main/java/cmf/commitField/global/error/ErrorCode.java @@ -32,8 +32,10 @@ public enum ErrorCode { TOKEN_EXPIRED(HttpStatus.BAD_REQUEST, "토큰이 만료되었습니다."), - // member + // user_room MEMBER_NOT_FOUND(HttpStatus.NOT_FOUND, "사용자를 찾을 수 없습니다"), + NEED_TO_PASSWORD(HttpStatus.BAD_REQUEST, "비밀번호를 입력해야 합니다."), + ROOM_PASSWORD_MISMATCH(HttpStatus.BAD_REQUEST, "방 비밀번호가 일치하지 않습니다."), // season NOT_FOUND_SEASON(HttpStatus.NOT_FOUND, "시즌을 찾을 수 없습니다."), @@ -57,6 +59,7 @@ public enum ErrorCode { NOT_EXIST_CLIENT(HttpStatus.NOT_FOUND, "채팅방에 사용자가 존재하지 않습니다."), NOT_ROOM_MEMBER(HttpStatus.FORBIDDEN, "채팅방에 속한 유저가 아닙니다."), + //chatMessage EMPTY_MESSAGE(HttpStatus.BAD_REQUEST, "채팅 메시지는 공백으로 보낼 수 없습니다."), CHAT_NOT_FOUND(HttpStatus.NOT_FOUND, "해당 채팅방의 메시지들을 찾지 못했습니다."), From 245641f8da1d7b3bbc3df3444a55f513b8356745 Mon Sep 17 00:00:00 2001 From: Sukyeong Sung Date: Sat, 1 Mar 2025 00:26:18 +0900 Subject: [PATCH 2/5] =?UTF-8?q?Feat:=20=EC=9B=B9=EC=86=8C=EC=BC=93=20Handl?= =?UTF-8?q?er=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/websocket/ChatWebSocketHandler.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/java/cmf/commitField/global/websocket/ChatWebSocketHandler.java b/src/main/java/cmf/commitField/global/websocket/ChatWebSocketHandler.java index 2565f47..659c622 100644 --- a/src/main/java/cmf/commitField/global/websocket/ChatWebSocketHandler.java +++ b/src/main/java/cmf/commitField/global/websocket/ChatWebSocketHandler.java @@ -4,10 +4,7 @@ import cmf.commitField.global.exception.CustomException; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; -import org.springframework.web.socket.CloseStatus; -import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.WebSocketMessage; -import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.*; import java.io.IOException; import java.util.*; @@ -104,4 +101,13 @@ private Long extractRoomId(WebSocketSession session) { } return roomId; } + //메세지 전송 + public void sendMessage(String payload) throws Exception { + for (List sessions : chatRooms.values()) { + for (WebSocketSession session : sessions) { + TextMessage msg = new TextMessage(payload); + session.sendMessage(msg); + } + } + } } \ No newline at end of file From 8b555715e23b9807f596cdaf82c6f61e59ea11e9 Mon Sep 17 00:00:00 2001 From: Sukyeong Sung Date: Sat, 1 Mar 2025 00:40:21 +0900 Subject: [PATCH 3/5] =?UTF-8?q?Feat:=20consumers,=20producers=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commitField/global/kafka/Consumers.java | 26 +++++++++++++++++++ .../commitField/global/kafka/Producers.java | 20 ++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 src/main/java/cmf/commitField/global/kafka/Consumers.java create mode 100644 src/main/java/cmf/commitField/global/kafka/Producers.java diff --git a/src/main/java/cmf/commitField/global/kafka/Consumers.java b/src/main/java/cmf/commitField/global/kafka/Consumers.java new file mode 100644 index 0000000..20fd120 --- /dev/null +++ b/src/main/java/cmf/commitField/global/kafka/Consumers.java @@ -0,0 +1,26 @@ +package cmf.commitField.global.kafka; + +import cmf.commitField.domain.chat.chatMessage.entity.ChatMsg; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.messaging.handler.annotation.Payload; +import org.springframework.stereotype.Component; + +import java.util.HashMap; +import java.util.Map; + +@Component +@RequiredArgsConstructor +public class Consumers { + private final Logger logger = LoggerFactory.getLogger(Consumers.class); + + public void consume(@Payload ChatMsg chatMsg) throws Exception { + logger.info("Consume msg : roomId : '{}', nickname :'{}', sender : '{}' ", + chatMsg.getId(), chatMsg.getUser().getNickname(), chatMsg.getMessage()); + Map msg = new HashMap<>(); + msg.put("roomNum", String.valueOf(chatMsg.getChatRoom().getId())); + msg.put("message", chatMsg.getMessage()); + msg.put("sender", chatMsg.getUser().getNickname()); + } +} diff --git a/src/main/java/cmf/commitField/global/kafka/Producers.java b/src/main/java/cmf/commitField/global/kafka/Producers.java new file mode 100644 index 0000000..877b214 --- /dev/null +++ b/src/main/java/cmf/commitField/global/kafka/Producers.java @@ -0,0 +1,20 @@ +package cmf.commitField.global.kafka; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class Producers { + private final Logger logger = LoggerFactory.getLogger(Producers.class); +// private final KafkaTemplate kafkaTemplate; + + public void produceMessage(String topic, String payload) { + logger.info("Topic : '{}' to Payload : '{}'", topic, payload); + + } +} From 3e3543865ade7614cf7c3138b32e70a89da98e1a Mon Sep 17 00:00:00 2001 From: Sukyeong Sung Date: Tue, 4 Mar 2025 09:45:37 +0900 Subject: [PATCH 4/5] =?UTF-8?q?Feat:=20msg=20=EC=B1=84=ED=8C=85=EB=B0=A9?= =?UTF-8?q?=20=EC=A1=B0=ED=9A=8C=20(user=20=EB=93=A4=EC=96=B4=EC=98=A8=20?= =?UTF-8?q?=EC=8B=9C=EC=A0=90)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chat/chatMessage/dto/ChatMsgDto.java | 6 ++-- .../service/ChatMessageServiceImpl.java | 33 ++++++++++++++----- .../chatRoom/service/ChatRoomServiceImpl.java | 12 ++++--- .../userChatRoom/entity/UserChatRoom.java | 5 +++ .../repository/UserChatRoomRepository.java | 5 +++ 5 files changed, 44 insertions(+), 17 deletions(-) diff --git a/src/main/java/cmf/commitField/domain/chat/chatMessage/dto/ChatMsgDto.java b/src/main/java/cmf/commitField/domain/chat/chatMessage/dto/ChatMsgDto.java index 0720d97..4a44efb 100644 --- a/src/main/java/cmf/commitField/domain/chat/chatMessage/dto/ChatMsgDto.java +++ b/src/main/java/cmf/commitField/domain/chat/chatMessage/dto/ChatMsgDto.java @@ -1,9 +1,6 @@ package cmf.commitField.domain.chat.chatMessage.dto; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import java.time.LocalDateTime; @@ -11,6 +8,7 @@ @Setter @NoArgsConstructor @AllArgsConstructor +@Builder public class ChatMsgDto { private Long chatMsgId; private Long userId; diff --git a/src/main/java/cmf/commitField/domain/chat/chatMessage/service/ChatMessageServiceImpl.java b/src/main/java/cmf/commitField/domain/chat/chatMessage/service/ChatMessageServiceImpl.java index a75aa1a..eac01d8 100644 --- a/src/main/java/cmf/commitField/domain/chat/chatMessage/service/ChatMessageServiceImpl.java +++ b/src/main/java/cmf/commitField/domain/chat/chatMessage/service/ChatMessageServiceImpl.java @@ -8,6 +8,8 @@ import cmf.commitField.domain.chat.chatMessage.repository.ChatMessageRepository; import cmf.commitField.domain.chat.chatRoom.entity.ChatRoom; import cmf.commitField.domain.chat.chatRoom.repository.ChatRoomRepository; +import cmf.commitField.domain.chat.userChatRoom.entity.UserChatRoom; +import cmf.commitField.domain.chat.userChatRoom.repository.UserChatRoomRepository; import cmf.commitField.domain.user.entity.User; import cmf.commitField.domain.user.repository.UserRepository; import cmf.commitField.global.error.ErrorCode; @@ -17,8 +19,9 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; +import java.util.Optional; @Service @RequiredArgsConstructor @@ -28,6 +31,7 @@ public class ChatMessageServiceImpl implements ChatMessageService { private final UserRepository userRepository; private final ChatRoomRepository chatRoomRepository; private final ChatMessageCustomRepository chatMessageCustomRepository; + private final UserChatRoomRepository userChatRoomRepository; @Override public ChatMsgResponse sendMessage(ChatMsgRequest message, Long userId, Long roomId) { @@ -61,13 +65,24 @@ public List getRoomChatMsgList(Long roomId, Long userId, Long lastId .orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER)); List chatMsgsList = chatMessageCustomRepository.findChatRoomIdByChatMsg(roomId, lastId); - return chatMsgsList.stream().map(chatMsg -> new ChatMsgDto( - chatMsg.getId(), - chatMsg.getUser().getId(), - chatMsg.getUser().getNickname(), - chatMsg.getMessage(), - chatMsg.getCreatedAt() - )) - .collect(Collectors.toList()); + Optional joinUser = userChatRoomRepository.findByUserIdAndChatRoomId(userId,roomId); + if (joinUser.isEmpty()) { + throw new CustomException(ErrorCode.NOT_FOUND_USER); + } + LocalDateTime joinDt = joinUser.get().getJoinDt(); + List chatMsgDtos = new ArrayList<>(); + for (ChatMsg chatMsg : chatMsgsList) { + ChatMsgDto build = ChatMsgDto.builder() + .chatMsgId(chatMsg.getId()) + .nickname(chatMsg.getUser().getNickname()) + .sendAt(chatMsg.getCreatedAt()) + .message(chatMsg.getMessage()) + .userId(chatMsg.getUser().getId()) + .build(); + if (build.getSendAt().isAfter(joinDt)) { + chatMsgDtos.add(build); + } + } + return chatMsgDtos; } } diff --git a/src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomServiceImpl.java b/src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomServiceImpl.java index f3fa701..aa706c4 100644 --- a/src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomServiceImpl.java +++ b/src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomServiceImpl.java @@ -23,13 +23,14 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; +import static java.time.LocalDateTime.now; + @Service @RequiredArgsConstructor public class ChatRoomServiceImpl implements ChatRoomService { @@ -64,8 +65,8 @@ public void createRoom(ChatRoomRequest chatRoomRequest, Long userId) { .roomCreator(findUser.getId()) .title(chatRoomRequest.getTitle()) .userCountMax(chatRoomRequest.getUserCountMax()) - .createdAt(LocalDateTime.now()) - .modifiedAt(LocalDateTime.now()) + .createdAt(now()) + .modifiedAt(now()) .isPrivate(false) .build(); if (password != null) { @@ -78,6 +79,7 @@ public void createRoom(ChatRoomRequest chatRoomRequest, Long userId) { UserChatRoom userChatRoom = UserChatRoom.builder() .user(findUser) .chatRoom(savedChatRoom) + .joinDt(now()) .build(); userChatRoomRepository.save(userChatRoom); } @@ -87,6 +89,7 @@ public void joinRoom(Long roomId, Long userId) { } + // 방 조회 DTO 변환 메서드 추출 private static List getChatRoomDtos(Page all) { return all.stream() @@ -164,6 +167,7 @@ public void joinRoom(Long roomId, Long userId, ChatRoomRequest chatRoomRequest) UserChatRoom userChatRoom = UserChatRoom.builder() .user(findUser) .chatRoom(chatRoom) + .joinDt(now()) .build(); userChatRoomRepository.save(userChatRoom); // 비즈니스 로직 끝 @@ -228,7 +232,7 @@ public void updateRoom(Long roomId, ChatRoomUpdateRequest chatRoomUpdateRequest, if (currentRoomTitle.equals(chatRoomUpdateRequest.getTitle())) { throw new CustomException(ErrorCode.REQUEST_SAME_AS_CURRENT_TITLE); } - room.update(chatRoomUpdateRequest.getTitle(), LocalDateTime.now()); + room.update(chatRoomUpdateRequest.getTitle(), now()); chatRoomRepository.save(room); } diff --git a/src/main/java/cmf/commitField/domain/chat/userChatRoom/entity/UserChatRoom.java b/src/main/java/cmf/commitField/domain/chat/userChatRoom/entity/UserChatRoom.java index 504e6c8..247cb28 100644 --- a/src/main/java/cmf/commitField/domain/chat/userChatRoom/entity/UserChatRoom.java +++ b/src/main/java/cmf/commitField/domain/chat/userChatRoom/entity/UserChatRoom.java @@ -10,6 +10,8 @@ import lombok.*; import lombok.experimental.SuperBuilder; +import java.time.LocalDateTime; + @Entity @Getter @Setter @@ -25,4 +27,7 @@ public class UserChatRoom extends BaseEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "chat_room_id",nullable = false) private ChatRoom chatRoom; + + + private LocalDateTime joinDt; } diff --git a/src/main/java/cmf/commitField/domain/chat/userChatRoom/repository/UserChatRoomRepository.java b/src/main/java/cmf/commitField/domain/chat/userChatRoom/repository/UserChatRoomRepository.java index 68dfd2c..e21b73e 100644 --- a/src/main/java/cmf/commitField/domain/chat/userChatRoom/repository/UserChatRoomRepository.java +++ b/src/main/java/cmf/commitField/domain/chat/userChatRoom/repository/UserChatRoomRepository.java @@ -7,6 +7,7 @@ import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface UserChatRoomRepository extends JpaRepository { @@ -35,4 +36,8 @@ public interface UserChatRoomRepository extends JpaRepository findUserByChatRoomId(Long roomId); + Optional findByUserId(Long userId); + //채팅방 join한 user + Optional findByUserIdAndChatRoomId(Long userId, Long chatRoomId); + } From 8d89ffda6e080fd82ea8fa1cdd04dd81154e3944 Mon Sep 17 00:00:00 2001 From: Sukyeong Sung Date: Tue, 4 Mar 2025 15:33:08 +0900 Subject: [PATCH 5/5] =?UTF-8?q?Feat:=20=EC=9B=B9=EC=86=8C=EC=BC=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../global/websocket/WebSocketConfig.java | 32 +++++-------------- 1 file changed, 8 insertions(+), 24 deletions(-) diff --git a/src/main/java/cmf/commitField/global/websocket/WebSocketConfig.java b/src/main/java/cmf/commitField/global/websocket/WebSocketConfig.java index f1abf47..b2ff398 100644 --- a/src/main/java/cmf/commitField/global/websocket/WebSocketConfig.java +++ b/src/main/java/cmf/commitField/global/websocket/WebSocketConfig.java @@ -2,35 +2,19 @@ import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; -import org.springframework.messaging.simp.config.MessageBrokerRegistry; -import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; -import org.springframework.web.socket.config.annotation.StompEndpointRegistry; -import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; +import org.springframework.web.socket.config.annotation.EnableWebSocket; +import org.springframework.web.socket.config.annotation.WebSocketConfigurer; +import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; @Configuration @RequiredArgsConstructor -@EnableWebSocketMessageBroker // STOMP를 사용하기 위해 변경 -public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { +@EnableWebSocket +public class WebSocketConfig implements WebSocketConfigurer { - @Override - public void registerStompEndpoints(StompEndpointRegistry registry) { - // 클라이언트가 연결할 WebSocket 엔드포인트 - registry.addEndpoint("/ws-stomp") - .setAllowedOriginPatterns("*") // setAllowedOriginPatterns 사용 - // SockJS 사용 (WebSocket 미지원 브라우저 대응) - .withSockJS(); - - registry.addEndpoint("/ws") - .setAllowedOriginPatterns("*") // setAllowedOriginPatterns 사용 - .withSockJS(); - } + private final ChatWebSocketHandler chatWebSocketHandler; @Override - public void configureMessageBroker(MessageBrokerRegistry registry) { - // 클라이언트가 메시지를 보낼 때 사용할 경로(prefix) - registry.setApplicationDestinationPrefixes("/app"); - - // 메시지를 구독하는 경로(prefix) - registry.enableSimpleBroker("/sub", "/topic", "/queue"); + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + registry.addHandler(chatWebSocketHandler, "/chat").setAllowedOrigins("*"); } }