Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#15 feat : 1대1채팅, 채팅 리스트 #32

Merged
merged 1 commit into from
Apr 22, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 12 additions & 2 deletions src/main/java/com/zatch/zatchserver/config/WebSocketConfig.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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();
// }
}
11 changes: 11 additions & 0 deletions src/main/java/com/zatch/zatchserver/controller/ChatController.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

@RequiredArgsConstructor
@RestController
Expand All @@ -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<ChatRoom> findAllRoom() {
return chatService.findAllRoom();
}

// 모든 채팅방 리스트
@GetMapping("/chat_list/{userId}")
@ApiOperation(value = "모든 채팅방 리스트", notes = "모든 채팅방 리스트 API")
public List<Map<String, Object>> getAllChatRoom(@PathVariable("userId") String userId) {
return chatService.getAllChatRoom(userId);
}

//(거래 후) 별점, 후기 등록하기
@PostMapping("/after_deal")
@ApiOperation(value = "별점&후기 등록", notes = "별점&후기 등록 API")
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/com/zatch/zatchserver/domain/ChatRoom.java
Original file line number Diff line number Diff line change
Expand Up @@ -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() + "님이 입장했습니다.");
Expand Down
1 change: 1 addition & 0 deletions src/main/java/com/zatch/zatchserver/dto/ChatMessage.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ public enum MessageType{
private MessageType type;
private String roomId;
private String sender;
private String receiver;
private String message;
}
28 changes: 24 additions & 4 deletions src/main/java/com/zatch/zatchserver/repository/ChatRepository.java
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -14,12 +18,28 @@ public ChatRepository(JdbcTemplate jdbcTemplate) {
}

@Override
public String updateDB(String type, String roomId, String sender, String message) {
public List<Map<String, Object>> 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;
Expand Down
Original file line number Diff line number Diff line change
@@ -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<Map<String, Object>> 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);
}
4 changes: 3 additions & 1 deletion src/main/java/com/zatch/zatchserver/service/ChatService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import org.springframework.web.socket.WebSocketSession;

import java.util.List;
import java.util.Map;

public interface ChatService {
List<ChatRoom> findAllRoom();
ChatRoom createRoom(String name);
List<Map<String, Object>> getAllChatRoom(String userId);
ChatRoom findRoomById(String roomId);
<T> 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);
}
10 changes: 8 additions & 2 deletions src/main/java/com/zatch/zatchserver/service/ChatServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<Map<String, Object>> getAllChatRoom(String userId) {
return chatRepository.selectAllChatRoom(userId);
}

public <T> void sendMessage(WebSocketSession session, T message) {
try{
session.sendMessage(new TextMessage(objectMapper.writeValueAsString(message)));
Expand All @@ -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);
}
}