From 81b6340bcbbb148b4d72da5223b1d82268508583 Mon Sep 17 00:00:00 2001
From: KKSU <15274802129@163.com>
Date: Wed, 22 Jan 2025 17:49:59 +0800
Subject: [PATCH] refactor(测试用例):优化实体验证工具类并调整测试用例

---
 src/main/java/cc/mrbird/febs/common/utils/ValidateEntityUtils.java |   66 +++++++++++++++++++++------------
 1 files changed, 42 insertions(+), 24 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/utils/ValidateEntityUtils.java b/src/main/java/cc/mrbird/febs/common/utils/ValidateEntityUtils.java
index cb347fb..c766630 100644
--- a/src/main/java/cc/mrbird/febs/common/utils/ValidateEntityUtils.java
+++ b/src/main/java/cc/mrbird/febs/common/utils/ValidateEntityUtils.java
@@ -3,6 +3,7 @@
 import cc.mrbird.febs.common.exception.FebsException;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
 
 import java.util.ArrayList;
@@ -14,16 +15,16 @@
  */
 public class ValidateEntityUtils {
 
-
     /**
      * 确保指定列的有效性,并返回相应的实体对象
-     * 此方法用于验证数据库中某列的值是否存在,并返回包含该值的实体对象
-     * 如果指定的值不存在或为null,将抛出异常
+     *      此方法用于验证数据库中某列的值是否存在,并返回包含该值的实体对象
+     *      如果指定的值不存在或为null,将抛出异常
      *
      * @param valueToCheck 需要验证的值
      * @param columnExtractor 列值提取器,用于指定需要验证的列
      * @param queryWrapperExtractor 查询包装器提取器,用于执行数据库查询
      * @param errMsg 错误消息格式字符串
+     * @param columnExtractors 可变参数(varargs)查询字段,可选,如果没有就是查询全部
      * @param <T> 实体类类型
      * @param <R> 列值类型
      * @param <V> 需要验证的值的类型
@@ -35,34 +36,47 @@
             V valueToCheck,
             SFunction<T, R> columnExtractor,
             SFunction<LambdaQueryWrapper<T>, T> queryWrapperExtractor,
-            String errMsg) {
-        // 检查需要验证的值是否为null
+            String errMsg,
+            SFunction<T, R>... columnExtractors) {
+
+        // 检查输入参数是否为null
         if (valueToCheck == null) {
             throw new IllegalArgumentException("The value to check cannot be null while ensureColumnReturnEntity column");
         }
+        if (columnExtractor == null || queryWrapperExtractor == null) {
+            throw new IllegalArgumentException("Column extractor and query wrapper extractor cannot be null while ensureColumnReturnEntity column");
+        }
+
         T entity = null;
         try {
             // 创建LambdaQueryWrapper并配置查询条件
-            LambdaQueryWrapper<T> wrapper = new LambdaQueryWrapper<>();
-            wrapper.select(columnExtractor)
-                    .eq(columnExtractor, valueToCheck);
+            LambdaQueryWrapper<T> wrapper = Wrappers.lambdaQuery();
+            if (columnExtractors != null && columnExtractors.length > 0) {
+                wrapper.select(columnExtractors);
+            }
+            wrapper.eq(columnExtractor, valueToCheck);
 
             // 执行查询并获取结果实体
             entity = queryWrapperExtractor.apply(wrapper);
+
+            // 如果查询结果为空,则抛出异常
+            if (entity == null) {
+                throw new FebsException(StrUtil.format(errMsg, valueToCheck));
+            }
+
+            // 提取查询结果中的列值
+            R columnValue = columnExtractor.apply(entity);
+            // 如果列值为null,则抛出异常
+            if (columnValue == null) {
+                throw new FebsException(StrUtil.format(errMsg, valueToCheck));
+            }
+
+        } catch (FebsException e) {
+            // 记录异常日志
+            throw e;
         } catch (Exception e) {
             // 记录异常日志
-            throw new FebsException(StrUtil.format("An error occurred while ensureColumnReturnEntity column: {}", valueToCheck));
-        }
-        // 如果查询结果为空,则抛出异常
-        if (entity == null) {
-            throw new FebsException(StrUtil.format(errMsg, valueToCheck));
-        }
-
-        // 提取查询结果中的列值
-        R columnValue = columnExtractor.apply(entity);
-        // 如果列值为null,则抛出异常
-        if (columnValue == null) {
-            throw new FebsException(StrUtil.format(errMsg, valueToCheck));
+            throw new FebsException(StrUtil.format("An error occurred while ensuring column return entity: {}", valueToCheck));
         }
 
         // 返回查询到的实体类对象
@@ -78,6 +92,7 @@
      * @param columnExtractor 列值提取器,用于指定需要验证的列
      * @param queryWrapperExtractor 查询包装器提取器,用于执行数据库查询
      * @param errMsg 错误消息格式字符串
+     * @param columnExtractors 可变参数(varargs)查询字段,可选,如果没有就是查询全部
      * @param <T> 实体类类型
      * @param <R> 列值类型
      * @param <V> 需要验证的值的类型
@@ -89,7 +104,8 @@
             V valueToCheck,
             SFunction<T, R> columnExtractor,
             SFunction<LambdaQueryWrapper<T>, List<T>> queryWrapperExtractor,
-            String errMsg) {
+            String errMsg,
+            SFunction<T, R>... columnExtractors) {
         // 检查需要验证的值是否为null
         if (valueToCheck == null) {
             throw new IllegalArgumentException("The value to check cannot be null while ensureColumnReturnEntityList column");
@@ -97,9 +113,11 @@
         List<T> entities = new ArrayList<>();
         try {
             // 创建LambdaQueryWrapper并配置查询条件
-            LambdaQueryWrapper<T> wrapper = new LambdaQueryWrapper<>();
-            wrapper.select(columnExtractor)
-                    .eq(columnExtractor, valueToCheck);
+            LambdaQueryWrapper<T> wrapper = Wrappers.lambdaQuery();
+            if (columnExtractors != null && columnExtractors.length > 0) {
+                wrapper.select(columnExtractors);
+            }
+            wrapper.eq(columnExtractor, valueToCheck);
 
             // 执行查询并获取结果实体列表
             entities = queryWrapperExtractor.apply(wrapper);

--
Gitblit v1.9.1