一、目标功能
用户可修改问题重新提问的功能
二、代码实现
Service层
// 添加消息修改方法
@Transactional
public QaMessage updateMessage(Long messageId, String newContent) {
QaMessage message = messageRepository.findById(messageId)
.orElseThrow(() -> new RuntimeException("Message not found"));
if (!"user".equals(message.getRole())) {
throw new IllegalArgumentException("只能修改用户消息");
}
// 清除关联的后续对话
message.getQaMessages().clear();
message.setContent(newContent);
message.setIsCurrent(true);
// 生成新的AI回答
String aiResponse = aiService.getAIResponse(newContent);
QaMessage aiMessage = new QaMessage();
aiMessage.setSession(message.getSession());
aiMessage.setRole("assistant");
aiMessage.setContent(aiResponse);
aiMessage.setParent(message);
aiMessage.setCreatedAt(Instant.now());
messageRepository.save(message);
return messageRepository.save(aiMessage);
}
2.Controller层
// 添加消息修改端点
@PutMapping("/messages/{messageId}")
public ResponseEntity<QaMessage> updateMessage(
@PathVariable Long messageId,
@RequestBody UpdateMessageRequest request) {
return ResponseEntity.ok(qaService.updateMessage(messageId, request.newContent()));
}
// DTO定义
public record UpdateMessageRequest(String newContent) {}