이전글
https://greed-yb.tistory.com/282
controller
import com.example.practice.service.widget.WidgetService;
import com.example.practice.vo.UserVo;
import com.example.practice.vo.messenger.MessageVo;
import com.example.practice.vo.messenger.RoomVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
public class WidgetController {
@Autowired
private WidgetService widgetService;
/**
* 사내 메신저 유저 정보 가져오기
* @return
* @throws Exception
*/
@GetMapping("/messengerInfo")
public List<UserVo> messengerInfo() throws Exception{
// Spring Security 에서 로그인한 사용자 id 가져오기
String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
List<UserVo> vo = widgetService.messengerInfo(username);
return vo;
}
/**
* 선택한 대상과의 채팅방이 있는지 체크하여 있다면 대화내용을 불러옴
* @param targetId
* @param userId
* @return
* @throws Exception
*/
@GetMapping("/chatRoomInfo")
public List<MessageVo> chatRoomInfo(@RequestParam String targetId, @RequestParam String userId) throws Exception{
Long checkRoom = widgetService.chatRoomInfo(targetId , userId);
List<MessageVo> vo = null;
if (checkRoom == null){
vo = new ArrayList<>();
}else{
widgetService.readChat(String.valueOf(checkRoom), userId);
vo = widgetService.selectChatInfo(checkRoom);
}
return vo;
}
/**
* 채팅방이 없으면 생성 후 메세지 저장
* @param id
* @param roomDetail
* @param targetId
* @param userId
* @return
* @throws Exception
*/
@PostMapping("/sendMsg")
public Map<String, Object> sendMsg(@RequestParam String id , @RequestParam String roomDetail, @RequestParam String targetId, @RequestParam String userId) throws Exception{
Map<String, Object> msg = new HashMap<>();
Long roomId = 0L;
if(id.equals("")){
// 마지막 채팅방 id의 다음 값을 가져온다
roomId = widgetService.selectNextRoomId();
// 채팅방 생성
widgetService.createRoom(roomId);
// 채팅방에 참여해있는 유저 insert(본인과 상대방)
String[] arrId = {targetId, userId};
for (int i = 0; i < arrId.length; i++) {
widgetService.createRoomUser(roomId , arrId[i]);
}
}else{
roomId = Long.valueOf(id);
}
try {
// 메시지 insert
widgetService.insertMsg(roomId , roomDetail, userId);
String sendTargetid = widgetService.targetId(id , userId);
msg.put("msg" , "success");
msg.put("roomId" , roomId);
msg.put("userId" , sendTargetid);
return msg;
}catch (Exception e){
e.printStackTrace();
msg.put("msg" , "fail");
return msg;
}
}
/**
* 읽지 않은 메시지 수
* @return
* @throws Exception
*/
@GetMapping("/messengerReadCount")
public String messengerReadCount() throws Exception{
// Spring Security 에서 로그인한 사용자 id 가져오기
String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
Long count = widgetService.messengerReadCount(username);
String result = String.valueOf(count);
return result;
}
/**
* 채팅방 목록 가져오기
* @return
* @throws Exception
*/
@GetMapping("/roomList")
public List<RoomVo> roomList() throws Exception{
// Spring Security 에서 로그인한 사용자 id 가져오기
String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
List<RoomVo> vo = widgetService.roomList(username);
return vo;
}
/**
* 채팅방 접속
* @param id
* @return
* @throws Exception
*/
@GetMapping("/chatRoomEnter")
public List<MessageVo> chatRoomEnter(@RequestParam String id) throws Exception{
// Spring Security 에서 로그인한 사용자 id 가져오기
String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
widgetService.readChat(id, username);
List<MessageVo> vo = widgetService.chatRoomEnter(id);
return vo;
}
}
'개발 > Spring' 카테고리의 다른 글
[SpringBoot] WebSocket 채팅방 구현(6) - mapper (0) | 2024.08.18 |
---|---|
[SpringBoot] WebSocket 채팅방 구현(5) - service (0) | 2024.08.18 |
[SpringBoot] WebSocket 채팅방 구현(3) - html , js (0) | 2024.08.18 |
[SpringBoot] WebSocket 채팅방 구현(2) - WebSocketConfig (0) | 2024.08.17 |
[SpringBoot] WebSocket 채팅방 구현(1) - 구현 화면 (0) | 2024.08.17 |
댓글