Selaa lähdekoodia

添加对 AppConfig#domains 字段的 crud

reghao 2 kuukautta sitten
vanhempi
commit
6ed6e7562d

+ 28 - 6
web/src/main/java/cn/reghao/bnt/web/devops/app/controller/AppConfigController.java

@@ -1,6 +1,8 @@
 package cn.reghao.bnt.web.devops.app.controller;
 
+import cn.reghao.bnt.web.devops.app.model.dto.AppDomainDto;
 import cn.reghao.bnt.web.devops.app.model.vo.AppConfigDetail;
+import cn.reghao.bnt.web.devops.app.service.AppConfigService;
 import cn.reghao.bnt.web.util.SelectOption;
 import cn.reghao.bnt.web.devops.app.model.dto.AppConfigDto;
 import cn.reghao.bnt.web.devops.app.model.dto.AppConfigUpdateDto;
@@ -24,9 +26,7 @@ import org.springframework.http.MediaType;
 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;
 
 /**
@@ -44,15 +44,18 @@ public class AppConfigController {
     private final CompilerConfigRepository compilerConfigRepository;
     private final PackerConfigRepository packerConfigRepository;
     private final AppBuildService appBuildService;
+    private final AppConfigService appConfigService;
 
     public AppConfigController(AppBuildQuery appBuildQuery, RepoAuthConfigRepository repoAuthConfigRepository,
                                CompilerConfigRepository compilerConfigRepository,
-                               PackerConfigRepository packerConfigRepository, AppBuildService appBuildService) {
+                               PackerConfigRepository packerConfigRepository, AppBuildService appBuildService,
+                               AppConfigService appConfigService) {
         this.appBuildQuery = appBuildQuery;
         this.repoAuthConfigRepository = repoAuthConfigRepository;
         this.compilerConfigRepository = compilerConfigRepository;
         this.packerConfigRepository = packerConfigRepository;
         this.appBuildService = appBuildService;
+        this.appConfigService = appConfigService;
     }
 
     @Operation(summary = "应用配置列表页面", description = "N")
@@ -106,11 +109,30 @@ public class AppConfigController {
         return WebResult.success(new AppConfigDetail(app));
     }
 
+    @Operation(summary = "添加应用绑定的域名", description = "N")
+    @PostMapping("/bind_domain/add")
+    public String addAppBindDomain(@RequestBody @Validated AppDomainDto appDomainDto) {
+        appConfigService.addAppDomain(appDomainDto);
+        return WebResult.success();
+    }
+
+    @Operation(summary = "删除应用绑定的域名", description = "N")
+    @PostMapping("/bind_domain/delete")
+    public String deleteAppBindDomain(@RequestBody @Validated AppDomainDto appDomainDto) {
+        appConfigService.deleteAppDomain(appDomainDto);
+        return WebResult.success();
+    }
+
     @Operation(summary = "应用绑定的域名", description = "N")
-    @GetMapping("/bind_domain")
+    @GetMapping("/bind_domain/list")
     public String getAppBindDomains(@RequestParam("appId") String appId) {
         AppConfig app = appBuildQuery.getAppConfig(appId);
-        return WebResult.success(app.getDomains());
+        List<String> domainList = new ArrayList<>();
+        if (app.getDomains() != null) {
+            domainList = Arrays.asList(app.getDomains().split(","));
+        }
+
+        return WebResult.success(domainList);
     }
 
     @Operation(summary = "添加应用配置", description = "N")

+ 22 - 0
web/src/main/java/cn/reghao/bnt/web/devops/app/model/dto/AppDomainDto.java

@@ -0,0 +1,22 @@
+package cn.reghao.bnt.web.devops.app.model.dto;
+
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Pattern;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.validator.constraints.Length;
+
+/**
+ * @author reghao
+ * @date 2025-12-23 14:15:53
+ */
+@Setter
+@Getter
+public class AppDomainDto {
+    @Pattern(regexp = "^\\S*$", message = "应用 ID 不能包含空白符")
+    @Length(max = 20, message = "应用 ID 的最大长度为 20 个字符")
+    private String appId;
+    @NotBlank
+    @Length(min = 3, max = 255, message = "domain 的最大长度为 255 个字符")
+    private String domain;
+}

+ 70 - 0
web/src/main/java/cn/reghao/bnt/web/devops/app/service/AppConfigService.java

@@ -0,0 +1,70 @@
+package cn.reghao.bnt.web.devops.app.service;
+
+import cn.reghao.bnt.web.devops.app.db.repository.config.AppConfigRepository;
+import cn.reghao.bnt.web.devops.app.model.dto.AppDomainDto;
+import cn.reghao.bnt.web.devops.app.model.po.config.AppConfig;
+import org.springframework.stereotype.Service;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author reghao
+ * @date 2025-12-23 14:38:14
+ */
+@Service
+public class AppConfigService {
+    private final AppConfigRepository appConfigRepository;
+
+    public AppConfigService(AppConfigRepository appConfigRepository) {
+        this.appConfigRepository = appConfigRepository;
+    }
+
+    public void addAppDomain(AppDomainDto appDomainDto) {
+        String appId = appDomainDto.getAppId();
+        String domain = appDomainDto.getDomain();
+        AppConfig appConfig = appConfigRepository.findByAppId(appId);
+        if (appConfig == null) {
+            return;
+        }
+
+        if (appConfig.getDomains() != null) {
+            Set<String> domainSet = new HashSet<>(List.of(appConfig.getDomains().split(",")));
+            if (!domainSet.contains(domain)) {
+                domainSet.add(domain);
+                String appDomains = domainSet.toString().replace("[", "").replace("]", "");
+                appConfig.setDomains(appDomains);
+                appConfigRepository.save(appConfig);
+            }
+        } else {
+            appConfig.setDomains(domain);
+            appConfigRepository.save(appConfig);
+        }
+    }
+
+    public void deleteAppDomain(AppDomainDto appDomainDto) {
+        String appId = appDomainDto.getAppId();
+        String domain = appDomainDto.getDomain();
+        AppConfig appConfig = appConfigRepository.findByAppId(appId);
+        if (appConfig == null) {
+            return;
+        }
+
+        if (appConfig.getDomains() != null) {
+            Set<String> domainSet = new HashSet<>(List.of(appConfig.getDomains().split(",")));
+            if (domainSet.contains(domain)) {
+                domainSet.remove(domain);
+                String appDomains = domainSet.toString().replace("[", "").replace("]", "");
+                if (appDomains.isBlank()) {
+                    appConfig.setDomains(null);
+                } else {
+                    appConfig.setDomains(appDomains);
+                }
+                appConfigRepository.save(appConfig);
+            }
+        }
+    }
+}