2 Commits f38d566619 ... ec54e9dac8

Autor SHA1 Mensaje Fecha
  370774330@qq.com ec54e9dac8 fix: 项目名和流水线名的约束 hace 5 años
  370774330@qq.com 32025cd09f feat: 获取数据库实例 hace 5 años

+ 2 - 1
web/src/main/java/cn/seecoder/web/controller/project/ProjectController.java

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import cn.seecoder.common.exceptions.ServiceException;
 import cn.seecoder.web.model.vo.Response;
@@ -49,7 +50,7 @@ public class ProjectController {
     @ApiOperation(value = "创建项目,传入的参数中不必带有效的projectId字段,返回一个创建后的结果,注入id", httpMethod = "POST")
     @PostMapping("/create")
     @ApiImplicitParam(name = "projectCreateVO",dataType = "object", paramType = "body")
-    public Response<ProjectVO> createProject(@RequestBody ProjectCreateVO projectCreateVO) throws ServiceException {
+    public Response<ProjectVO> createProject(@RequestBody @Validated ProjectCreateVO projectCreateVO) throws ServiceException {
         return Response.buildSuccess(projectService.createProject(projectCreateVO));
     }
 

+ 11 - 4
web/src/main/java/cn/seecoder/web/controller/sql/SqlController.java

@@ -2,16 +2,16 @@ package cn.seecoder.web.controller.sql;
 
 import cn.seecoder.common.exceptions.ServiceException;
 import cn.seecoder.web.model.vo.Response;
+import cn.seecoder.web.model.vo.sql.DBInstanceVO;
 import cn.seecoder.web.model.vo.sql.SqlExecVO;
 import cn.seecoder.web.service.sql.SqlService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * @author Chenyz
@@ -33,6 +33,13 @@ public class SqlController {
         this.sqlService = sqlService;
     }
 
+    @ApiOperation(value = "获取当前项目的数据库实例", httpMethod = "GET")
+    @GetMapping("/instances")
+    @ApiImplicitParam(name = "projectCreateVO",dataType = "int", paramType = "query")
+    public Response<List<DBInstanceVO>> dbInstances(@RequestParam("projectId") Integer projectId) throws ServiceException {
+        return Response.buildSuccess(sqlService.getDbInstances(projectId));
+    }
+
     @ApiOperation(value = "执行sql", httpMethod = "POST")
     @PostMapping("/exec")
     @ApiImplicitParam(name = "projectCreateVO",dataType = "object", paramType = "body")

+ 2 - 2
web/src/main/java/cn/seecoder/web/model/vo/pipeline/PipelineCreateVO.java

@@ -18,8 +18,8 @@ public class PipelineCreateVO {
     @ApiModelProperty("项目id")
     private Integer projectId;
 
-    @ApiModelProperty(value = "流水线名只能为长度为3-20且由26个小写英文字母组成的字符串")
-    @Pattern(regexp = "^[a-z]{3,20}$", message = "流水线名只能为长度为3-20且由26个小写英文字母组成的字符串")
+    @ApiModelProperty(value = "流水线名只能为以小写英文字母开头,长度为3-30且由英文字母和-组成的字符串")
+    @Pattern(regexp = "^[a-z]([a-z]|-){2,29}$", message = "流水线名只能为以小写英文字母开头,长度为3-30且由英文字母和-组成的字符串")
     private String name;
 
     @ApiModelProperty("模板名称")

+ 2 - 2
web/src/main/java/cn/seecoder/web/model/vo/project/ProjectCreateVO.java

@@ -15,8 +15,8 @@ import javax.validation.constraints.Pattern;
 @ApiModel("项目创建表单")
 public class ProjectCreateVO {
 
-    @ApiModelProperty("项目名,项目名只能为长度为3-30且由26个英文字母组成的字符串")
-    @Pattern(regexp = "^[A-Za-z]{3,30}$", message = "项目名,项目名只能为长度为3-30且由26个英文字母组成的字符串")
+    @ApiModelProperty("项目名,项目名只能为以小写英文字母开头,长度为3-30且由英文字母和-组成的字符串")
+    @Pattern(regexp = "^[a-z]([a-z]|-){2,29}$", message = "项目名,项目名只能为以小写英文字母开头,长度为3-30且由英文字母和-组成的字符串")
     private String name;
 
     @ApiModelProperty("项目描述")

+ 21 - 0
web/src/main/java/cn/seecoder/web/model/vo/sql/DBInstanceVO.java

@@ -0,0 +1,21 @@
+package cn.seecoder.web.model.vo.sql;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@ApiModel("DB实例")
+@AllArgsConstructor
+public class DBInstanceVO {
+
+    @ApiModelProperty("api")
+    private final Integer id;
+
+    @ApiModelProperty("数据库实例名称")
+    private final String name;
+
+
+
+}

+ 13 - 0
web/src/main/java/cn/seecoder/web/service/impl/sql/SqlServiceImpl.java

@@ -1,9 +1,12 @@
 package cn.seecoder.web.service.impl.sql;
 
 import cn.seecoder.common.exceptions.ServiceException;
+import cn.seecoder.web.core.pipeline.template.PipelineTemplateTable;
 import cn.seecoder.web.dao.pipeline.DeploymentMapper;
 import cn.seecoder.web.dao.pipeline.PipelineMapper;
 import cn.seecoder.web.model.po.pipeline.DeploymentPO;
+import cn.seecoder.web.model.po.pipeline.PipelinePO;
+import cn.seecoder.web.model.vo.sql.DBInstanceVO;
 import cn.seecoder.web.service.sql.SqlService;
 import cn.seecoder.web.service.user.UserService;
 import lombok.extern.slf4j.Slf4j;
@@ -15,6 +18,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
+import java.util.stream.Collectors;
 
 @Service
 @Slf4j
@@ -79,6 +83,15 @@ public class SqlServiceImpl implements SqlService {
 
     }
 
+    @Override
+    public List<DBInstanceVO> getDbInstances(Integer projectId) throws ServiceException {
+        List<PipelinePO> pipelines = pipelineMapper.selectByProjectId(projectId);
+        //选择出所有db类型的流水线,目前仅支持Mysql
+        pipelines = pipelines.stream().filter(x-> PipelineTemplateTable.MYSQL.equals(x.getTemplateName())).collect(Collectors.toList());
+
+        List<DeploymentPO> instances = deploymentMapper.selectByPipelineIds(pipelines.stream().map(PipelinePO::getId).collect(Collectors.toList()));
+        return instances.stream().map(x-> new DBInstanceVO(x.getId(),x.getDeployName())).collect(Collectors.toList());
+    }
 
     private List<List<String>> convertResultSet2List(ResultSet rs) throws SQLException {
         ResultSetMetaData meta = rs.getMetaData();

+ 5 - 1
web/src/main/java/cn/seecoder/web/service/sql/SqlService.java

@@ -1,11 +1,15 @@
 package cn.seecoder.web.service.sql;
 
 
-import cn.seecoder.common.exceptions.AccessDeniedException;
 import cn.seecoder.common.exceptions.ServiceException;
+import cn.seecoder.web.model.vo.sql.DBInstanceVO;
+
+import java.util.List;
 
 public interface SqlService {
 
     String execute(Integer deploymentId, String db, String username, String password,String sql) throws ServiceException;
 
+    List<DBInstanceVO> getDbInstances(Integer projectId) throws ServiceException;
+
 }