Bläddra i källkod

app 模块代码优化

reghao 4 år sedan
förälder
incheckning
211178f278
26 ändrade filer med 519 tillägg och 689 borttagningar
  1. 2 2
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/config/AppConfigController.java
  2. 2 181
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/AppConfigCrud.java
  3. 2 75
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/CompilerConfigCrud.java
  4. 2 41
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/PackerConfigCrud.java
  5. 2 79
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/ProjConfigCrud.java
  6. 42 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/impl/AppConfigCrudImpl.java
  7. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/impl/BuildDirCrudImpl.java
  8. 42 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/impl/CompilerConfigCrudImpl.java
  9. 42 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/impl/PackerConfigCrudImpl.java
  10. 42 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/impl/ProjConfigCrudImpl.java
  11. 4 67
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/impl/RepoAuthConfigCrudImpl.java
  12. 0 11
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppConfigQuery.java
  13. 0 8
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppConfigQueryImpl.java
  14. 11 58
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/AppConfigQuery.java
  15. 5 24
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/CompilerConfigQuery.java
  16. 6 24
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/PackerConfigQuery.java
  17. 9 59
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/ProjConfigQuery.java
  18. 86 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/impl/AppConfigQueryImpl.java
  19. 38 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/impl/CompilerConfigQueryImpl.java
  20. 38 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/impl/PackerConfigQueryImpl.java
  21. 81 0
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/impl/ProjConfigQueryImpl.java
  22. 22 22
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/AppConfigServiceImpl.java
  23. 10 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/CompilerConfigServiceImpl.java
  24. 10 9
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/PackerConfigServiceImpl.java
  25. 19 18
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/ProjConfigServiceImpl.java
  26. 1 1
      dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/SharedEntityChecker.java

+ 2 - 2
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/config/AppConfigController.java

@@ -28,8 +28,8 @@ import java.util.List;
 @RestController
 @RequestMapping("/api/app/config/app")
 public class AppConfigController {
-    private AppConfigService appConfigService;
-    private MachineHostQuery hostQuery;
+    private final AppConfigService appConfigService;
+    private final MachineHostQuery hostQuery;
 
     public AppConfigController(AppConfigService appConfigService, MachineHostQuery hostQuery) {
         this.appConfigService = appConfigService;

+ 2 - 181
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/AppConfigCrud.java

@@ -1,190 +1,11 @@
 package cn.reghao.autodop.dmaster.app.db.crud.config;
 
-import cn.reghao.autodop.dmaster.machine.db.query.MachineHostQuery;
-import cn.reghao.autodop.dmaster.machine.model.po.MachineHost;
-import cn.reghao.jdkutil.result.Result;
-import cn.reghao.jdkutil.result.ResultStatus;
-import cn.reghao.autodop.dmaster.app.model.constant.AppType;
-import cn.reghao.autodop.dmaster.app.model.constant.EnvList;
-import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
-import cn.reghao.autodop.dmaster.notification.model.po.NotifyType;
-import cn.reghao.autodop.dmaster.app.model.po.AppRunning;
-import cn.reghao.autodop.dmaster.app.model.po.config.DeployConfig;
-import cn.reghao.autodop.dmaster.app.db.repository.AppRunningRepository;
-import cn.reghao.autodop.dmaster.app.service.impl.BuildDeployConfigServiceImpl;
-import cn.reghao.autodop.dmaster.app.model.vo.NewApp;
+import cn.reghao.jdkutil.db.BaseCrud;
 import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
-import cn.reghao.autodop.dmaster.app.db.repository.config.AppConfigRepository;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * @author reghao
  * @date 2020-11-10 21:58:00
  */
-//@CacheConfig(cacheNames = {"caffeineCacheManager"})
-@Service
-public class AppConfigCrud {
-    private AppConfigRepository appRepository;
-    private MachineHostQuery machineHostQuery;
-    private SharedEntityChecker sharedEntityChecker;
-    private BuildDeployConfigServiceImpl appBuildService;
-    private AppRunningRepository runningRepository;
-
-    public AppConfigCrud(AppConfigRepository appRepository,
-                         MachineHostQuery machineHostQuery,
-                         SharedEntityChecker sharedEntityChecker,
-                         BuildDeployConfigServiceImpl appBuildService,
-                         AppRunningRepository runningRepository) {
-        this.appRepository = appRepository;
-        this.machineHostQuery = machineHostQuery;
-        this.sharedEntityChecker = sharedEntityChecker;
-        this.appBuildService = appBuildService;
-        this.runningRepository = runningRepository;
-    }
-
-    public void save(AppConfig appConfig) {
-        appRepository.save(appConfig);
-    }
-
-    // TODO 数据修改后要在引用它的对象中立即体现
-    //@CachePut(cacheNames = {"app"}, key = "#app.appId")
-    @Transactional(rollbackFor = Exception.class)
-    public Result insertOrUpdate(AppConfig app) throws Exception {
-        // TODO 处理所有与 app 关联的数据
-        // TODO 不能有应用处于构建中
-        Integer id = app.getId();
-        /*if (id != null) {
-            app = appRepository.findById(id).orElse(null);
-        }*/
-
-        Result result = checkEnum(app);
-        if (result.getCode() != ResultStatus.SUCCESS.getCode()) {
-            return result;
-        }
-
-        // 首先处理共享实体,将 app 的所有属性填充完整
-        checkSharedEntity(app);
-        checkNotifyGroups(app);
-        checkDeployConfigs(app);
-        appRepository.save(app);
-        appBuildService.refreshApp(app);
-
-        String msg = id != null ? "更新 " + app.getAppId() + " 成功"
-                : "添加 " + app.getAppId() + " 成功";
-        return Result.result(ResultStatus.SUCCESS, msg);
-    }
-
-    public Result updateNotify(AppConfig app) {
-        appRepository.save(app);
-        return Result.result(ResultStatus.SUCCESS);
-    }
-
-    private Result checkEnum(AppConfig app) {
-        Set<String> envs = Arrays.stream(EnvList.values())
-                .map(Enum::name)
-                .collect(Collectors.toSet());
-        String env = app.getEnv();
-        if (!envs.contains(env)) {
-            String msg = env + " 环境不存在";
-            return Result.result(ResultStatus.FAIL, msg);
-        }
-
-        String appType = app.getAppType();
-        Set<String> appTypes = Arrays.stream(AppType.values())
-                .map(Enum::name)
-                .collect(Collectors.toSet());
-        if (!appTypes.contains(appType)) {
-            String msg = appType + " 类型不存在";
-            return Result.result(ResultStatus.FAIL, msg);
-        }
-
-        return Result.result(ResultStatus.SUCCESS);
-    }
-
-    private void checkNotifyGroups(AppConfig app) {
-        // TODO 根据通知类型创建相应的通知实例
-
-        Set<String> notifyTypes = Arrays.stream(NotifyType.values())
-                .map(Enum::name)
-                .collect(Collectors.toSet());
-        // TODO notifyReceivers 为 null 时会发生异常,好像不能正常返回,后面需要测试一下
-        /*List<NotifyReceiver> notifyReceivers = app.getNotifyReceivers().stream()
-                .filter(notifyReceiver -> notifyTypes.contains(notifyReceiver.getNotifyType()))
-                .collect(Collectors.toList());
-        app.setNotifyReceivers(notifyReceivers);*/
-    }
-
-    private void checkDeployConfigs(AppConfig app) {
-        // TODO null 异常不会被 ControllerExceptionHandler 捕获
-        ProjConfig proj = app.getProj();
-        String packType;
-        if (proj != null) {
-            packType = proj.getPackerConfig().getType();
-        } else {
-            packType = app.getPackerConfig().getType();
-        }
-
-        List<DeployConfig> deployConfigs = app.getDeployConfigs().stream()
-                .map(deployConfig -> {
-                    String machineId = deployConfig.getMachineId();
-                    MachineHost machineHost = machineHostQuery.findByMachineId(machineId);
-                    if (machineHost != null) {
-                        deployConfig.setMachineIpv4(machineHost.getMachineIpv4());
-                        deployConfig.setPackType(packType);
-                        return deployConfig;
-                    } else {
-                        return null;
-                    }
-                })
-                .filter(Objects::nonNull)
-                .collect(Collectors.toList());
-        app.setDeployConfigs(deployConfigs);
-    }
-
-    private void checkSharedEntity(AppConfig app) throws Exception {
-        if (app.getProj() == null) {
-            sharedEntityChecker.checkAndSetBuildConfig(app);
-        } else {
-            sharedEntityChecker.checkAndSetProj(app);
-        }
-    }
-
-    public Result copy(AppConfig from, NewApp to) throws Exception {
-        if (from == null) {
-            String msg = "应用配置不存在";
-            return Result.result(ResultStatus.FAIL, msg);
-        }
-
-        AppConfig toApp = appRepository.findByIsDeleteFalseAndAppId(to.getNewId());
-        if (toApp != null) {
-            String msg = to.getNewId() + " 已存在";
-            return Result.result(ResultStatus.FAIL, msg);
-        }
-
-        toApp = to.app((AppConfig) from.clone());
-        return insertOrUpdate(toApp);
-    }
-
-    //@CacheEvict(cacheNames = {"app"}, key = "#app.appId")
-    @Transactional(rollbackFor = Exception.class)
-    public Result delete(AppConfig app) {
-        String appId = app.getAppId();
-        List<AppRunning> appRunnings = runningRepository.findByAppId(appId).stream()
-                .filter(AppRunning::getIsRunning).collect(Collectors.toList());
-        if (!appRunnings.isEmpty()) {
-            return Result.result(ResultStatus.FAIL, appId + " 正在运行中");
-        }
-
-        // TODO 处理所有与 app 关联的数据
-        appBuildService.delete(app.getAppId());
-        appRepository.delete(app);
-        return Result.result(ResultStatus.SUCCESS);
-    }
+public interface AppConfigCrud extends BaseCrud<AppConfig> {
 }

+ 2 - 75
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/CompilerConfigCrud.java

@@ -1,84 +1,11 @@
 package cn.reghao.autodop.dmaster.app.db.crud.config;
 
-import cn.reghao.jdkutil.result.Result;
-import cn.reghao.jdkutil.result.ResultStatus;
-import cn.reghao.autodop.dmaster.app.model.constant.build.CompileType;
-import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
-import cn.reghao.autodop.dmaster.app.db.query.config.ProjConfigQuery;
-import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
-import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
+import cn.reghao.jdkutil.db.BaseCrud;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.CompilerConfig;
-import cn.reghao.autodop.dmaster.app.db.repository.config.build.CompilerConfigRepository;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * @author reghao
  * @date 2020-11-10 21:58:00
  */
-@Service
-public class CompilerConfigCrud {
-    private CompilerConfigRepository compilerRepository;
-    private AppConfigQuery appConfigQuery;
-    private ProjConfigQuery projConfigQuery;
-
-    public CompilerConfigCrud(CompilerConfigRepository compilerRepository, AppConfigQuery appConfigQuery, ProjConfigQuery projConfigQuery) {
-        this.compilerRepository = compilerRepository;
-        this.appConfigQuery = appConfigQuery;
-        this.projConfigQuery = projConfigQuery;
-    }
-
-    public Result insertOrUpdate(CompilerConfig compilerConfig) {
-        Result result = valid(compilerConfig);
-        if (result.getCode() != ResultStatus.SUCCESS.getCode()) {
-            return result;
-        }
-        compilerRepository.save(compilerConfig);
-        return result;
-    }
-
-    private Result valid(CompilerConfig compilerConfig) {
-        String type = compilerConfig.getType();
-        switch (CompileType.valueOf(type)) {
-            case shell:
-                if (compilerConfig.getCompileCmd().isEmpty() || compilerConfig.getCompileCmd().isBlank()) {
-                    // TODO 检测编译命令是否有效
-                    return Result.result(ResultStatus.FAIL, "必须指定编译命令");
-                }
-                break;
-            case maven:
-                String homePath = compilerConfig.getHomePath();
-                if (homePath.isEmpty() || homePath.isBlank()) {
-                    return Result.result(ResultStatus.FAIL, "必须指定 maven 的主目录");
-                }
-                break;
-            case docker:
-                if (compilerConfig.getCompileCmd().isEmpty() || compilerConfig.getCompileCmd().isBlank()) {
-                    // TODO 检测 dockerfile 是否有效
-                    return Result.result(ResultStatus.FAIL, "编译命令应该是 dockerfile");
-                }
-                break;
-            case no_need_compile:
-                break;
-            default:
-                return Result.result(ResultStatus.FAIL, "暂不支持 " + type);
-        }
-        return Result.result(ResultStatus.SUCCESS);
-    }
-
-    public Result delete(CompilerConfig compilerConfig) {
-        List<AppConfig> apps = appConfigQuery.findAllByCompilerConfig(compilerConfig);
-        List<ProjConfig> projs = projConfigQuery.findAllByCompilerConfig(compilerConfig);
-        if (apps.isEmpty() && projs.isEmpty()) {
-            compilerRepository.delete(compilerConfig);
-            return Result.result(ResultStatus.SUCCESS);
-        } else {
-            List<String> ids = apps.stream().map(AppConfig::getAppId).collect(Collectors.toList());
-            ids.addAll(projs.stream().map(ProjConfig::getProjId).collect(Collectors.toList()));
-            String msg = compilerConfig.getName() + " 删除失败, " + ids.toString() + " 等应用正在使用";
-            return Result.result(ResultStatus.FAIL, msg);
-        }
-    }
+public interface CompilerConfigCrud extends BaseCrud<CompilerConfig> {
 }

+ 2 - 41
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/PackerConfigCrud.java

@@ -1,50 +1,11 @@
 package cn.reghao.autodop.dmaster.app.db.crud.config;
 
-import cn.reghao.jdkutil.result.Result;
-import cn.reghao.jdkutil.result.ResultStatus;
-import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
-import cn.reghao.autodop.dmaster.app.db.query.config.ProjConfigQuery;
-import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
-import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
+import cn.reghao.jdkutil.db.BaseCrud;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.PackerConfig;
-import cn.reghao.autodop.dmaster.app.db.repository.config.build.PackerConfigRepository;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * @author reghao
  * @date 2020-11-10 21:58:00
  */
-@Service
-public class PackerConfigCrud {
-    private PackerConfigRepository packerRepository;
-    private AppConfigQuery appConfigQuery;
-    private ProjConfigQuery projConfigQuery;
-
-    public PackerConfigCrud(PackerConfigRepository packerRepository, AppConfigQuery appConfigQuery, ProjConfigQuery projConfigQuery) {
-        this.packerRepository = packerRepository;
-        this.appConfigQuery = appConfigQuery;
-        this.projConfigQuery = projConfigQuery;
-    }
-
-    public Result insertOrUpdate(PackerConfig packerConfig) {
-        packerRepository.save(packerConfig);
-        return Result.result(ResultStatus.SUCCESS);
-    }
-
-    public Result delete(PackerConfig packerConfig) {
-        List<AppConfig> apps = appConfigQuery.findAllByPackerConfig(packerConfig);
-        List<ProjConfig> projs = projConfigQuery.findAllByPackerConfig(packerConfig);
-        if (apps.isEmpty() && projs.isEmpty()) {
-            packerRepository.delete(packerConfig);
-            return Result.result(ResultStatus.SUCCESS);
-        } else {
-            List<String> ids = apps.stream().map(AppConfig::getAppId).collect(Collectors.toList());
-            ids.addAll(projs.stream().map(ProjConfig::getProjId).collect(Collectors.toList()));
-            String msg = packerConfig.getName() + " 删除失败, " + ids.toString() + " 等应用正在使用";
-            return Result.result(ResultStatus.FAIL, msg);
-        }
-    }
+public interface PackerConfigCrud extends BaseCrud<PackerConfig> {
 }

+ 2 - 79
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/ProjConfigCrud.java

@@ -1,88 +1,11 @@
 package cn.reghao.autodop.dmaster.app.db.crud.config;
 
-import cn.reghao.jdkutil.result.Result;
-import cn.reghao.jdkutil.result.ResultStatus;
-import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
+import cn.reghao.jdkutil.db.BaseCrud;
 import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
-import cn.reghao.autodop.dmaster.app.db.repository.config.AppConfigRepository;
-import cn.reghao.autodop.dmaster.app.db.repository.config.ProjConfigRepository;
-import cn.reghao.autodop.dmaster.app.model.vo.NewApp;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * @author reghao
  * @date 2020-11-10 21:58:00
  */
-@Service
-public class ProjConfigCrud {
-    private ProjConfigRepository projRepository;
-    private AppConfigRepository appRepository;
-    private SharedEntityChecker sharedEntityChecker;
-
-    public ProjConfigCrud(ProjConfigRepository projRepository,
-                          AppConfigRepository appRepository,
-                          SharedEntityChecker sharedEntityChecker) {
-        this.projRepository = projRepository;
-        this.appRepository = appRepository;
-        this.sharedEntityChecker = sharedEntityChecker;
-    }
-
-    public Result insertOrUpdate(ProjConfig proj) {
-        try {
-            Integer id = proj.getId();
-            sharedEntityChecker.checkAndSetBuildConfig(proj);
-            ProjConfig projEntity = projRepository.findByIsDeleteFalseAndProjId(proj.getProjId());
-            if (projEntity != null) {
-                proj.setId(projEntity.getId());
-                proj.setCreateTime(projEntity.getCreateTime());
-                proj.setUpdateTime(LocalDateTime.now());
-            }
-            projRepository.save(proj);
-
-            String msg = id != null ? "更新 " + proj.getProjId() + " 成功"
-                    : "添加 " + proj.getProjId() + " 成功";
-            return Result.result(ResultStatus.SUCCESS, msg);
-        } catch (Exception e) {
-            String msg = e.getMessage();
-            return Result.result(ResultStatus.FAIL, msg);
-        }
-    }
-
-    public Result copy(ProjConfig from, NewApp to) {
-        if (from == null) {
-            String msg = "项目配置不存在";
-            return Result.result(ResultStatus.FAIL, msg);
-        }
-
-        ProjConfig toProj = projRepository.findByIsDeleteFalseAndProjId(to.getNewId());
-        if (toProj != null) {
-            String msg = to.getNewId() + " 已存在";
-            return Result.result(ResultStatus.FAIL, msg);
-        }
-
-        try {
-            toProj = to.proj((ProjConfig) from.clone());
-            insertOrUpdate(toProj);
-            return Result.result(ResultStatus.SUCCESS);
-        } catch (CloneNotSupportedException e) {
-            String msg = e.getMessage();
-            return Result.result(ResultStatus.FAIL, msg);
-        }
-    }
-
-    public Result delete(ProjConfig proj) {
-        List<AppConfig> apps = appRepository.findAllByProj(proj);
-        if (apps.isEmpty()) {
-            projRepository.delete(proj);
-            return Result.result(ResultStatus.SUCCESS);
-        } else {
-            String appIds = apps.stream().map(AppConfig::getAppId).collect(Collectors.joining());
-            String msg = proj.getProjName() + " 删除失败, " + appIds + " 等应用正在使用";
-            return Result.result(ResultStatus.FAIL, msg);
-        }
-    }
+public interface ProjConfigCrud extends BaseCrud<ProjConfig> {
 }

+ 42 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/impl/AppConfigCrudImpl.java

@@ -0,0 +1,42 @@
+package cn.reghao.autodop.dmaster.app.db.crud.config.impl;
+
+import cn.reghao.autodop.dmaster.app.db.crud.config.AppConfigCrud;
+import cn.reghao.autodop.dmaster.app.db.repository.config.AppConfigRepository;
+import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-11-10 21:58:00
+ */
+@Service
+public class AppConfigCrudImpl implements AppConfigCrud {
+    private final AppConfigRepository appRepository;
+
+    public AppConfigCrudImpl(AppConfigRepository appRepository) {
+        this.appRepository = appRepository;
+    }
+
+    @Override
+    public AppConfig save(AppConfig appConfig) {
+        appRepository.save(appConfig);
+        return appConfig;
+    }
+
+    @Override
+    public void saveAll(List<AppConfig> list) {
+        appRepository.saveAll(list);
+    }
+
+    @Override
+    public void update(AppConfig appConfig) {
+        appRepository.save(appConfig);
+    }
+
+    @Override
+    public void delete(AppConfig appConfig) {
+        appRepository.delete(appConfig);
+    }
+}

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/impl/BuildDirCrudImpl.java

@@ -13,7 +13,7 @@ import java.util.List;
  */
 @Service
 public class BuildDirCrudImpl implements BuildDirCrud {
-    private BuildDirRepository buildDirRepository;
+    private final BuildDirRepository buildDirRepository;
 
     public BuildDirCrudImpl(BuildDirRepository buildDirRepository) {
         this.buildDirRepository = buildDirRepository;

+ 42 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/impl/CompilerConfigCrudImpl.java

@@ -0,0 +1,42 @@
+package cn.reghao.autodop.dmaster.app.db.crud.config.impl;
+
+import cn.reghao.autodop.dmaster.app.db.crud.config.CompilerConfigCrud;
+import cn.reghao.autodop.dmaster.app.db.repository.config.build.CompilerConfigRepository;
+import cn.reghao.autodop.dmaster.app.model.po.config.build.CompilerConfig;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-11-10 21:58:00
+ */
+@Service
+public class CompilerConfigCrudImpl implements CompilerConfigCrud {
+    private final CompilerConfigRepository compilerRepository;
+
+    public CompilerConfigCrudImpl(CompilerConfigRepository compilerRepository) {
+        this.compilerRepository = compilerRepository;
+    }
+
+    @Override
+    public CompilerConfig save(CompilerConfig compilerConfig) {
+        compilerRepository.save(compilerConfig);
+        return compilerConfig;
+    }
+
+    @Override
+    public void saveAll(List<CompilerConfig> list) {
+        compilerRepository.saveAll(list);
+    }
+
+    @Override
+    public void update(CompilerConfig compilerConfig) {
+        compilerRepository.save(compilerConfig);
+    }
+
+    @Override
+    public void delete(CompilerConfig compilerConfig) {
+        compilerRepository.delete(compilerConfig);
+    }
+}

+ 42 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/impl/PackerConfigCrudImpl.java

@@ -0,0 +1,42 @@
+package cn.reghao.autodop.dmaster.app.db.crud.config.impl;
+
+import cn.reghao.autodop.dmaster.app.db.crud.config.PackerConfigCrud;
+import cn.reghao.autodop.dmaster.app.db.repository.config.build.PackerConfigRepository;
+import cn.reghao.autodop.dmaster.app.model.po.config.build.PackerConfig;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-11-10 21:58:00
+ */
+@Service
+public class PackerConfigCrudImpl implements PackerConfigCrud {
+    private final PackerConfigRepository packerRepository;
+
+    public PackerConfigCrudImpl(PackerConfigRepository packerRepository) {
+        this.packerRepository = packerRepository;
+    }
+
+    @Override
+    public PackerConfig save(PackerConfig packerConfig) {
+        packerRepository.save(packerConfig);
+        return packerConfig;
+    }
+
+    @Override
+    public void saveAll(List<PackerConfig> list) {
+        packerRepository.saveAll(list);
+    }
+
+    @Override
+    public void update(PackerConfig packerConfig) {
+        packerRepository.save(packerConfig);
+    }
+
+    @Override
+    public void delete(PackerConfig packerConfig) {
+        packerRepository.delete(packerConfig);
+    }
+}

+ 42 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/impl/ProjConfigCrudImpl.java

@@ -0,0 +1,42 @@
+package cn.reghao.autodop.dmaster.app.db.crud.config.impl;
+
+import cn.reghao.autodop.dmaster.app.db.crud.config.ProjConfigCrud;
+import cn.reghao.autodop.dmaster.app.db.repository.config.ProjConfigRepository;
+import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2020-11-10 21:58:00
+ */
+@Service
+public class ProjConfigCrudImpl implements ProjConfigCrud {
+    private final ProjConfigRepository projRepository;
+
+    public ProjConfigCrudImpl(ProjConfigRepository projRepository) {
+        this.projRepository = projRepository;
+    }
+
+    @Override
+    public ProjConfig save(ProjConfig proj) {
+        projRepository.save(proj);
+        return proj;
+    }
+
+    @Override
+    public void saveAll(List<ProjConfig> list) {
+        projRepository.saveAll(list);
+    }
+
+    @Override
+    public void update(ProjConfig proj) {
+        projRepository.save(proj);
+    }
+
+    @Override
+    public void delete(ProjConfig proj) {
+        projRepository.delete(proj);
+    }
+}

+ 4 - 67
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/impl/RepoAuthConfigCrudImpl.java

@@ -1,20 +1,11 @@
 package cn.reghao.autodop.dmaster.app.db.crud.config.impl;
 
 import cn.reghao.autodop.dmaster.app.db.crud.config.RepoAuthConfigCrud;
-import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
-import cn.reghao.autodop.dmaster.app.db.query.config.ProjConfigQuery;
 import cn.reghao.autodop.dmaster.app.db.repository.config.build.RepoAuthConfigRepository;
-import cn.reghao.autodop.dmaster.app.model.constant.build.RepoAuthType;
-import cn.reghao.autodop.dmaster.app.model.constant.build.RepoType;
-import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
-import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.RepoAuthConfig;
-import cn.reghao.jdkutil.result.Result;
-import cn.reghao.jdkutil.result.ResultStatus;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
-import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -22,15 +13,10 @@ import java.util.stream.Collectors;
  */
 @Service
 public class RepoAuthConfigCrudImpl implements RepoAuthConfigCrud {
-    private RepoAuthConfigRepository repoAuthRepository;
-    private AppConfigQuery appConfigQuery;
-    private ProjConfigQuery projConfigQuery;
+    private final RepoAuthConfigRepository repoAuthRepository;
 
-    public RepoAuthConfigCrudImpl(RepoAuthConfigRepository repoAuthRepository, AppConfigQuery appConfigQuery,
-                                  ProjConfigQuery projConfigQuery) {
+    public RepoAuthConfigCrudImpl(RepoAuthConfigRepository repoAuthRepository) {
         this.repoAuthRepository = repoAuthRepository;
-        this.appConfigQuery = appConfigQuery;
-        this.projConfigQuery = projConfigQuery;
     }
 
     @Override
@@ -41,65 +27,16 @@ public class RepoAuthConfigCrudImpl implements RepoAuthConfigCrud {
 
     @Override
     public void saveAll(List<RepoAuthConfig> list) {
+        repoAuthRepository.saveAll(list);
     }
 
     @Override
     public void update(RepoAuthConfig repoAuthConfig) {
-        Result result = valid(repoAuthConfig);
         repoAuthRepository.save(repoAuthConfig);
     }
 
-    public Result insertOrUpdate(RepoAuthConfig repoAuthConfig) {
-        Result result = valid(repoAuthConfig);
-        if (result.getCode() != ResultStatus.SUCCESS.getCode()) {
-            return result;
-        }
-        repoAuthRepository.save(repoAuthConfig);
-        return result;
-    }
-
-    private Result valid(RepoAuthConfig repoAuthConfig) {
-        switch (RepoType.valueOf(repoAuthConfig.getType())) {
-            case git:
-                switch (RepoAuthType.valueOf(repoAuthConfig.getAuthType())) {
-                    case ssh:
-                        String rsaPriKey = repoAuthConfig.getRsaPrikey();
-                        if (rsaPriKey.isEmpty() || rsaPriKey.isBlank()) {
-                            return Result.result(ResultStatus.FAIL, "RSA 私钥不能为空");
-                        }
-                        break;
-                    case http:
-                        String username = repoAuthConfig.getUsername();
-                        String password = repoAuthConfig.getPassword();
-                        if (username.isEmpty() || username.isBlank() || password.isEmpty() || password.isBlank()) {
-                            return Result.result(ResultStatus.FAIL, "用户名/密码不能为空");
-                        }
-                        break;
-                    default:
-                        return Result.result(ResultStatus.FAIL, "必须选择 git 的认证类型");
-                }
-                break;
-            case svn:
-                // TODO 暂未实现对 SVN 的验证
-                break;
-            default:
-                return Result.result(ResultStatus.FAIL, "暂不支持除 GIT/SVN 之外的版本管理工具");
-        }
-        return Result.result(ResultStatus.SUCCESS);
-    }
-
     @Override
     public void delete(RepoAuthConfig repoAuthConfig) {
-        List<AppConfig> apps = appConfigQuery.findAllByRepoAuthConfig(repoAuthConfig);
-        List<ProjConfig> projs = projConfigQuery.findAllByRepoAuthConfig(repoAuthConfig);
-        if (apps.isEmpty() && projs.isEmpty()) {
-            repoAuthRepository.delete(repoAuthConfig);
-            //return Result.result(ResultStatus.SUCCESS);
-        } else {
-            List<String> ids = apps.stream().map(AppConfig::getAppId).collect(Collectors.toList());
-            ids.addAll(projs.stream().map(ProjConfig::getProjId).collect(Collectors.toList()));
-            String msg = repoAuthConfig.getName() + " 删除失败, " + ids.toString() + " 等应用正在使用";
-            //return Result.result(ResultStatus.FAIL, msg);
-        }
+        repoAuthRepository.delete(repoAuthConfig);
     }
 }

+ 0 - 11
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppConfigQuery.java

@@ -1,11 +0,0 @@
-package cn.reghao.autodop.dmaster.app.db.query;
-
-import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
-import cn.reghao.jdkutil.db.BaseQuery;
-
-/**
- * @author reghao
- * @date 2021-09-16 18:31:24
- */
-public interface AppConfigQuery extends BaseQuery<AppConfig> {
-}

+ 0 - 8
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/AppConfigQueryImpl.java

@@ -1,8 +0,0 @@
-package cn.reghao.autodop.dmaster.app.db.query;
-
-/**
- * @author reghao
- * @date 2021-09-16 18:31:24
- */
-public class AppConfigQueryImpl implements AppConfigQuery {
-}

+ 11 - 58
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/AppConfigQuery.java

@@ -1,18 +1,14 @@
 package cn.reghao.autodop.dmaster.app.db.query.config;
 
 import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
+import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.CompilerConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.PackerConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.RepoAuthConfig;
-import cn.reghao.autodop.dmaster.app.db.repository.config.AppConfigRepository;
-import org.springframework.cache.annotation.CacheConfig;
+import cn.reghao.jdkutil.db.BaseQuery;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
 
-import javax.persistence.criteria.Predicate;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -20,56 +16,13 @@ import java.util.Map;
  * @author reghao
  * @date 2021-06-02 15:01:18
  */
-@CacheConfig(cacheNames = {"caffeineCacheManager"})
-@Service
-public class AppConfigQuery {
-    private AppConfigRepository appRepository;
-
-    public AppConfigQuery(AppConfigRepository appRepository) {
-        this.appRepository = appRepository;
-    }
-
-    public List<AppConfig> query(Map<String, String> kv) {
-        Specification<AppConfig> specification = (root, query, cb) -> {
-            List<Predicate> predicates = new ArrayList<>();
-            kv.forEach((name, value) -> {
-                predicates.add(cb.like(root.get(name), "%" + value + "%"));
-            });
-
-            // select * from app_building where app_id like '%test%' and app_name like '%测试%'
-            return cb.and(predicates.toArray(new Predicate[0]));
-        };
-        return appRepository.findAll(specification);
-    }
-
-    //@Cacheable(cacheNames = {"app"}, key = "#appId")
-    public AppConfig findByAppId(String appId) {
-        return appRepository.findByIsDeleteFalseAndAppId(appId);
-    }
-
-    //@Cacheable(cacheNames = {"app"}, key = "#appId")
-    public AppConfig findByIsDeleteFalseAndAppId(String appId) {
-        return appRepository.findByIsDeleteFalseAndAppId(appId);
-    }
-
-    //@Cacheable(cacheNames = {"apps"}, key = "T(String).valueOf(#pageable.pageNumber).concat('-').concat(#pageable.pageSize).concat('-').concat(#env)")
-    public Page<AppConfig> findByEnv(String env, Pageable pageable) {
-        return appRepository.findByEnv(env, pageable);
-    }
-
-    public List<AppConfig> findAll() {
-        return appRepository.findAll();
-    }
-
-    public List<AppConfig> findAllByRepoAuthConfig(RepoAuthConfig repoAuthConfig) {
-        return appRepository.findAllByRepoAuthConfig(repoAuthConfig);
-    }
-
-    public List<AppConfig> findAllByCompilerConfig(CompilerConfig compilerConfig) {
-        return appRepository.findAllByCompilerConfig(compilerConfig);
-    }
-
-    public List<AppConfig> findAllByPackerConfig(PackerConfig packerConfig) {
-        return appRepository.findAllByPackerConfig(packerConfig);
-    }
+public interface AppConfigQuery extends BaseQuery<AppConfig> {
+    List<AppConfig> query(Map<String, String> kv);
+    AppConfig findByAppId(String appId);
+    AppConfig findByIsDeleteFalseAndAppId(String appId);
+    Page<AppConfig> findByEnv(String env, Pageable pageable);
+    List<AppConfig> findAllByRepoAuthConfig(RepoAuthConfig repoAuthConfig);
+    List<AppConfig> findAllByCompilerConfig(CompilerConfig compilerConfig);
+    List<AppConfig> findAllByPackerConfig(PackerConfig packerConfig);
+    List<AppConfig> findAllByProj(ProjConfig proj);
 }

+ 5 - 24
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/CompilerConfigQuery.java

@@ -1,11 +1,9 @@
 package cn.reghao.autodop.dmaster.app.db.query.config;
 
 import cn.reghao.autodop.dmaster.app.model.po.config.build.CompilerConfig;
-import cn.reghao.autodop.dmaster.app.db.repository.config.build.CompilerConfigRepository;
-import org.springframework.cache.annotation.CacheConfig;
+import cn.reghao.jdkutil.db.BaseQuery;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
-import org.springframework.stereotype.Service;
 
 import java.util.List;
 
@@ -13,25 +11,8 @@ import java.util.List;
  * @author reghao
  * @date 2021-06-11 18:02:57
  */
-@CacheConfig(cacheNames = {"caffeineCacheManager"})
-@Service
-public class CompilerConfigQuery {
-    private CompilerConfigRepository compilerRepository;
-
-    public CompilerConfigQuery(CompilerConfigRepository compilerRepository) {
-        this.compilerRepository = compilerRepository;
-    }
-
-    //@Cacheable(cacheNames = {"compiler"}, key = "#name")
-    public CompilerConfig findByName(String name) {
-        return compilerRepository.findByName(name);
-    }
-
-    public Page<CompilerConfig> findAll(Pageable pageable) {
-        return compilerRepository.findAll(pageable);
-    }
-
-    public List<CompilerConfig> findAllByIsDeleteFalse() {
-        return compilerRepository.findAllByIsDeleteFalse();
-    }
+public interface CompilerConfigQuery extends BaseQuery<CompilerConfig> {
+    CompilerConfig findByName(String name);
+    Page<CompilerConfig> findAll(Pageable pageable);
+    List<CompilerConfig> findAllByIsDeleteFalse();
 }

+ 6 - 24
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/PackerConfigQuery.java

@@ -1,11 +1,10 @@
 package cn.reghao.autodop.dmaster.app.db.query.config;
 
 import cn.reghao.autodop.dmaster.app.model.po.config.build.PackerConfig;
-import cn.reghao.autodop.dmaster.app.db.repository.config.build.PackerConfigRepository;
-import org.springframework.cache.annotation.CacheConfig;
+import cn.reghao.jdkutil.db.BaseQuery;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
-import org.springframework.stereotype.Service;
+
 
 import java.util.List;
 
@@ -13,25 +12,8 @@ import java.util.List;
  * @author reghao
  * @date 2021-06-11 18:02:57
  */
-@CacheConfig(cacheNames = {"caffeineCacheManager"})
-@Service
-public class PackerConfigQuery {
-    private PackerConfigRepository packerRepository;
-
-    public PackerConfigQuery(PackerConfigRepository packerRepository) {
-        this.packerRepository = packerRepository;
-    }
-
-    //@Cacheable(cacheNames = {"packer"}, key = "#name")
-    public PackerConfig findByName(String name) {
-        return packerRepository.findByName(name);
-    }
-
-    public Page<PackerConfig> findAll(Pageable pageable) {
-        return packerRepository.findAll(pageable);
-    }
-
-    public List<PackerConfig> findAllByIsDeleteFalse() {
-        return packerRepository.findAllByIsDeleteFalse();
-    }
+public interface PackerConfigQuery extends BaseQuery<PackerConfig> {
+    PackerConfig findByName(String name);
+    Page<PackerConfig> findAll(Pageable pageable);
+    List<PackerConfig> findAllByIsDeleteFalse();
 }

+ 9 - 59
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/ProjConfigQuery.java

@@ -4,15 +4,10 @@ import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.CompilerConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.PackerConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.RepoAuthConfig;
-import cn.reghao.autodop.dmaster.app.db.repository.config.ProjConfigRepository;
-import org.springframework.cache.annotation.CacheConfig;
+import cn.reghao.jdkutil.db.BaseQuery;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
 
-import javax.persistence.criteria.Predicate;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -20,57 +15,12 @@ import java.util.Map;
  * @author reghao
  * @date 2021-06-02 15:01:18
  */
-@CacheConfig(cacheNames = {"caffeineCacheManager"})
-@Service
-public class ProjConfigQuery {
-    private ProjConfigRepository projRepository;
-
-    public ProjConfigQuery(ProjConfigRepository projRepository) {
-        this.projRepository = projRepository;
-    }
-
-    public List<ProjConfig> queryAll(Map<String, String> kv) {
-        Specification<ProjConfig> specification = (root, query, cb) -> {
-            List<Predicate> predicates = new ArrayList<>();
-            kv.forEach((name, value) -> {
-                predicates.add(cb.equal(root.get(name), value));
-            });
-            return cb.and(predicates.toArray(new Predicate[0]));
-        };
-       return projRepository.findAll(specification);
-    }
-
-    public ProjConfig query(Map<String, String> kv) {
-        Specification<ProjConfig> specification = (root, query, cb) -> {
-            List<Predicate> predicates = new ArrayList<>();
-            kv.forEach((name, value) -> {
-                predicates.add(cb.equal(root.get(name), value));
-            });
-            return cb.and(predicates.toArray(new Predicate[0]));
-        };
-
-        List<ProjConfig> list = projRepository.findAll(specification);
-        return list.get(0);
-    }
-
-    //@Cacheable(cacheNames = {"projs"}, keyGenerator = "projKeyGenerator")
-    public ProjConfig findByIsDeleteFalseAndProjId(String projId) {
-        return projRepository.findByIsDeleteFalseAndProjId(projId);
-    }
-
-    public Page<ProjConfig> findByIsDeleteFalse(Pageable pageable) {
-        return projRepository.findByIsDeleteFalse(pageable);
-    }
-
-    public List<ProjConfig> findAllByRepoAuthConfig(RepoAuthConfig repoAuthConfig) {
-        return projRepository.findAllByRepoAuthConfig(repoAuthConfig);
-    }
-
-    public List<ProjConfig> findAllByCompilerConfig(CompilerConfig compilerConfig) {
-        return projRepository.findAllByCompilerConfig(compilerConfig);
-    }
-
-    public List<ProjConfig> findAllByPackerConfig(PackerConfig packerConfig) {
-        return projRepository.findAllByPackerConfig(packerConfig);
-    }
+public interface ProjConfigQuery extends BaseQuery<ProjConfig> {
+    List<ProjConfig> queryAll(Map<String, String> kv);
+    ProjConfig query(Map<String, String> kv);
+    ProjConfig findByIsDeleteFalseAndProjId(String projId);
+    Page<ProjConfig> findByIsDeleteFalse(Pageable pageable);
+    List<ProjConfig> findAllByRepoAuthConfig(RepoAuthConfig repoAuthConfig);
+    List<ProjConfig> findAllByCompilerConfig(CompilerConfig compilerConfig);
+    List<ProjConfig> findAllByPackerConfig(PackerConfig packerConfig);
 }

+ 86 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/impl/AppConfigQueryImpl.java

@@ -0,0 +1,86 @@
+package cn.reghao.autodop.dmaster.app.db.query.config.impl;
+
+import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
+import cn.reghao.autodop.dmaster.app.db.repository.config.AppConfigRepository;
+import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
+import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
+import cn.reghao.autodop.dmaster.app.model.po.config.build.CompilerConfig;
+import cn.reghao.autodop.dmaster.app.model.po.config.build.PackerConfig;
+import cn.reghao.autodop.dmaster.app.model.po.config.build.RepoAuthConfig;
+import org.springframework.cache.annotation.CacheConfig;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.Predicate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author reghao
+ * @date 2021-06-02 15:01:18
+ */
+@Service
+public class AppConfigQueryImpl implements AppConfigQuery {
+    private final AppConfigRepository appRepository;
+
+    public AppConfigQueryImpl(AppConfigRepository appRepository) {
+        this.appRepository = appRepository;
+    }
+
+    @Override
+    public List<AppConfig> query(Map<String, String> kv) {
+        Specification<AppConfig> specification = (root, query, cb) -> {
+            List<Predicate> predicates = new ArrayList<>();
+            kv.forEach((name, value) -> {
+                predicates.add(cb.like(root.get(name), "%" + value + "%"));
+            });
+
+            // select * from app_building where app_id like '%test%' and app_name like '%测试%'
+            return cb.and(predicates.toArray(new Predicate[0]));
+        };
+        return appRepository.findAll(specification);
+    }
+
+    @Override
+    public AppConfig findByAppId(String appId) {
+        return appRepository.findByIsDeleteFalseAndAppId(appId);
+    }
+
+    @Override
+    public AppConfig findByIsDeleteFalseAndAppId(String appId) {
+        return appRepository.findByIsDeleteFalseAndAppId(appId);
+    }
+
+    @Override
+    public Page<AppConfig> findByEnv(String env, Pageable pageable) {
+        return appRepository.findByEnv(env, pageable);
+    }
+
+    @Override
+    public List<AppConfig> findAll() {
+        return appRepository.findAll();
+    }
+
+    @Override
+    public List<AppConfig> findAllByRepoAuthConfig(RepoAuthConfig repoAuthConfig) {
+        return appRepository.findAllByRepoAuthConfig(repoAuthConfig);
+    }
+
+    @Override
+    public List<AppConfig> findAllByCompilerConfig(CompilerConfig compilerConfig) {
+        return appRepository.findAllByCompilerConfig(compilerConfig);
+    }
+
+    @Override
+    public List<AppConfig> findAllByPackerConfig(PackerConfig packerConfig) {
+        return appRepository.findAllByPackerConfig(packerConfig);
+    }
+
+    @Override
+    public List<AppConfig> findAllByProj(ProjConfig proj) {
+        return appRepository.findAllByProj(proj);
+    }
+}

+ 38 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/impl/CompilerConfigQueryImpl.java

@@ -0,0 +1,38 @@
+package cn.reghao.autodop.dmaster.app.db.query.config.impl;
+
+import cn.reghao.autodop.dmaster.app.db.query.config.CompilerConfigQuery;
+import cn.reghao.autodop.dmaster.app.db.repository.config.build.CompilerConfigRepository;
+import cn.reghao.autodop.dmaster.app.model.po.config.build.CompilerConfig;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2021-06-11 18:02:57
+ */
+@Service
+public class CompilerConfigQueryImpl implements CompilerConfigQuery {
+    private final CompilerConfigRepository compilerRepository;
+
+    public CompilerConfigQueryImpl(CompilerConfigRepository compilerRepository) {
+        this.compilerRepository = compilerRepository;
+    }
+
+    @Override
+    public CompilerConfig findByName(String name) {
+        return compilerRepository.findByName(name);
+    }
+
+    @Override
+    public Page<CompilerConfig> findAll(Pageable pageable) {
+        return compilerRepository.findAll(pageable);
+    }
+
+    @Override
+    public List<CompilerConfig> findAllByIsDeleteFalse() {
+        return compilerRepository.findAllByIsDeleteFalse();
+    }
+}

+ 38 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/impl/PackerConfigQueryImpl.java

@@ -0,0 +1,38 @@
+package cn.reghao.autodop.dmaster.app.db.query.config.impl;
+
+import cn.reghao.autodop.dmaster.app.db.query.config.PackerConfigQuery;
+import cn.reghao.autodop.dmaster.app.db.repository.config.build.PackerConfigRepository;
+import cn.reghao.autodop.dmaster.app.model.po.config.build.PackerConfig;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author reghao
+ * @date 2021-06-11 18:02:57
+ */
+@Service
+public class PackerConfigQueryImpl implements PackerConfigQuery {
+    private final PackerConfigRepository packerRepository;
+
+    public PackerConfigQueryImpl(PackerConfigRepository packerRepository) {
+        this.packerRepository = packerRepository;
+    }
+
+    @Override
+    public PackerConfig findByName(String name) {
+        return packerRepository.findByName(name);
+    }
+
+    @Override
+    public Page<PackerConfig> findAll(Pageable pageable) {
+        return packerRepository.findAll(pageable);
+    }
+
+    @Override
+    public List<PackerConfig> findAllByIsDeleteFalse() {
+        return packerRepository.findAllByIsDeleteFalse();
+    }
+}

+ 81 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/query/config/impl/ProjConfigQueryImpl.java

@@ -0,0 +1,81 @@
+package cn.reghao.autodop.dmaster.app.db.query.config.impl;
+
+import cn.reghao.autodop.dmaster.app.db.query.config.ProjConfigQuery;
+import cn.reghao.autodop.dmaster.app.db.repository.config.ProjConfigRepository;
+import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
+import cn.reghao.autodop.dmaster.app.model.po.config.build.CompilerConfig;
+import cn.reghao.autodop.dmaster.app.model.po.config.build.PackerConfig;
+import cn.reghao.autodop.dmaster.app.model.po.config.build.RepoAuthConfig;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.Predicate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author reghao
+ * @date 2021-06-02 15:01:18
+ */
+@Service
+public class ProjConfigQueryImpl implements ProjConfigQuery {
+    private final ProjConfigRepository projRepository;
+
+    public ProjConfigQueryImpl(ProjConfigRepository projRepository) {
+        this.projRepository = projRepository;
+    }
+
+    @Override
+    public List<ProjConfig> queryAll(Map<String, String> kv) {
+        Specification<ProjConfig> specification = (root, query, cb) -> {
+            List<Predicate> predicates = new ArrayList<>();
+            kv.forEach((name, value) -> {
+                predicates.add(cb.equal(root.get(name), value));
+            });
+            return cb.and(predicates.toArray(new Predicate[0]));
+        };
+       return projRepository.findAll(specification);
+    }
+
+    @Override
+    public ProjConfig query(Map<String, String> kv) {
+        Specification<ProjConfig> specification = (root, query, cb) -> {
+            List<Predicate> predicates = new ArrayList<>();
+            kv.forEach((name, value) -> {
+                predicates.add(cb.equal(root.get(name), value));
+            });
+            return cb.and(predicates.toArray(new Predicate[0]));
+        };
+
+        List<ProjConfig> list = projRepository.findAll(specification);
+        return list.get(0);
+    }
+
+    @Override
+    public ProjConfig findByIsDeleteFalseAndProjId(String projId) {
+        return projRepository.findByIsDeleteFalseAndProjId(projId);
+    }
+
+    @Override
+    public Page<ProjConfig> findByIsDeleteFalse(Pageable pageable) {
+        return projRepository.findByIsDeleteFalse(pageable);
+    }
+
+    @Override
+    public List<ProjConfig> findAllByRepoAuthConfig(RepoAuthConfig repoAuthConfig) {
+        return projRepository.findAllByRepoAuthConfig(repoAuthConfig);
+    }
+
+    @Override
+    public List<ProjConfig> findAllByCompilerConfig(CompilerConfig compilerConfig) {
+        return projRepository.findAllByCompilerConfig(compilerConfig);
+    }
+
+    @Override
+    public List<ProjConfig> findAllByPackerConfig(PackerConfig packerConfig) {
+        return projRepository.findAllByPackerConfig(packerConfig);
+    }
+}

+ 22 - 22
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/AppConfigServiceImpl.java

@@ -1,8 +1,8 @@
 package cn.reghao.autodop.dmaster.app.service.config.impl;
 
-import cn.reghao.autodop.dmaster.app.db.crud.config.SharedEntityChecker;
+import cn.reghao.autodop.dmaster.app.db.crud.config.AppConfigCrud;
+import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
 import cn.reghao.autodop.dmaster.app.db.repository.AppRunningRepository;
-import cn.reghao.autodop.dmaster.app.db.repository.config.AppConfigRepository;
 import cn.reghao.autodop.dmaster.app.model.constant.AppType;
 import cn.reghao.autodop.dmaster.app.model.constant.EnvList;
 import cn.reghao.autodop.dmaster.app.model.po.AppRunning;
@@ -33,18 +33,18 @@ import java.util.stream.Collectors;
  */
 @Service
 public class AppConfigServiceImpl implements AppConfigService {
-    private AppConfigRepository appRepository;
-    private MachineHostQuery machineHostQuery;
-    private SharedEntityChecker sharedEntityChecker;
-    private BuildDeployConfigServiceImpl appBuildService;
-    private AppRunningRepository runningRepository;
-
-    public AppConfigServiceImpl(AppConfigRepository appRepository,
-                                MachineHostQuery machineHostQuery,
-                                SharedEntityChecker sharedEntityChecker,
-                                BuildDeployConfigServiceImpl appBuildService,
-                                AppRunningRepository runningRepository) {
-        this.appRepository = appRepository;
+    private final AppConfigQuery appConfigQuery;
+    private final AppConfigCrud appConfigCrud;
+    private final MachineHostQuery machineHostQuery;
+    private final SharedEntityChecker sharedEntityChecker;
+    private final BuildDeployConfigServiceImpl appBuildService;
+    private final AppRunningRepository runningRepository;
+
+    public AppConfigServiceImpl(AppConfigQuery appConfigQuery, AppConfigCrud appConfigCrud,
+                                MachineHostQuery machineHostQuery, SharedEntityChecker sharedEntityChecker,
+                                BuildDeployConfigServiceImpl appBuildService, AppRunningRepository runningRepository) {
+        this.appConfigQuery = appConfigQuery;
+        this.appConfigCrud = appConfigCrud;
         this.machineHostQuery = machineHostQuery;
         this.sharedEntityChecker = sharedEntityChecker;
         this.appBuildService = appBuildService;
@@ -57,7 +57,7 @@ public class AppConfigServiceImpl implements AppConfigService {
     }
 
     public void save(AppConfig appConfig) {
-        appRepository.save(appConfig);
+        appConfigCrud.save(appConfig);
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -67,7 +67,7 @@ public class AppConfigServiceImpl implements AppConfigService {
         // TODO 不能有应用处于构建中
         Integer id = app.getId();
         /*if (id != null) {
-            app = appRepository.findById(id).orElse(null);
+            app = appConfigCrud.findById(id).orElse(null);
         }*/
 
         Result result = checkEnum(app);
@@ -84,7 +84,7 @@ public class AppConfigServiceImpl implements AppConfigService {
 
         checkNotifyGroups(app);
         checkDeployConfigs(app);
-        appRepository.save(app);
+        appConfigCrud.save(app);
         appBuildService.refreshApp(app);
 
         String msg = id != null ? "更新 " + app.getAppId() + " 成功"
@@ -98,7 +98,7 @@ public class AppConfigServiceImpl implements AppConfigService {
         // TODO 不能有应用处于构建中
         Integer id = app.getId();
         /*if (id != null) {
-            app = appRepository.findById(id).orElse(null);
+            app = appConfigCrud.findById(id).orElse(null);
         }*/
 
         Result result = checkEnum(app);
@@ -115,7 +115,7 @@ public class AppConfigServiceImpl implements AppConfigService {
 
         checkNotifyGroups(app);
         checkDeployConfigs(app);
-        appRepository.save(app);
+        appConfigCrud.save(app);
         appBuildService.refreshApp(app);
 
         String msg = id != null ? "更新 " + app.getAppId() + " 成功"
@@ -125,7 +125,7 @@ public class AppConfigServiceImpl implements AppConfigService {
 
     @Override
     public Result setNotify(int id, List<NotifyGroup> notifyGroups) {
-        //appRepository.save(app);
+        //appConfigCrud.save(app);
         return Result.result(ResultStatus.SUCCESS);
     }
 
@@ -206,7 +206,7 @@ public class AppConfigServiceImpl implements AppConfigService {
             return Result.result(ResultStatus.FAIL, msg);
         }
 
-        AppConfig toApp = appRepository.findByIsDeleteFalseAndAppId(to.getNewId());
+        AppConfig toApp = appConfigQuery.findByIsDeleteFalseAndAppId(to.getNewId());
         if (toApp != null) {
             String msg = to.getNewId() + " 已存在";
             return Result.result(ResultStatus.FAIL, msg);
@@ -232,7 +232,7 @@ public class AppConfigServiceImpl implements AppConfigService {
 
         // TODO 处理所有与 app 关联的数据
         appBuildService.delete(app.getAppId());
-        appRepository.delete(app);
+        appConfigCrud.delete(app);
         return Result.result(ResultStatus.SUCCESS);
     }
 }

+ 10 - 9
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/CompilerConfigServiceImpl.java

@@ -1,8 +1,8 @@
 package cn.reghao.autodop.dmaster.app.service.config.impl;
 
+import cn.reghao.autodop.dmaster.app.db.crud.config.CompilerConfigCrud;
 import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
 import cn.reghao.autodop.dmaster.app.db.query.config.ProjConfigQuery;
-import cn.reghao.autodop.dmaster.app.db.repository.config.build.CompilerConfigRepository;
 import cn.reghao.autodop.dmaster.app.model.constant.build.CompileType;
 import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
@@ -21,12 +21,13 @@ import java.util.stream.Collectors;
  */
 @Service
 public class CompilerConfigServiceImpl implements CompilerConfigService {
-    private CompilerConfigRepository compilerRepository;
-    private AppConfigQuery appConfigQuery;
-    private ProjConfigQuery projConfigQuery;
+    private final CompilerConfigCrud compilerConfigCrud;
+    private final AppConfigQuery appConfigQuery;
+    private final ProjConfigQuery projConfigQuery;
 
-    public CompilerConfigServiceImpl(CompilerConfigRepository compilerRepository, AppConfigQuery appConfigQuery, ProjConfigQuery projConfigQuery) {
-        this.compilerRepository = compilerRepository;
+    public CompilerConfigServiceImpl(CompilerConfigCrud compilerConfigCrud, AppConfigQuery appConfigQuery,
+                                     ProjConfigQuery projConfigQuery) {
+        this.compilerConfigCrud = compilerConfigCrud;
         this.appConfigQuery = appConfigQuery;
         this.projConfigQuery = projConfigQuery;
     }
@@ -37,7 +38,7 @@ public class CompilerConfigServiceImpl implements CompilerConfigService {
         if (result.getCode() != ResultStatus.SUCCESS.getCode()) {
             return result;
         }
-        compilerRepository.save(compilerConfig);
+        compilerConfigCrud.save(compilerConfig);
         return result;
     }
 
@@ -47,7 +48,7 @@ public class CompilerConfigServiceImpl implements CompilerConfigService {
         if (result.getCode() != ResultStatus.SUCCESS.getCode()) {
             return result;
         }
-        compilerRepository.save(compilerConfig);
+        compilerConfigCrud.save(compilerConfig);
         return result;
     }
 
@@ -85,7 +86,7 @@ public class CompilerConfigServiceImpl implements CompilerConfigService {
         List<AppConfig> apps = appConfigQuery.findAllByCompilerConfig(compilerConfig);
         List<ProjConfig> projs = projConfigQuery.findAllByCompilerConfig(compilerConfig);
         if (apps.isEmpty() && projs.isEmpty()) {
-            compilerRepository.delete(compilerConfig);
+            compilerConfigCrud.delete(compilerConfig);
             return Result.result(ResultStatus.SUCCESS);
         } else {
             List<String> ids = apps.stream().map(AppConfig::getAppId).collect(Collectors.toList());

+ 10 - 9
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/PackerConfigServiceImpl.java

@@ -1,8 +1,8 @@
 package cn.reghao.autodop.dmaster.app.service.config.impl;
 
+import cn.reghao.autodop.dmaster.app.db.crud.config.PackerConfigCrud;
 import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
 import cn.reghao.autodop.dmaster.app.db.query.config.ProjConfigQuery;
-import cn.reghao.autodop.dmaster.app.db.repository.config.build.PackerConfigRepository;
 import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.build.PackerConfig;
@@ -20,25 +20,26 @@ import java.util.stream.Collectors;
  */
 @Service
 public class PackerConfigServiceImpl implements PackerConfigService {
-    private PackerConfigRepository packerRepository;
-    private AppConfigQuery appConfigQuery;
-    private ProjConfigQuery projConfigQuery;
+    private final PackerConfigCrud packerConfigCrud;
+    private final AppConfigQuery appConfigQuery;
+    private final ProjConfigQuery projConfigQuery;
 
-    public PackerConfigServiceImpl(PackerConfigRepository packerRepository, AppConfigQuery appConfigQuery, ProjConfigQuery projConfigQuery) {
-        this.packerRepository = packerRepository;
+    public PackerConfigServiceImpl(PackerConfigCrud packerConfigCrud, AppConfigQuery appConfigQuery, 
+                                   ProjConfigQuery projConfigQuery) {
+        this.packerConfigCrud = packerConfigCrud;
         this.appConfigQuery = appConfigQuery;
         this.projConfigQuery = projConfigQuery;
     }
 
     @Override
     public Result add(PackerConfig packerConfig) {
-        packerRepository.save(packerConfig);
+        packerConfigCrud.save(packerConfig);
         return Result.result(ResultStatus.SUCCESS);
     }
 
     @Override
     public Result modify(PackerConfig packerConfig) {
-        packerRepository.save(packerConfig);
+        packerConfigCrud.save(packerConfig);
         return Result.result(ResultStatus.SUCCESS);
     }
 
@@ -47,7 +48,7 @@ public class PackerConfigServiceImpl implements PackerConfigService {
         List<AppConfig> apps = appConfigQuery.findAllByPackerConfig(packerConfig);
         List<ProjConfig> projs = projConfigQuery.findAllByPackerConfig(packerConfig);
         if (apps.isEmpty() && projs.isEmpty()) {
-            packerRepository.delete(packerConfig);
+            packerConfigCrud.delete(packerConfig);
             return Result.result(ResultStatus.SUCCESS);
         } else {
             List<String> ids = apps.stream().map(AppConfig::getAppId).collect(Collectors.toList());

+ 19 - 18
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/ProjConfigServiceImpl.java

@@ -1,8 +1,8 @@
 package cn.reghao.autodop.dmaster.app.service.config.impl;
 
-import cn.reghao.autodop.dmaster.app.db.crud.config.SharedEntityChecker;
-import cn.reghao.autodop.dmaster.app.db.repository.config.AppConfigRepository;
-import cn.reghao.autodop.dmaster.app.db.repository.config.ProjConfigRepository;
+import cn.reghao.autodop.dmaster.app.db.crud.config.ProjConfigCrud;
+import cn.reghao.autodop.dmaster.app.db.query.config.AppConfigQuery;
+import cn.reghao.autodop.dmaster.app.db.query.config.ProjConfigQuery;
 import cn.reghao.autodop.dmaster.app.model.po.config.AppConfig;
 import cn.reghao.autodop.dmaster.app.model.po.config.ProjConfig;
 import cn.reghao.autodop.dmaster.app.model.vo.NewApp;
@@ -21,15 +21,16 @@ import java.util.stream.Collectors;
  */
 @Service
 public class ProjConfigServiceImpl implements ProjConfigService {
-    private ProjConfigRepository projRepository;
-    private AppConfigRepository appRepository;
-    private SharedEntityChecker sharedEntityChecker;
+    private final ProjConfigQuery projConfigQuery;
+    private final ProjConfigCrud projConfigCrud;
+    private final AppConfigQuery appConfigQuery;
+    private final SharedEntityChecker sharedEntityChecker;
 
-    public ProjConfigServiceImpl(ProjConfigRepository projRepository,
-                          AppConfigRepository appRepository,
-                          SharedEntityChecker sharedEntityChecker) {
-        this.projRepository = projRepository;
-        this.appRepository = appRepository;
+    public ProjConfigServiceImpl(ProjConfigQuery projConfigQuery, ProjConfigCrud projConfigCrud,
+                                 AppConfigQuery appConfigQuery, SharedEntityChecker sharedEntityChecker) {
+        this.projConfigQuery = projConfigQuery;
+        this.projConfigCrud = projConfigCrud;
+        this.appConfigQuery = appConfigQuery;
         this.sharedEntityChecker = sharedEntityChecker;
     }
 
@@ -38,13 +39,13 @@ public class ProjConfigServiceImpl implements ProjConfigService {
         try {
             Integer id = proj.getId();
             sharedEntityChecker.checkAndSetBuildConfig(proj);
-            ProjConfig projEntity = projRepository.findByIsDeleteFalseAndProjId(proj.getProjId());
+            ProjConfig projEntity = projConfigQuery.findByIsDeleteFalseAndProjId(proj.getProjId());
             if (projEntity != null) {
                 proj.setId(projEntity.getId());
                 proj.setCreateTime(projEntity.getCreateTime());
                 proj.setUpdateTime(LocalDateTime.now());
             }
-            projRepository.save(proj);
+            projConfigCrud.save(proj);
 
             String msg = id != null ? "更新 " + proj.getProjId() + " 成功"
                     : "添加 " + proj.getProjId() + " 成功";
@@ -62,7 +63,7 @@ public class ProjConfigServiceImpl implements ProjConfigService {
             return Result.result(ResultStatus.FAIL, msg);
         }
 
-        ProjConfig toProj = projRepository.findByIsDeleteFalseAndProjId(to.getNewId());
+        ProjConfig toProj = projConfigQuery.findByIsDeleteFalseAndProjId(to.getNewId());
         if (toProj != null) {
             String msg = to.getNewId() + " 已存在";
             return Result.result(ResultStatus.FAIL, msg);
@@ -83,13 +84,13 @@ public class ProjConfigServiceImpl implements ProjConfigService {
         try {
             Integer id = proj.getId();
             sharedEntityChecker.checkAndSetBuildConfig(proj);
-            ProjConfig projEntity = projRepository.findByIsDeleteFalseAndProjId(proj.getProjId());
+            ProjConfig projEntity = projConfigQuery.findByIsDeleteFalseAndProjId(proj.getProjId());
             if (projEntity != null) {
                 proj.setId(projEntity.getId());
                 proj.setCreateTime(projEntity.getCreateTime());
                 proj.setUpdateTime(LocalDateTime.now());
             }
-            projRepository.save(proj);
+            projConfigCrud.save(proj);
 
             String msg = id != null ? "更新 " + proj.getProjId() + " 成功"
                     : "添加 " + proj.getProjId() + " 成功";
@@ -102,9 +103,9 @@ public class ProjConfigServiceImpl implements ProjConfigService {
 
     @Override
     public Result delete(ProjConfig proj) {
-        List<AppConfig> apps = appRepository.findAllByProj(proj);
+        List<AppConfig> apps = appConfigQuery.findAllByProj(proj);
         if (apps.isEmpty()) {
-            projRepository.delete(proj);
+            projConfigCrud.delete(proj);
             return Result.result(ResultStatus.SUCCESS);
         } else {
             String appIds = apps.stream().map(AppConfig::getAppId).collect(Collectors.joining());

+ 1 - 1
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/db/crud/config/SharedEntityChecker.java → dmaster/src/main/java/cn/reghao/autodop/dmaster/app/service/config/impl/SharedEntityChecker.java

@@ -1,4 +1,4 @@
-package cn.reghao.autodop.dmaster.app.db.crud.config;
+package cn.reghao.autodop.dmaster.app.service.config.impl;
 
 import cn.reghao.autodop.dmaster.app.db.query.config.ProjConfigQuery;
 import cn.reghao.autodop.dmaster.app.db.query.config.CompilerConfigQuery;