Преглед изворни кода

应用配置页面开发中

reghao пре 4 година
родитељ
комит
80ab8aacb7

+ 73 - 8
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/view/AppConfigPageController.java

@@ -1,11 +1,20 @@
 package cn.reghao.autodop.dmaster.app.controller.view;
 
+import cn.reghao.autodop.dmaster.app.constant.AppType;
 import cn.reghao.autodop.dmaster.app.constant.EnvType;
 import cn.reghao.autodop.dmaster.app.db.app.AppConfigQuery;
 import cn.reghao.autodop.dmaster.app.entity.config.AppOrchestration;
+import cn.reghao.autodop.dmaster.app.entity.config.build.CompilerConfig;
+import cn.reghao.autodop.dmaster.app.entity.config.build.PackerConfig;
+import cn.reghao.autodop.dmaster.app.entity.config.build.RepoAuthConfig;
 import cn.reghao.autodop.dmaster.app.repository.config.AppOrchestrationRepository;
+import cn.reghao.autodop.dmaster.app.repository.config.build.CompilerConfigRepository;
+import cn.reghao.autodop.dmaster.app.repository.config.build.PackerConfigRepository;
+import cn.reghao.autodop.dmaster.app.repository.config.build.RepoAuthConfigRepository;
 import cn.reghao.autodop.dmaster.app.validator.AppOrchestrationValidator;
-import cn.reghao.autodop.dmaster.auth.entity.User;
+import cn.reghao.autodop.dmaster.machine.entity.MachineInfo;
+import cn.reghao.autodop.dmaster.machine.entity.NetworkInfo;
+import cn.reghao.autodop.dmaster.machine.repository.MachineInfoRepository;
 import cn.reghao.autodop.dmaster.utils.WebBody;
 import cn.reghao.autodop.dmaster.utils.db.PageList;
 import cn.reghao.autodop.dmaster.utils.db.PageSort;
@@ -22,9 +31,8 @@ import org.springframework.ui.Model;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author reghao
@@ -37,10 +45,23 @@ import java.util.Map;
 public class AppConfigPageController {
     private AppConfigQuery appConfigQuery;
     private AppOrchestrationRepository appRepository;
-
-    public AppConfigPageController(AppConfigQuery appConfigQuery, AppOrchestrationRepository appRepository) {
+    private RepoAuthConfigRepository repoAuthRepository;
+    private CompilerConfigRepository compilerRepository;
+    private PackerConfigRepository packerRepository;
+    private MachineInfoRepository machineRepository;
+
+    public AppConfigPageController(AppConfigQuery appConfigQuery,
+                                   AppOrchestrationRepository appRepository,
+                                   RepoAuthConfigRepository repoAuthRepository,
+                                   CompilerConfigRepository compilerRepository,
+                                   PackerConfigRepository packerRepository,
+                                   MachineInfoRepository machineRepository) {
         this.appConfigQuery = appConfigQuery;
         this.appRepository = appRepository;
+        this.repoAuthRepository = repoAuthRepository;
+        this.compilerRepository = compilerRepository;
+        this.packerRepository = packerRepository;
+        this.machineRepository = machineRepository;
     }
 
     @ApiOperation(value = "应用配置页面")
@@ -76,18 +97,62 @@ public class AppConfigPageController {
     }
 
     @PostMapping(value = "/app", produces = MediaType.APPLICATION_JSON_VALUE)
-    public String appConfigPage(@Validated AppOrchestrationValidator appOrchestrationValidator,
+    public String appConfigPage(/*@Validated AppOrchestrationValidator appOrchestrationValidator,*/
                                 AppOrchestration appOrchestration) {
         return WebBody.success();
     }
 
     @GetMapping("/app/add")
-    public String addAppConfigPage() {
+    public String addAppConfigPage(Model model) {
+        setModel(model);
         return "/app/config/app/add";
     }
 
+    private void setModel(Model model) {
+        List<String> environments = new ArrayList<>();
+        for (EnvType envType : EnvType.values()) {
+            environments.add(envType.name());
+        }
+
+        List<String> appTypes = new ArrayList<>();
+        for (AppType appType : AppType.values()) {
+            appTypes.add(appType.name());
+        }
+
+        List<String> repoAuths = repoAuthRepository.findAllByIsDeleteFalse().stream()
+                .map(RepoAuthConfig::getName)
+                .collect(Collectors.toList());
+        List<String> compilers = compilerRepository.findAllByIsDeleteFalse().stream()
+                .map(CompilerConfig::getName)
+                .collect(Collectors.toList());
+        List<String> packers = packerRepository.findAllByIsDeleteFalse().stream()
+                .map(PackerConfig::getName)
+                .collect(Collectors.toList());
+
+        List<MachineInfo> machines = machineRepository.findAllByIsDeleteFalse();
+        List<String> machineIpv4s = machines.stream()
+                .map(machineInfo -> {
+                    List<NetworkInfo> networkInfos = machineInfo.getNetworkInfo();
+                    if (!networkInfos.isEmpty()) {
+                        return networkInfos.get(0).getIpv4();
+                    }
+
+                    return null;
+                })
+                .filter(Objects::isNull)
+                .collect(Collectors.toList());
+
+        model.addAttribute("environments", environments);
+        model.addAttribute("appTypes", appTypes);
+        model.addAttribute("repoAuths", repoAuths);
+        model.addAttribute("compilers", compilers);
+        model.addAttribute("packers", packers);
+        model.addAttribute("machines", machineIpv4s);
+    }
+
     @GetMapping("/app/edit/{id}")
     public String editAppConfigPage(@PathVariable("id") AppOrchestration app, Model model) {
+        setModel(model);
         model.addAttribute("app", app);
         return "/app/config/app/add";
     }

+ 3 - 3
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/controller/view/AppPageController.java

@@ -59,15 +59,15 @@ public class AppPageController {
     @ApiOperation(value = "构建部署页面")
     @GetMapping("/build")
     public String buildPage(@RequestParam(value = "env", required = false) String env,
-                            @RequestParam(value = "appName", required = false) String appName,
+                            @RequestParam(value = "appId", required = false) String appId,
                             Model model) {
         if (env == null) {
             env = EnvType.test.name();
         }
 
-        if (appName != null) {
+        if (appId != null) {
             Map<String, String> map = new HashMap<>();
-            map.put("appName", appName);
+            map.put("appId", appId);
             List<AppBuilding> list = buildingQuery.query(map);
             Page<AppBuilding> page = new PageImpl<>(list);
             PageList<AppBuilding> pageList = PageList.pageList(page);

+ 0 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/config/build/CompilerConfigRepository.java

@@ -14,8 +14,4 @@ import java.util.List;
 public interface CompilerConfigRepository extends JpaRepository<CompilerConfig, Integer> {
     CompilerConfig findByIsDeleteFalseAndName(String compilerName);
     List<CompilerConfig> findAllByIsDeleteFalse();
-
-    @Modifying
-    @Transactional
-    void deleteByName(String compilerName);
 }

+ 0 - 4
dmaster/src/main/java/cn/reghao/autodop/dmaster/app/repository/config/build/PackerConfigRepository.java

@@ -14,8 +14,4 @@ import java.util.List;
 public interface PackerConfigRepository extends JpaRepository<PackerConfig, Integer> {
     PackerConfig findByIsDeleteFalseAndName(String packerName);
     List<PackerConfig> findAllByIsDeleteFalse();
-
-    @Modifying
-    @Transactional
-    void deleteByName(String packerName);
 }

+ 2 - 0
dmaster/src/main/java/cn/reghao/autodop/dmaster/machine/repository/MachineInfoRepository.java

@@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Modifying;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 /**
  * @author reghao
@@ -15,6 +16,7 @@ import javax.transaction.Transactional;
 public interface MachineInfoRepository extends JpaRepository<MachineInfo, Long> {
     Page<MachineInfo> findByIsDeleteFalse(Pageable pageable);
     MachineInfo findByMachineId(String machineId);
+    List<MachineInfo> findAllByIsDeleteFalse();
 
     @Modifying
     @Transactional

+ 3 - 3
dmaster/src/main/resources/templates/app/build.html

@@ -20,9 +20,9 @@
                     </div>
                 </div>
                 <div class="layui-inline timo-search-box">
-                    <label class="layui-form-label">应用</label>
+                    <label class="layui-form-label">应用 ID</label>
                     <div class="layui-input-block">
-                        <input type="text" name="appId" th:value="${param.appName}" placeholder="请输入应用名字"
+                        <input type="text" name="appId" th:value="${param.appName}" placeholder="请输入应用 ID"
                                autocomplete="off" class="layui-input">
                     </div>
                 </div>
@@ -41,7 +41,7 @@
                         <label class="timo-checkbox"><input type="checkbox">
                             <i class="layui-icon layui-icon-ok"></i></label>
                     </th>
-                    <th class="sortable" data-field="appId">应用</th>
+                    <th class="sortable" data-field="appId">应用 ID</th>
                     <th class="sortable" data-field="branch">分支</th>
                     <th class="sortable" data-field="commitId">版本</th>
                     <th class="sortable" data-field="commitTime">提交时间</th>

+ 28 - 25
dmaster/src/main/resources/templates/app/config/app/add.html

@@ -37,7 +37,11 @@
                 <td>
                     <div class="layui-form-item">
                         <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="enable"  placeholder="请输入是否启用" required th:value="${app?.enable}">
+                            <input class="layui-input" type="text" list="isEnable" name="enable" placeholder="请输入是否启用" required th:value="${app?.enable}">
+                            <datalist id="isEnable">
+                                <option>true</option>
+                                <option>false</option>
+                            </datalist>
                         </div>
                     </div>
                 </td>
@@ -47,7 +51,10 @@
                 <td>
                     <div class="layui-form-item">
                         <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="env"  placeholder="请输入应用所属环境" required th:value="${app?.env}">
+                            <input class="layui-input" type="text" list="envList" name="env"  placeholder="请选择应用所属环境" required th:value="${app?.env}">
+                            <datalist id="envList">
+                                <option th:each="item : ${environments}">[[${item}]]</option>
+                            </datalist>
                         </div>
                     </div>
                 </td>
@@ -55,7 +62,10 @@
                 <td>
                     <div class="layui-form-item">
                         <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="appType"  placeholder="请输入应用类型" required th:value="${app?.appType}">
+                            <input class="layui-input" type="text" list="appTypeList" name="appType"  placeholder="请选择应用类型" required th:value="${app?.appType}">
+                            <datalist id="appTypeList">
+                                <option th:each="item : ${appTypes}">[[${item}]]</option>
+                            </datalist>
                         </div>
                     </div>
                 </td>
@@ -128,27 +138,36 @@
                 </td>
             </tr>
             <tr>
-                <th>仓库名字</th>
+                <th>仓库认证</th>
                 <td>
                     <div class="layui-form-item">
                         <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="repoAuthName"  placeholder="请输入仓库名字" required th:value="${app?.buildConfig?.repoAuthConfig?.name}">
+                            <input class="layui-input" type="text" list="repoAuthList" name="repoAuth"  placeholder="请选择仓库认证" required th:value="${app?.buildConfig?.repoAuthConfig?.name}">
+                            <datalist id="repoAuthList">
+                                <option th:each="item : ${repoAuths}">[[${item}]]</option>
+                            </datalist>
                         </div>
                     </div>
                 </td>
-                <th>编译器名字</th>
+                <th>编译器</th>
                 <td>
                     <div class="layui-form-item">
                         <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="compilerName"  placeholder="请输入编译器名字" required th:value="${app?.buildConfig?.compilerConfig?.name}">
+                            <input class="layui-input" type="text" list="compilerList" name="compiler"  placeholder="请选择编译器" required th:value="${app?.buildConfig?.compilerConfig?.name}">
+                            <datalist id="compilerList">
+                                <option th:each="item : ${compilers}">[[${item}]]</option>
+                            </datalist>
                         </div>
                     </div>
                 </td>
-                <th>打包名字</th>
+                <th>打包工具</th>
                 <td>
                     <div class="layui-form-item">
                         <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="packerName"  placeholder="请输入打包名字" required th:value="${app?.buildConfig?.packerConfig?.name}">
+                            <input class="layui-input" type="text" list="packerList" name="compiler"  placeholder="请选择打包工具" required th:value="${app?.buildConfig?.packerConfig?.name}">
+                            <datalist id="packerList">
+                                <option th:each="item : ${packers}">[[${item}]]</option>
+                            </datalist>
                         </div>
                     </div>
                 </td>
@@ -159,14 +178,6 @@
         <table class="layui-table timo-detail-table">
             <tbody>
             <tr>
-                <th>机器 ID</th>
-                <td>
-                    <div class="layui-form-item">
-                        <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="appName"  placeholder="请输入机器 ID" required th:value="${app?.appName}">
-                        </div>
-                    </div>
-                </td>
                 <th>机器地址</th>
                 <td>
                     <div class="layui-form-item">
@@ -175,14 +186,6 @@
                         </div>
                     </div>
                 </td>
-                <th>打包类型</th>
-                <td>
-                    <div class="layui-form-item">
-                        <div class="layui-input-inline">
-                            <input class="layui-input" type="text" name="appName"  placeholder="请输入打包类型" required th:value="${app?.appName}">
-                        </div>
-                    </div>
-                </td>
             </tr>
             <tr>
                 <th>Docker 配置</th>