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.imp.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); // 根评论 message1.setLikes(0); // 设置点赞数初始值为0 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()); // 回复第一篇评论 reply1.setLikes(0); // 设置点赞数初始值为0 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); message2.setLikes(0); // 设置点赞数初始值为0 messageRepository.save(message2); logger.info("成功添加了{}条测试消息数据", messageRepository.count()); } private void testQueryMethods() { logger.info("===== 测试Repository查询方法 ====="); // 测试根据文章ID查询 List article1Messages = messageRepository.findByArticleid(1); logger.info("文章ID为1的消息数量: {}", article1Messages.size()); // 测试查询所有根消息 List rootMessages = messageRepository.findByParentidIsNull(); logger.info("根消息数量: {}", rootMessages.size()); // 测试根据昵称模糊查询 List 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 replies = messageRepository.findByParentid(firstRootId); logger.info("消息ID为{}的回复数量: {}", firstRootId, replies.size()); } } private void testServiceMethods() { logger.info("===== 测试Service层方法 ====="); // 测试获取所有消息 ResponseMessage> allMessagesResponse = messageService.getAllMessages(); logger.info("获取所有消息: 成功={}, 消息数量={}", allMessagesResponse.isSuccess(), ((List)allMessagesResponse.getData()).size()); // 测试根据ID获取消息 if (messageRepository.count() > 0) { Message firstMessage = messageRepository.findAll().iterator().next(); Integer messageId = firstMessage.getMessageid(); ResponseMessage messageResponse = messageService.getMessageById(messageId); logger.info("根据ID{}获取消息: 成功={}, 昵称={}", messageId, messageResponse.isSuccess(), messageResponse.getData() != null ? messageResponse.getData().getNickname() : "null"); // 测试获取指定文章的评论数量 ResponseMessage countResponse = messageService.getMessageCountByArticleId(1); logger.info("获取文章ID为1的评论数量: 成功={}, 数量={}", countResponse.isSuccess(), countResponse.getData()); // 测试获取根消息 ResponseMessage> 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 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 deleteResponse = messageService.deleteMessage(savedId); logger.info("删除消息ID{}: 成功={}", savedId, deleteResponse.isSuccess()); } } }