feat(制品库功能开发): 重构制品库原代码

完善接口:新增托管制品库仓库
对输入的每个枚举类型进行校验,防止出现Nexus返回的400错误码
This commit is contained in:
OTTO 2024-06-25 11:37:17 +08:00
parent 5eac1ca660
commit fb0907cb3b
9 changed files with 82 additions and 17 deletions

View File

@ -12,9 +12,9 @@ import com.microservices.pms.productLibrary.domain.vo.PmsProductLibraryRepositor
import com.microservices.pms.productLibrary.service.IPmsProductLibraryRepositoriesService;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
@ -65,7 +65,7 @@ public class PmsProductLibraryRepositoriesController extends BaseController {
public AjaxResult addHosted(@PathVariable String enterpriseIdentifier,
@ApiParam(value = "制品库类型", required = true) @PathVariable String type,
@ApiParam(value = "制品库格式", required = true) @PathVariable String format,
@Validated @RequestBody PmsProductLibraryRepositoriesInputVo pmsProductLibraryRepositoriesInputVo) {
@Valid @RequestBody PmsProductLibraryRepositoriesInputVo pmsProductLibraryRepositoriesInputVo) {
pmsProductLibraryRepositoriesInputVo.setEnterpriseIdentifier(enterpriseIdentifier);
pmsProductLibraryRepositoriesInputVo.setType(type);
pmsProductLibraryRepositoriesInputVo.setFormat(format);

View File

@ -1,5 +1,6 @@
package com.microservices.pms.productLibrary.domain;
import com.microservices.common.core.exception.ServiceException;
import com.microservices.pms.productLibrary.domain.vo.CommonTypeVo;
import io.swagger.annotations.ApiModel;
import lombok.Getter;
@ -13,9 +14,8 @@ import java.util.List;
@Getter
@ApiModel("布局策略")
public enum LayoutPolicyEnum {
RELEASE("RELEASE", "发布版本"),
SNAPSHOT("SNAPSHOT", "快照版本"),
MIXED("MIXED", "混合版本");
STRICT("STRICT", "严格的"),
PERMISSIVE("PERMISSIVE", "许可的");
private final String key;
private final String name;
@ -32,4 +32,14 @@ public enum LayoutPolicyEnum {
}
return list;
}
public static LayoutPolicyEnum getByKey(String key) {
for (LayoutPolicyEnum typeEnum : LayoutPolicyEnum.values()) {
if (typeEnum.key.equals(key)) {
return typeEnum;
}
}
throw new ServiceException("该布局策略不存在(布局策略[%s])", key);
}
}

View File

@ -1,5 +1,6 @@
package com.microservices.pms.productLibrary.domain;
import com.microservices.common.core.exception.ServiceException;
import com.microservices.pms.productLibrary.domain.vo.CommonTypeVo;
import io.swagger.annotations.ApiModel;
import lombok.Getter;
@ -44,4 +45,13 @@ public enum ProductLibraryRepositoriesFormatEnum {
}
return list;
}
public static ProductLibraryRepositoriesFormatEnum getByKey(String key) {
for (ProductLibraryRepositoriesFormatEnum typeEnum : ProductLibraryRepositoriesFormatEnum.values()) {
if (typeEnum.key.equals(key)) {
return typeEnum;
}
}
throw new ServiceException("该制品库格式不存在(制品库格式[%s])", key);
}
}

View File

@ -1,5 +1,6 @@
package com.microservices.pms.productLibrary.domain;
import com.microservices.common.core.exception.ServiceException;
import com.microservices.pms.productLibrary.domain.vo.CommonTypeVo;
import io.swagger.annotations.ApiModel;
import lombok.Getter;
@ -31,4 +32,13 @@ public enum ProductLibraryRepositoriesTypeEnum {
}
return list;
}
public static ProductLibraryRepositoriesTypeEnum getByKey(String key) {
for (ProductLibraryRepositoriesTypeEnum typeEnum : ProductLibraryRepositoriesTypeEnum.values()) {
if (typeEnum.key.equals(key)) {
return typeEnum;
}
}
throw new ServiceException("该制品库类型不存在(制品库类型[%s])", key);
}
}

View File

@ -1,5 +1,6 @@
package com.microservices.pms.productLibrary.domain;
import com.microservices.common.core.exception.ServiceException;
import com.microservices.pms.productLibrary.domain.vo.CommonTypeVo;
import io.swagger.annotations.ApiModel;
import lombok.Getter;
@ -13,8 +14,9 @@ import java.util.List;
@Getter
@ApiModel("版本策略")
public enum VersionPolicyEnum {
STRICT("STRICT", "严格的"),
PERMISSIVE("PERMISSIVE", "许可的");
RELEASE("RELEASE", "发布版本"),
SNAPSHOT("SNAPSHOT", "快照版本"),
MIXED("MIXED", "混合版本");
private final String key;
private final String name;
@ -31,4 +33,14 @@ public enum VersionPolicyEnum {
}
return list;
}
public static VersionPolicyEnum getByKey(String key) {
for (VersionPolicyEnum typeEnum : VersionPolicyEnum.values()) {
if (typeEnum.key.equals(key)) {
return typeEnum;
}
}
throw new ServiceException("该版本策略不存在(版本策略[%s])", key);
}
}

View File

@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Range;
import javax.validation.constraints.NotNull;
/**
* 制品库-仓库对象 pms_product_library_repositories
*
@ -15,12 +17,15 @@ import org.hibernate.validator.constraints.Range;
@ApiModel("Docker制品库对象")
public class DockerInputVo {
@ApiModelProperty(value = "版本策略")
@NotNull(message = "版本策略不能为空")
private String versionPolicy;
@ApiModelProperty(value = "HTTP端口映射")
@Range(min = 31000, max = 32000, message = "映射端口应大于31000且小于32000")
private Integer httpPort;
@ApiModelProperty(value = "是否开启强制验证")
@NotNull(message = "是否开启强制验证参数不能为空")
private Boolean forceBasicAuth;
@NotNull(message = "允许客户端使用 V1 API 与此存储库进行交互参数不能为空")
@ApiModelProperty(value = "允许客户端使用 V1 API 与此存储库进行交互")
private Boolean v1Enabled;
}

View File

@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* 制品库-仓库对象 pms_product_library_repositories
*
@ -14,7 +16,9 @@ import lombok.Data;
@ApiModel("Maven制品库对象")
public class MavenInputVo {
@ApiModelProperty(value = "版本策略")
@NotNull(message = "版本策略不能为空")
private String versionPolicy;
@ApiModelProperty(value = "部署策略")
@NotNull(message = "部署策略不能为空")
private String layoutPolicy;
}

View File

@ -7,6 +7,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
@ -34,8 +35,10 @@ public class PmsProductLibraryRepositoriesInputVo {
@NotNull
@NotNull(message = "是否在线参数不能为空")
private Boolean online;
@Valid
@ApiModelProperty(value = "Maven制品库输入对象")
private MavenInputVo maven;
@Valid
@ApiModelProperty(value = "Docker制品库输入对象")
private DockerInputVo docker;

View File

@ -77,20 +77,14 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr
@Override
public int insertHostedPmsProductLibraryRepositories(PmsProductLibraryRepositoriesInputVo pmsProductLibraryRepositoriesInputVo) {
PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(pmsProductLibraryRepositoriesInputVo.getEnterpriseIdentifier());
checkNameDuplicates(pmsProductLibraryRepositoriesInputVo.getName(), pmsProductLibraryRepositoriesInputVo.getEnterpriseIdentifier());
checkInputParameter(pmsProductLibraryRepositoriesInputVo);
JSONObject requestBody = nexusAddRepositoriesBodyInit();
String nexusRepoName = getNexusRepositoriesName(pmsProductLibraryRepositoriesInputVo.getEnterpriseIdentifier(), pmsProductLibraryRepositoriesInputVo.getName());
requestBody.put("name", nexusRepoName);
requestBody.put("online", pmsProductLibraryRepositoriesInputVo.getOnline());
if (ProductLibraryRepositoriesFormatEnum.MAVEN.getKey().equals(pmsProductLibraryRepositoriesInputVo.getFormat())) {
if (pmsProductLibraryRepositoriesInputVo.getMaven() == null) {
throw new ServiceException("新增【%s】格式制品库时maven参数不能为空", ProductLibraryRepositoriesFormatEnum.MAVEN.getName());
}
requestBody.put("maven", pmsProductLibraryRepositoriesInputVo.getMaven());
} else if (ProductLibraryRepositoriesFormatEnum.DOCKER.getKey().equals(pmsProductLibraryRepositoriesInputVo.getFormat())) {
if (pmsProductLibraryRepositoriesInputVo.getDocker() == null) {
throw new ServiceException("新增【%s】格式制品库时docker参数不能为空", ProductLibraryRepositoriesFormatEnum.DOCKER.getName());
}
requestBody.put("docker", pmsProductLibraryRepositoriesInputVo.getDocker());
}
// 调用制品库创建接口创建制品库
@ -128,10 +122,27 @@ public class PmsProductLibraryRepositoriesServiceImpl implements IPmsProductLibr
}
private void checkNameDuplicates(String name, String pmsEnterpriseIdentifier) {
Integer count = pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryRepositoriesByNameCount(name, pmsEnterpriseIdentifier);
private void checkInputParameter(PmsProductLibraryRepositoriesInputVo pmsProductLibraryRepositoriesInputVo) {
// 校验制品库名称
Integer count = pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryRepositoriesByNameCount(
pmsProductLibraryRepositoriesInputVo.getName(), pmsProductLibraryRepositoriesInputVo.getEnterpriseIdentifier());
if (count > 0) {
throw new ServiceException("该制品库名称在当前企业下已存在(制品库名称[%s])", name);
throw new ServiceException("该制品库名称在当前企业下已存在(制品库名称[%s])", pmsProductLibraryRepositoriesInputVo.getName());
}
// 校验制品库类型
ProductLibraryRepositoriesTypeEnum.getByKey(pmsProductLibraryRepositoriesInputVo.getType());
ProductLibraryRepositoriesFormatEnum.getByKey(pmsProductLibraryRepositoriesInputVo.getFormat());
if (ProductLibraryRepositoriesFormatEnum.MAVEN.getKey().equals(pmsProductLibraryRepositoriesInputVo.getFormat())) {
if (pmsProductLibraryRepositoriesInputVo.getMaven() == null) {
throw new ServiceException("新增【%s】格式制品库时maven参数不能为空", ProductLibraryRepositoriesFormatEnum.MAVEN.getName());
}
VersionPolicyEnum.getByKey(pmsProductLibraryRepositoriesInputVo.getMaven().getVersionPolicy());
LayoutPolicyEnum.getByKey(pmsProductLibraryRepositoriesInputVo.getMaven().getLayoutPolicy());
} else if (ProductLibraryRepositoriesFormatEnum.DOCKER.getKey().equals(pmsProductLibraryRepositoriesInputVo.getFormat())) {
if (pmsProductLibraryRepositoriesInputVo.getDocker() == null) {
throw new ServiceException("新增【%s】格式制品库时docker参数不能为空", ProductLibraryRepositoriesFormatEnum.DOCKER.getName());
}
VersionPolicyEnum.getByKey(pmsProductLibraryRepositoriesInputVo.getDocker().getVersionPolicy());
}
}