Selaa lähdekoodia

fix: tree结点删除导致显示问题的bug,暂时注释权限校验功能

370774330@qq.com 5 vuotta sitten
vanhempi
commit
691e76b345

+ 5 - 0
api/pom.xml

@@ -22,6 +22,11 @@
 
 
     <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.4</version>
+        </dependency>
         <dependency>
             <groupId>com.nju.edu</groupId>
             <artifactId>seecoder-gitlab-client</artifactId>

+ 3 - 1
api/src/main/java/cn/seecoder/api/docker/impl/DockerApiImpl.java

@@ -10,6 +10,8 @@ import com.spotify.docker.client.exceptions.DockerException;
 import com.spotify.docker.client.messages.Image;
 import com.spotify.docker.client.messages.ProgressMessage;
 import lombok.extern.apachecommons.CommonsLog;
+import lombok.extern.slf4j.Slf4j;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.system.ApplicationHome;
 import org.springframework.stereotype.Component;
@@ -23,7 +25,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 @Component
-@CommonsLog
+@Slf4j
 public class DockerApiImpl implements DockerApi {
 
     private final DockerClient client;

+ 5 - 0
common/pom.xml

@@ -22,6 +22,11 @@
     </properties>
 
     <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.4</version>
+        </dependency>
         <dependency>
             <groupId>io.jsonwebtoken</groupId>
             <artifactId>jjwt-api</artifactId>

+ 6 - 0
web/pom.xml

@@ -20,8 +20,14 @@
         <spring-boot.version>2.3.4.RELEASE</spring-boot.version>
         <skipTests>true</skipTests>
     </properties>
+    
 
     <dependencies>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>1.18.4</version>
+        </dependency>
         <!-- Swagger -->
         <!-- https://mvnrepository.com/artifact/io.springfox/springfox-boot-starter -->
 <!--        <dependency>-->

+ 2 - 1
web/src/main/java/cn/seecoder/web/controller/tree/TreeNodesController.java

@@ -10,6 +10,7 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import cn.seecoder.common.exceptions.ServiceException;
+import cn.seecoder.web.dao.tree.TreeNodeMapper;
 import cn.seecoder.web.model.vo.Response;
 import cn.seecoder.web.service.tree.TreeNodeService;
 
@@ -49,7 +50,7 @@ public class TreeNodesController {
     @ApiOperation(value = "根据nodeId删除节点", httpMethod = "DELETE")
     @DeleteMapping("/node/{nodeId}")
     @ApiImplicitParam(value = "nodeId",dataType ="int", paramType = "path")
-    public Response deleteTreeNode(@PathVariable("nodeId") int nodeId) {
+    public Response deleteTreeNode(@PathVariable("nodeId") int nodeId) throws ServiceException {
         treeNodeService.deleteTreeNode(nodeId);
         return Response.buildSuccess();
     }

+ 7 - 0
web/src/main/java/cn/seecoder/web/dao/tree/TreeNodeMapper.java

@@ -11,6 +11,13 @@ import java.util.List;
 @Repository
 public interface TreeNodeMapper {
 
+    /**
+     * 根据父节点获取子节点
+     * @return
+     */
+    @Select({"select * from tree_node where parent_id = #{parentId}"})
+    List<TreeNodePO> getTreeNodesByParentId(@Param("parentId") int parentId);
+
     /**
      * 获取所有的TreeNode
      * @return

+ 7 - 1
web/src/main/java/cn/seecoder/web/service/impl/sql/SqlServiceImpl.java

@@ -16,6 +16,7 @@ import org.springframework.stereotype.Service;
 import java.sql.*;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
 import java.util.stream.Collectors;
@@ -86,9 +87,14 @@ public class SqlServiceImpl implements SqlService {
     @Override
     public List<DBInstanceVO> getDbInstances(Integer projectId) throws ServiceException {
         List<PipelinePO> pipelines = pipelineMapper.selectByProjectId(projectId);
+        if (pipelines.size()==0){
+            return Collections.emptyList();
+        }
         //选择出所有db类型的流水线,目前仅支持Mysql
         pipelines = pipelines.stream().filter(x-> PipelineTemplateTable.MYSQL.equals(x.getTemplateName())).collect(Collectors.toList());
-
+        if (pipelines.size()==0){
+            return Collections.emptyList();
+        }
         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());
     }

+ 19 - 5
web/src/main/java/cn/seecoder/web/service/impl/tree/TreeNodeServiceImpl.java

@@ -11,6 +11,8 @@ import cn.seecoder.web.model.vo.tree.TreeNodeCreateVO;
 import cn.seecoder.web.model.vo.tree.TreeNodeUpdateBasicVO;
 import cn.seecoder.web.model.vo.tree.TreeNodeVO;
 import cn.seecoder.web.service.tree.TreeNodeService;
+
+import org.apache.http.HttpStatus;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -91,11 +93,23 @@ public class TreeNodeServiceImpl implements TreeNodeService {
 
     @Override
     @Transactional
-    public void deleteTreeNode(int nodeId) {
-
-        treeNodeMapper.deleteTreeNode(nodeId);
-        //todo 删除子节点
-        // TODO:safety check
+    public void deleteTreeNode(int nodeId) throws ServiceException {
+        TreeNodePO po = treeNodeMapper.getTreeNodeById(nodeId);
+        if (po != null && po.getParentId()!=null){
+            Stack<TreeNodePO> trees = new Stack<TreeNodePO>();
+            trees.push(po);
+            //递归删除
+            while (trees.size()!=0){
+                TreeNodePO toDelete = trees.pop();
+                treeNodeMapper.deleteTreeNode(toDelete.getId());
+                List<TreeNodePO> childs = treeNodeMapper.getTreeNodesByParentId(toDelete.getId());
+                for (TreeNodePO child : childs){
+                    trees.push(child);
+                }
+            }
+        } else {
+            throw new ServiceException(HttpStatus.SC_SERVICE_UNAVAILABLE, "根节点不可以被删除");
+        }
     }
 
     /**

+ 2 - 1
web/src/main/java/cn/seecoder/web/service/tree/TreeNodeService.java

@@ -35,8 +35,9 @@ public interface TreeNodeService {
     /**
      * 删除一条需求,级联删除消息
      * @param nodeId
+     * @throws ServiceException
      */
-    void deleteTreeNode(int nodeId);
+    void deleteTreeNode(int nodeId) throws ServiceException;
 
     /**
      * 根据父节点创建子节点

+ 11 - 11
web/src/main/java/cn/seecoder/web/service/user/UserService.java

@@ -36,17 +36,17 @@ public interface UserService {
      *  但是gitlab那边接口没测所以没有办法
      */
     static void projectAuthentication(Integer projectId) throws ServiceException {
-        UserPO userPO = UserService.loginUser();
-        SeecoderGitlabApi seecoderGitlabApi = SpringUtil.getBean(SeecoderGitlabApi.class);
-        try {
-            List<ProjectVO> projects = seecoderGitlabApi.getAllProjectsByUserId(userPO.getId());
-            if (projects.stream().noneMatch(project -> project.getProjectId()==projectId)){
-                throw new AccessDeniedException("您没有操作此项目的权限");
-            }
-        } catch (SeecoderGitlabException e) {
-            e.printStackTrace();
-            throw new ServiceException(HttpStatus.SC_SERVICE_UNAVAILABLE, e);
-        }
+        // UserPO userPO = UserService.loginUser();
+        // SeecoderGitlabApi seecoderGitlabApi = SpringUtil.getBean(SeecoderGitlabApi.class);
+        // try {
+        //     List<ProjectVO> projects = seecoderGitlabApi.getAllProjectsByUserId(userPO.getId());
+        //     if (projects.stream().noneMatch(project -> project.getProjectId()==projectId)){
+        //         throw new AccessDeniedException("您没有操作此项目的权限");
+        //     }
+        // } catch (SeecoderGitlabException e) {
+        //     e.printStackTrace();
+        //     throw new ServiceException(HttpStatus.SC_SERVICE_UNAVAILABLE, e);
+        // }
 
     }
 }