Explorar el Código

添加对 CompilerConfig#compilerBinds 字段的 crud

reghao hace 2 meses
padre
commit
3611695423

+ 16 - 1
web/src/main/java/cn/reghao/bnt/web/devops/build/controller/CompilerController.java

@@ -1,6 +1,7 @@
 package cn.reghao.bnt.web.devops.build.controller;
 
 import cn.reghao.bnt.web.devops.build.db.repository.CompilerConfigRepository;
+import cn.reghao.bnt.web.devops.build.model.dto.CompilerBindDto;
 import cn.reghao.bnt.web.devops.build.model.po.CompilerConfig;
 import cn.reghao.bnt.web.devops.build.service.CompilerConfigService;
 import cn.reghao.bnt.web.devops.builder.model.constant.CompileType;
@@ -65,8 +66,22 @@ public class CompilerController {
         return WebResult.success(compileTypes);
     }
 
+    @Operation(summary = "添加 docker 编译器映射目录", description = "N")
+    @PostMapping(value = "/bind/add", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String addCompilerBind(@RequestBody @Validated CompilerBindDto compilerBindDto) {
+        compilerConfigService.addDockerBind(compilerBindDto);
+        return WebResult.success();
+    }
+
+    @Operation(summary = "添加 docker 编译器映射目录", description = "N")
+    @PostMapping(value = "/bind/delete", produces = MediaType.APPLICATION_JSON_VALUE)
+    public String deleteCompilerBind(@RequestBody @Validated CompilerBindDto compilerBindDto) {
+        compilerConfigService.deleteDockerBind(compilerBindDto);
+        return WebResult.success();
+    }
+
     @Operation(summary = "docker 编译器映射目录页面", description = "N")
-    @GetMapping(value = "/bind", produces = MediaType.APPLICATION_JSON_VALUE)
+    @GetMapping(value = "/bind/list", produces = MediaType.APPLICATION_JSON_VALUE)
     public String compilerBindPage(@RequestParam("id") int id) {
         CompilerConfig compilerConfig = compilerConfigRepository.findById(id).orElse(null);
         if (compilerConfig != null && compilerConfig.getType().equals(CompileType.docker.getName())) {

+ 24 - 0
web/src/main/java/cn/reghao/bnt/web/devops/build/model/dto/CompilerBindDto.java

@@ -0,0 +1,24 @@
+package cn.reghao.bnt.web.devops.build.model.dto;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import jakarta.validation.constraints.Size;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author reghao
+ * @date 2025-12-23 15:03:05
+ */
+@Setter
+@Getter
+public class CompilerBindDto {
+    @NotNull
+    private Integer id;
+    @NotBlank
+    @Size(max = 255, message = "绑定的主机目录长度不能超过 255 个字符")
+    private String hostPath;
+    @NotBlank
+    @Size(max = 255, message = "绑定的容器目录长度不能超过 255 个字符")
+    private String containerPath;
+}

+ 6 - 0
web/src/main/java/cn/reghao/bnt/web/devops/build/model/po/CompilerBind.java

@@ -1,5 +1,6 @@
 package cn.reghao.bnt.web.devops.build.model.po;
 
+import cn.reghao.bnt.web.devops.build.model.dto.CompilerBindDto;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -19,4 +20,9 @@ import jakarta.persistence.Embeddable;
 public class CompilerBind {
     private String hostPath;
     private String containerPath;
+
+    public CompilerBind(CompilerBindDto compilerBindDto) {
+        this.hostPath = compilerBindDto.getHostPath();
+        this.containerPath = compilerBindDto.getContainerPath();
+    }
 }

+ 3 - 0
web/src/main/java/cn/reghao/bnt/web/devops/build/service/CompilerConfigService.java

@@ -1,5 +1,6 @@
 package cn.reghao.bnt.web.devops.build.service;
 
+import cn.reghao.bnt.web.devops.build.model.dto.CompilerBindDto;
 import cn.reghao.bnt.web.devops.build.model.po.CompilerConfig;
 import cn.reghao.jutil.jdk.web.result.Result;
 
@@ -11,4 +12,6 @@ public interface CompilerConfigService {
     Result addOrUpdate(CompilerConfig compilerConfig);
     Result delete(int id);
     String getCompilerVersion(int id);
+    void addDockerBind(CompilerBindDto compilerBindDto);
+    void deleteDockerBind(CompilerBindDto compilerBindDto);
 }

+ 41 - 0
web/src/main/java/cn/reghao/bnt/web/devops/build/service/impl/CompilerConfigServiceImpl.java

@@ -3,6 +3,8 @@ package cn.reghao.bnt.web.devops.build.service.impl;
 import cn.reghao.bnt.web.devops.app.db.query.AppBuildQuery;
 import cn.reghao.bnt.web.devops.app.model.po.config.AppConfig;
 import cn.reghao.bnt.web.devops.build.db.repository.CompilerConfigRepository;
+import cn.reghao.bnt.web.devops.build.model.dto.CompilerBindDto;
+import cn.reghao.bnt.web.devops.build.model.po.CompilerBind;
 import cn.reghao.bnt.web.devops.build.model.po.CompilerConfig;
 import cn.reghao.bnt.web.devops.build.service.CompilerConfigService;
 import cn.reghao.bnt.web.devops.builder.chain.BuildTools;
@@ -14,7 +16,9 @@ import cn.reghao.jutil.jdk.shell.ShellExecutor;
 import cn.reghao.jutil.jdk.shell.ShellResult;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -105,4 +109,41 @@ public class CompilerConfigServiceImpl implements CompilerConfigService {
         String html = StringUtil.txtToHtml(shellResult.getResult());
         return html;
     }
+
+    @Override
+    public void addDockerBind(CompilerBindDto compilerBindDto) {
+        int id = compilerBindDto.getId();
+        CompilerConfig compilerConfig = compilerConfigRepository.findById(id).orElse(null);
+        if (compilerConfig == null) {
+            return;
+        }
+
+        String hostPath = compilerBindDto.getHostPath();
+        Map<String, CompilerBind> map = compilerConfig.getCompilerBinds().stream()
+                .collect(Collectors.toMap(CompilerBind::getHostPath, bind -> bind));
+        CompilerBind compilerBind = map.get(hostPath);
+        if (compilerBind == null) {
+            compilerConfig.getCompilerBinds().add(new CompilerBind(compilerBindDto));
+            compilerConfigRepository.save(compilerConfig);
+        }
+    }
+
+    @Override
+    public void deleteDockerBind(CompilerBindDto compilerBindDto) {
+        int id = compilerBindDto.getId();
+        CompilerConfig compilerConfig = compilerConfigRepository.findById(id).orElse(null);
+        if (compilerConfig == null) {
+            return;
+        }
+
+        String hostPath = compilerBindDto.getHostPath();
+        Map<String, CompilerBind> map = compilerConfig.getCompilerBinds().stream()
+                .collect(Collectors.toMap(CompilerBind::getHostPath, bind -> bind));
+        CompilerBind compilerBind = map.get(hostPath);
+        if (compilerBind != null) {
+            map.remove(hostPath);
+            compilerConfig.setCompilerBinds(new ArrayList<>(map.values()));
+            compilerConfigRepository.save(compilerConfig);
+        }
+    }
 }