refactor(消息模块): 重构消息服务及控制器功能
重构消息模块,包括以下主要变更: 1. 将MessageRepository从CrudRepository扩展改为JpaRepository 2. 新增消息查询方法,支持按文章ID、父消息ID和昵称查询 3. 完善消息服务层逻辑,增加日志记录和错误处理 4. 扩展消息控制器API,新增获取根消息、回复消息等端点 5. 添加消息数据初始化组件和检查器 6. 优化全局异常处理,增加请求路径日志 同时调整文章模块: 1. 移除按作者查询文章功能 2. 统一分类查询参数命名 3. 优化文章服务层代码结构 配置变更: 1. 添加缓存相关依赖 2. 调整数据库连接配置 3. 暂时禁用Hibernate二级缓存
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
package com.qf.myafterprojecy.runner;
|
||||
|
||||
import com.qf.myafterprojecy.pojo.Message;
|
||||
import com.qf.myafterprojecy.pojo.ResponseMessage;
|
||||
import com.qf.myafterprojecy.pojo.dto.MessageDto;
|
||||
import com.qf.myafterprojecy.repository.MessageRepository;
|
||||
import com.qf.myafterprojecy.service.IMessageService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* 消息数据检查器,用于验证消息相关的业务代码是否正常工作
|
||||
*/
|
||||
@Component
|
||||
public class MessageDataChecker implements CommandLineRunner {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(MessageDataChecker.class);
|
||||
|
||||
@Autowired
|
||||
private MessageRepository messageRepository;
|
||||
|
||||
@Autowired
|
||||
private IMessageService messageService;
|
||||
|
||||
@Override
|
||||
public void run(String... args) throws Exception {
|
||||
logger.info("===== 消息数据检查器开始运行 =====");
|
||||
|
||||
// 检查数据库中是否已有消息数据
|
||||
long count = messageRepository.count();
|
||||
logger.info("当前数据库中消息数量: {}", count);
|
||||
|
||||
// 如果没有消息数据,添加一些测试数据
|
||||
if (count == 0) {
|
||||
logger.info("数据库中没有消息数据,开始添加测试数据...");
|
||||
addTestMessages();
|
||||
}
|
||||
|
||||
// 测试查询方法
|
||||
testQueryMethods();
|
||||
|
||||
// 测试服务层方法
|
||||
testServiceMethods();
|
||||
|
||||
logger.info("===== 消息数据检查器运行结束 =====");
|
||||
}
|
||||
|
||||
private void addTestMessages() {
|
||||
// 添加第一篇文章的评论
|
||||
Message message1 = new Message();
|
||||
message1.setNickname("张三");
|
||||
message1.setEmail("zhangsan@example.com");
|
||||
message1.setContent("这是一篇很棒的文章!");
|
||||
message1.setCreatedAt(new Date());
|
||||
message1.setArticleid(1);
|
||||
message1.setParentid(null); // 根评论
|
||||
messageRepository.save(message1);
|
||||
|
||||
// 添加回复
|
||||
Message reply1 = new Message();
|
||||
reply1.setNickname("李四");
|
||||
reply1.setEmail("lisi@example.com");
|
||||
reply1.setContent("同意你的观点!");
|
||||
reply1.setCreatedAt(new Date());
|
||||
reply1.setArticleid(1);
|
||||
reply1.setParentid(message1.getMessageid()); // 回复第一篇评论
|
||||
messageRepository.save(reply1);
|
||||
|
||||
// 添加第二篇文章的评论
|
||||
Message message2 = new Message();
|
||||
message2.setNickname("王五");
|
||||
message2.setEmail("wangwu@example.com");
|
||||
message2.setContent("学到了很多东西,谢谢分享!");
|
||||
message2.setCreatedAt(new Date());
|
||||
message2.setArticleid(2);
|
||||
message2.setParentid(null);
|
||||
messageRepository.save(message2);
|
||||
|
||||
logger.info("成功添加了{}条测试消息数据", messageRepository.count());
|
||||
}
|
||||
|
||||
private void testQueryMethods() {
|
||||
logger.info("===== 测试Repository查询方法 =====");
|
||||
|
||||
// 测试根据文章ID查询
|
||||
List<Message> article1Messages = messageRepository.findByArticleid(1);
|
||||
logger.info("文章ID为1的消息数量: {}", article1Messages.size());
|
||||
|
||||
// 测试查询所有根消息
|
||||
List<Message> rootMessages = messageRepository.findByParentidIsNull();
|
||||
logger.info("根消息数量: {}", rootMessages.size());
|
||||
|
||||
// 测试根据昵称模糊查询
|
||||
List<Message> zhangMessages = messageRepository.findByNicknameContaining("张");
|
||||
logger.info("昵称包含'张'的消息数量: {}", zhangMessages.size());
|
||||
|
||||
// 测试统计文章评论数量
|
||||
Long article1Count = messageRepository.countByArticleId(1);
|
||||
logger.info("文章ID为1的评论数量: {}", article1Count);
|
||||
|
||||
// 如果有根消息,测试查询回复
|
||||
if (!rootMessages.isEmpty()) {
|
||||
Integer firstRootId = rootMessages.get(0).getMessageid();
|
||||
List<Message> replies = messageRepository.findByParentid(firstRootId);
|
||||
logger.info("消息ID为{}的回复数量: {}", firstRootId, replies.size());
|
||||
}
|
||||
}
|
||||
|
||||
private void testServiceMethods() {
|
||||
logger.info("===== 测试Service层方法 =====");
|
||||
|
||||
// 测试获取所有消息
|
||||
ResponseMessage<Iterable<Message>> allMessagesResponse = messageService.getAllMessages();
|
||||
logger.info("获取所有消息: 成功={}, 消息数量={}", allMessagesResponse.isSuccess(),
|
||||
((List<Message>)allMessagesResponse.getData()).size());
|
||||
|
||||
// 测试根据ID获取消息
|
||||
if (messageRepository.count() > 0) {
|
||||
Message firstMessage = messageRepository.findAll().iterator().next();
|
||||
Integer messageId = firstMessage.getMessageid();
|
||||
ResponseMessage<Message> messageResponse = messageService.getMessageById(messageId);
|
||||
logger.info("根据ID{}获取消息: 成功={}, 昵称={}", messageId,
|
||||
messageResponse.isSuccess(),
|
||||
messageResponse.getData() != null ? messageResponse.getData().getNickname() : "null");
|
||||
|
||||
// 测试获取指定文章的评论数量
|
||||
ResponseMessage<Long> countResponse = messageService.getMessageCountByArticleId(1);
|
||||
logger.info("获取文章ID为1的评论数量: 成功={}, 数量={}",
|
||||
countResponse.isSuccess(), countResponse.getData());
|
||||
|
||||
// 测试获取根消息
|
||||
ResponseMessage<List<Message>> rootResponse = messageService.getRootMessages();
|
||||
logger.info("获取根消息: 成功={}, 数量={}",
|
||||
rootResponse.isSuccess(),
|
||||
rootResponse.getData() != null ? rootResponse.getData().size() : 0);
|
||||
}
|
||||
|
||||
// 测试保存新消息
|
||||
MessageDto newMessage = new MessageDto();
|
||||
newMessage.setNickname("测试用户");
|
||||
newMessage.setEmail("test@example.com");
|
||||
newMessage.setContent("这是一条测试消息");
|
||||
newMessage.setArticleid(1);
|
||||
newMessage.setParentid(null);
|
||||
|
||||
ResponseMessage<Message> saveResponse = messageService.saveMessage(newMessage);
|
||||
logger.info("保存新消息: 成功={}, 消息ID={}",
|
||||
saveResponse.isSuccess(),
|
||||
saveResponse.getData() != null ? saveResponse.getData().getMessageid() : "null");
|
||||
|
||||
// 如果保存成功,测试删除
|
||||
if (saveResponse.isSuccess() && saveResponse.getData() != null) {
|
||||
Integer savedId = saveResponse.getData().getMessageid();
|
||||
ResponseMessage<Message> deleteResponse = messageService.deleteMessage(savedId);
|
||||
logger.info("删除消息ID{}: 成功={}", savedId, deleteResponse.isSuccess());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user