使用若依后端架构 编写一个1对1单聊,可以查询历史聊天记录
时间: 2024-06-11 21:05:22 浏览: 7
以下是一个使用若依后端架构编写的1对1单聊的示例代码:
1. 首先,我们需要创建一个聊天室的数据模型:
```
@Entity
public class ChatRoom {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne
private User user1;
@OneToOne
private User user2;
@OneToMany(mappedBy = "chatRoom", cascade = CascadeType.ALL)
private List<ChatMessage> messages = new ArrayList<>();
// getters and setters
}
```
2. 接下来,我们需要创建一个聊天消息的数据模型:
```
@Entity
public class ChatMessage {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String message;
@ManyToOne
private User sender;
@ManyToOne
private User receiver;
@ManyToOne
private ChatRoom chatRoom;
private LocalDateTime timestamp;
// getters and setters
}
```
3. 然后,我们需要创建一个服务类来处理聊天室和聊天消息的逻辑:
```
@Service
public class ChatService {
@Autowired
ChatRoomRepository chatRoomRepository;
@Autowired
ChatMessageRepository chatMessageRepository;
public ChatRoom createChatRoom(User user1, User user2) {
ChatRoom chatRoom = new ChatRoom();
chatRoom.setUser1(user1);
chatRoom.setUser2(user2);
return chatRoomRepository.save(chatRoom);
}
public ChatMessage sendMessage(User sender, User receiver, ChatRoom chatRoom, String message) {
ChatMessage chatMessage = new ChatMessage();
chatMessage.setSender(sender);
chatMessage.setReceiver(receiver);
chatMessage.setChatRoom(chatRoom);
chatMessage.setMessage(message);
chatMessage.setTimestamp(LocalDateTime.now());
return chatMessageRepository.save(chatMessage);
}
public List<ChatMessage> getChatHistory(ChatRoom chatRoom) {
return chatMessageRepository.findByChatRoomOrderByTimestamp(chatRoom);
}
}
```
4. 最后,我们需要创建一个控制器来处理聊天室和聊天消息的请求:
```
@RestController
@RequestMapping("/chat")
public class ChatController {
@Autowired
ChatService chatService;
@GetMapping("/history/{chatRoomId}")
public List<ChatMessage> getChatHistory(@PathVariable Long chatRoomId) {
ChatRoom chatRoom = chatService.getChatRoomById(chatRoomId);
return chatService.getChatHistory(chatRoom);
}
@PostMapping("/{chatRoomId}")
public ChatMessage sendMessage(@PathVariable Long chatRoomId, @RequestBody String message) {
User sender = getCurrentUser();
ChatRoom chatRoom = chatService.getChatRoomById(chatRoomId);
User receiver = chatRoom.getReceiver(sender);
return chatService.sendMessage(sender, receiver, chatRoom, message);
}
private User getCurrentUser() {
// 获取当前用户的逻辑
}
}
```
这样,我们就可以使用若依后端架构来实现一个1对1单聊,并且可以查询历史聊天记录了。
相关推荐
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)