diff --git a/src/main/java/com/zatch/zatchserver/config/WebSocketConfig.java b/src/main/java/com/zatch/zatchserver/config/WebSocketConfig.java index 732c900..99686af 100644 --- a/src/main/java/com/zatch/zatchserver/config/WebSocketConfig.java +++ b/src/main/java/com/zatch/zatchserver/config/WebSocketConfig.java @@ -1,8 +1,8 @@ package com.zatch.zatchserver.config; -import com.zatch.zatchserver.Handler.WebSocketHandler; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; @@ -15,6 +15,16 @@ public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { // Handler와 webSocket 주소를 WebSocketHandlerRegistry에 추가 -> 해당 주소로 접근하면 웹소켓 연결 가능 - registry.addHandler(webSocketHandler, "/ws/chat").setAllowedOrigins("*"); + registry.addHandler(webSocketHandler, "/ws/chat/{userId}").setAllowedOrigins("*"); } + +// @Override +// public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { +// registry.addHandler(chatHandler(), "/chat/{userId}").setAllowedOrigins("*"); +// } +// +// @Bean +// public WebSocketHandler chatHandler() { +// return (WebSocketHandler) new ChatHandler(); +// } } diff --git a/src/main/java/com/zatch/zatchserver/controller/ChatController.java b/src/main/java/com/zatch/zatchserver/controller/ChatController.java index 1c10b2e..5476b8d 100644 --- a/src/main/java/com/zatch/zatchserver/controller/ChatController.java +++ b/src/main/java/com/zatch/zatchserver/controller/ChatController.java @@ -14,6 +14,7 @@ import javax.servlet.http.HttpServletRequest; import java.util.List; +import java.util.Map; @RequiredArgsConstructor @RestController @@ -23,15 +24,25 @@ public class ChatController { private final ChatService chatService; @PostMapping + @ApiOperation(value = "채팅방 생성", notes = "채팅방 생성 API") public ChatRoom createRoom(@RequestBody String name) { return chatService.createRoom(name); } + // 현재 열려있는 채팅방 @GetMapping + @ApiOperation(value = "현재 열려있는 채팅방", notes = "현재 열려있는 채팅방 API") public List findAllRoom() { return chatService.findAllRoom(); } + // 모든 채팅방 리스트 + @GetMapping("/chat_list/{userId}") + @ApiOperation(value = "모든 채팅방 리스트", notes = "모든 채팅방 리스트 API") + public List> getAllChatRoom(@PathVariable("userId") String userId) { + return chatService.getAllChatRoom(userId); + } + //(거래 후) 별점, 후기 등록하기 @PostMapping("/after_deal") @ApiOperation(value = "별점&후기 등록", notes = "별점&후기 등록 API") diff --git a/src/main/java/com/zatch/zatchserver/domain/ChatRoom.java b/src/main/java/com/zatch/zatchserver/domain/ChatRoom.java index 315ce0b..6698dc5 100644 --- a/src/main/java/com/zatch/zatchserver/domain/ChatRoom.java +++ b/src/main/java/com/zatch/zatchserver/domain/ChatRoom.java @@ -22,7 +22,7 @@ public ChatRoom(String roomId, String name) { } public void handlerActions(WebSocketSession session, ChatMessage chatMessage, ChatService chatService) { - chatService.updateDB(String.valueOf(chatMessage.getType()), chatMessage.getRoomId(), chatMessage.getSender(), chatMessage.getMessage()); + chatService.updateDB(String.valueOf(chatMessage.getType()), chatMessage.getRoomId(), chatMessage.getSender(), chatMessage.getReceiver(), chatMessage.getMessage()); if (chatMessage.getType().equals(ChatMessage.MessageType.ENTER)) { sessions.add(session); chatMessage.setMessage(chatMessage.getSender() + "님이 입장했습니다."); diff --git a/src/main/java/com/zatch/zatchserver/dto/ChatMessage.java b/src/main/java/com/zatch/zatchserver/dto/ChatMessage.java index 36fe0f2..0af7e78 100644 --- a/src/main/java/com/zatch/zatchserver/dto/ChatMessage.java +++ b/src/main/java/com/zatch/zatchserver/dto/ChatMessage.java @@ -15,5 +15,6 @@ public enum MessageType{ private MessageType type; private String roomId; private String sender; + private String receiver; private String message; } diff --git a/src/main/java/com/zatch/zatchserver/repository/ChatRepository.java b/src/main/java/com/zatch/zatchserver/repository/ChatRepository.java index 75f518c..94d60e7 100644 --- a/src/main/java/com/zatch/zatchserver/repository/ChatRepository.java +++ b/src/main/java/com/zatch/zatchserver/repository/ChatRepository.java @@ -1,10 +1,14 @@ package com.zatch.zatchserver.repository; +import com.zatch.zatchserver.domain.ChatRoom; import org.springframework.http.HttpStatus; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import org.springframework.web.server.ResponseStatusException; +import java.util.List; +import java.util.Map; + @Repository public class ChatRepository implements ChatRepositoryImpl { private final JdbcTemplate jdbcTemplate; @@ -14,12 +18,28 @@ public ChatRepository(JdbcTemplate jdbcTemplate) { } @Override - public String updateDB(String type, String roomId, String sender, String message) { + public List> selectAllChatRoom(String userId) { + try { + String sql = "SELECT chat_id, chat_room_id, chat_sender, chat_receiver, chat_message, profile_img_url, chat.updated_at " + + "FROM chat LEFT JOIN user on user.user_id = chat.chat_receiver " + + "WHERE chat_sender = ? or chat_receiver = ? " + + "GROUP BY chat_room_id " + + "ORDER BY chat.updated_at DESC;"; + Object[] params = {userId, userId}; + System.out.println("User's Chat List SQL select"); + return jdbcTemplate.queryForList(sql, params); + } catch (Exception e){ + throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, "User's Chat List Not Found"); + } + } + + @Override + public String updateDB(String type, String roomId, String sender, String receiver, String message) { try { - String chat_info = "type : " + type + " / roomId : " + roomId + " / sender" + sender + " / message" + message; + String chat_info = "type : " + type + " / roomId : " + roomId + " / sender" + sender + " / receiver" + receiver + " / message" + message; System.out.println(chat_info); - String sql = "INSERT INTO chat(chat_type, chat_room_id, chat_sender, chat_message) VALUES(?, ?, ?, ?)"; - Object[] params = {type, roomId, sender, message}; + String sql = "INSERT INTO chat(chat_type, chat_room_id, chat_sender, chat_receiver, chat_message) VALUES(?, ?, ?, ?, ?)"; + Object[] params = {type, roomId, sender, receiver, message}; jdbcTemplate.update(sql, params); System.out.println("chat sql insert"); return chat_info; diff --git a/src/main/java/com/zatch/zatchserver/repository/ChatRepositoryImpl.java b/src/main/java/com/zatch/zatchserver/repository/ChatRepositoryImpl.java index cff76ea..7ab775f 100644 --- a/src/main/java/com/zatch/zatchserver/repository/ChatRepositoryImpl.java +++ b/src/main/java/com/zatch/zatchserver/repository/ChatRepositoryImpl.java @@ -1,6 +1,12 @@ package com.zatch.zatchserver.repository; +import com.zatch.zatchserver.domain.ChatRoom; + +import java.util.List; +import java.util.Map; + public interface ChatRepositoryImpl { - String updateDB(String type, String roomId, String sender, String message); + List> selectAllChatRoom(String userId); + String updateDB(String type, String roomId, String sender, String receiver, String message); String after_deal(Long send_user_id, Long receive_user_id, String review_context, int star_rating); } diff --git a/src/main/java/com/zatch/zatchserver/service/ChatService.java b/src/main/java/com/zatch/zatchserver/service/ChatService.java index 91c793b..7e077c1 100644 --- a/src/main/java/com/zatch/zatchserver/service/ChatService.java +++ b/src/main/java/com/zatch/zatchserver/service/ChatService.java @@ -4,12 +4,14 @@ import org.springframework.web.socket.WebSocketSession; import java.util.List; +import java.util.Map; public interface ChatService { List findAllRoom(); ChatRoom createRoom(String name); + List> getAllChatRoom(String userId); ChatRoom findRoomById(String roomId); void sendMessage(WebSocketSession session, T message); String after_deal(Long send_user_id, Long receive_user_id, String review_context, int star_rating); - String updateDB(String type, String roomId, String sender, String message); + String updateDB(String type, String roomId, String sender, String receiver, String message); } diff --git a/src/main/java/com/zatch/zatchserver/service/ChatServiceImpl.java b/src/main/java/com/zatch/zatchserver/service/ChatServiceImpl.java index 3f31074..a2e9def 100644 --- a/src/main/java/com/zatch/zatchserver/service/ChatServiceImpl.java +++ b/src/main/java/com/zatch/zatchserver/service/ChatServiceImpl.java @@ -42,9 +42,15 @@ public ChatRoom createRoom(String name) { .name(name) .build(); chatRooms.put(randomId, chatRoom); + System.out.println("chatRooms : "+ chatRooms.values()); return chatRoom; } + @Override + public List> getAllChatRoom(String userId) { + return chatRepository.selectAllChatRoom(userId); + } + public void sendMessage(WebSocketSession session, T message) { try{ session.sendMessage(new TextMessage(objectMapper.writeValueAsString(message))); @@ -59,7 +65,7 @@ public String after_deal(Long send_user_id, Long receive_user_id, String review_ } @Override - public String updateDB(String type, String roomId, String sender, String message) { - return chatRepository.updateDB(type, roomId, sender, message); + public String updateDB(String type, String roomId, String sender, String receiver, String message) { + return chatRepository.updateDB(type, roomId, sender, receiver, message); } }