feat(m6): add CRUD dialogs for environments and product lines

This commit is contained in:
2026-05-25 01:15:56 +08:00
parent ea233dd039
commit d0783aa893
7 changed files with 506 additions and 8 deletions
@@ -1,14 +1,21 @@
package cn.craftlabs.platform.api.integration;
import cn.craftlabs.platform.api.service.IntegrationCatalogService;
import cn.craftlabs.platform.api.web.dto.IntegrationEnvironmentRequest;
import cn.craftlabs.platform.api.web.dto.IntegrationEnvironmentResponse;
import cn.craftlabs.platform.api.web.dto.PageResponse;
import cn.craftlabs.platform.api.web.dto.ProductLineRequest;
import cn.craftlabs.platform.api.web.dto.ProductLineResponse;
import jakarta.validation.Valid;
import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -49,4 +56,36 @@ public class IntegrationCatalogController {
public IntegrationEnvironmentResponse getEnvironment(@PathVariable("id") long id) {
return integrationCatalogService.getEnvironment(id);
}
@PostMapping("/environments")
public IntegrationEnvironmentResponse createEnvironment(@Valid @RequestBody IntegrationEnvironmentRequest body) {
return integrationCatalogService.createEnvironment(body);
}
@PutMapping("/environments/{id}")
public IntegrationEnvironmentResponse updateEnvironment(
@PathVariable("id") long id, @Valid @RequestBody IntegrationEnvironmentRequest body) {
return integrationCatalogService.updateEnvironment(id, body);
}
@DeleteMapping("/environments/{id}")
public void deleteEnvironment(@PathVariable("id") long id) {
integrationCatalogService.deleteEnvironment(id);
}
@PostMapping("/product-lines")
public ProductLineResponse createProductLine(@Valid @RequestBody ProductLineRequest body) {
return integrationCatalogService.createProductLine(body);
}
@PutMapping("/product-lines/{id}")
public ProductLineResponse updateProductLine(
@PathVariable("id") long id, @Valid @RequestBody ProductLineRequest body) {
return integrationCatalogService.updateProductLine(id, body);
}
@DeleteMapping("/product-lines/{id}")
public void deleteProductLine(@PathVariable("id") long id) {
integrationCatalogService.deleteProductLine(id);
}
}
@@ -4,8 +4,10 @@ import cn.craftlabs.platform.api.persistence.integration.PlatformIntegrationEnvi
import cn.craftlabs.platform.api.persistence.integration.PlatformIntegrationEnvironmentMapper;
import cn.craftlabs.platform.api.persistence.integration.PlatformProductLine;
import cn.craftlabs.platform.api.persistence.integration.PlatformProductLineMapper;
import cn.craftlabs.platform.api.web.dto.IntegrationEnvironmentRequest;
import cn.craftlabs.platform.api.web.dto.IntegrationEnvironmentResponse;
import cn.craftlabs.platform.api.web.dto.PageResponse;
import cn.craftlabs.platform.api.web.dto.ProductLineRequest;
import cn.craftlabs.platform.api.web.dto.ProductLineResponse;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -70,6 +72,72 @@ public class IntegrationCatalogService {
return toEnvironment(row);
}
@Transactional
public ProductLineResponse createProductLine(ProductLineRequest req) {
PlatformProductLine row = new PlatformProductLine();
row.setCode(req.getCode());
row.setName(req.getName());
row.setDescription(req.getDescription());
row.setEnabled(req.getEnabled() != null ? req.getEnabled() : Boolean.TRUE);
productLineMapper.insert(row);
return toProductLine(row);
}
@Transactional
public ProductLineResponse updateProductLine(long id, ProductLineRequest req) {
PlatformProductLine row = productLineMapper.selectById(id);
if (row == null) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "product line not found");
}
row.setCode(req.getCode());
row.setName(req.getName());
row.setDescription(req.getDescription());
row.setEnabled(req.getEnabled() != null ? req.getEnabled() : Boolean.TRUE);
productLineMapper.updateById(row);
return toProductLine(row);
}
@Transactional
public void deleteProductLine(long id) {
if (productLineMapper.selectById(id) == null) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "product line not found");
}
productLineMapper.deleteById(id);
}
@Transactional
public IntegrationEnvironmentResponse createEnvironment(IntegrationEnvironmentRequest req) {
PlatformIntegrationEnvironment row = new PlatformIntegrationEnvironment();
row.setCode(req.getCode());
row.setName(req.getName());
row.setBitanswerBaseUrl(req.getBitanswerBaseUrl());
row.setKind(req.getKind());
environmentMapper.insert(row);
return toEnvironment(row);
}
@Transactional
public IntegrationEnvironmentResponse updateEnvironment(long id, IntegrationEnvironmentRequest req) {
PlatformIntegrationEnvironment row = environmentMapper.selectById(id);
if (row == null) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "integration environment not found");
}
row.setCode(req.getCode());
row.setName(req.getName());
row.setBitanswerBaseUrl(req.getBitanswerBaseUrl());
row.setKind(req.getKind());
environmentMapper.updateById(row);
return toEnvironment(row);
}
@Transactional
public void deleteEnvironment(long id) {
if (environmentMapper.selectById(id) == null) {
throw new ResponseStatusException(HttpStatus.NOT_FOUND, "integration environment not found");
}
environmentMapper.deleteById(id);
}
private ProductLineResponse toProductLine(PlatformProductLine row) {
ProductLineResponse r = new ProductLineResponse();
r.setId(row.getId());
@@ -0,0 +1,54 @@
package cn.craftlabs.platform.api.web.dto;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
public class IntegrationEnvironmentRequest {
@NotBlank
@Size(max = 64)
private String code;
@NotBlank
@Size(max = 256)
private String name;
@Size(max = 512)
private String bitanswerBaseUrl;
@NotBlank
@Size(max = 16)
private String kind;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getBitanswerBaseUrl() {
return bitanswerBaseUrl;
}
public void setBitanswerBaseUrl(String bitanswerBaseUrl) {
this.bitanswerBaseUrl = bitanswerBaseUrl;
}
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
}
@@ -0,0 +1,52 @@
package cn.craftlabs.platform.api.web.dto;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.Size;
public class ProductLineRequest {
@NotBlank
@Size(max = 64)
private String code;
@NotBlank
@Size(max = 256)
private String name;
@Size(max = 1024)
private String description;
private Boolean enabled;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Boolean getEnabled() {
return enabled;
}
public void setEnabled(Boolean enabled) {
this.enabled = enabled;
}
}