Procházet zdrojové kódy

[Improvement-4257][api] Increase "queryProcessDefinitionByName" API (#4390)

* 1. Increase "queryProcessDefinitionByName" API.
2. Will queryProcessDefinitionById api "PROCESS_INSTANCE_EXIST" state is modified to "PROCESS_DEFINE_NOT_EXIST".

* Correct spelling mistakes in words

* Logging should not be vulnerable to injection attacks

Co-authored-by: yinyong <yinyong@netposa.com>
yy0812 před 4 roky
rodič
revize
c67083f028

+ 25 - 1
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java

@@ -42,6 +42,7 @@ import org.apache.dolphinscheduler.api.utils.Result;
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.Constants;
 import org.apache.dolphinscheduler.common.utils.ParameterUtils;
 import org.apache.dolphinscheduler.common.utils.ParameterUtils;
 import org.apache.dolphinscheduler.common.utils.StringUtils;
 import org.apache.dolphinscheduler.common.utils.StringUtils;
+import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
 import org.apache.dolphinscheduler.dao.entity.User;
 import org.apache.dolphinscheduler.dao.entity.User;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
@@ -372,7 +373,7 @@ public class ProcessDefinitionController extends BaseController {
     }
     }
 
 
     /**
     /**
-     * query datail of process definition
+     * query datail of process definition by id
      *
      *
      * @param loginUser login user
      * @param loginUser login user
      * @param projectName project name
      * @param projectName project name
@@ -396,6 +397,29 @@ public class ProcessDefinitionController extends BaseController {
         return returnDataList(result);
         return returnDataList(result);
     }
     }
 
 
+    /**
+     * query datail of process definition by name
+     *
+     * @param loginUser login user
+     * @param projectName project name
+     * @param processDefinitionName process definition name
+     * @return process definition detail
+     */
+    @ApiOperation(value = "queryProcessDefinitionByName", notes = "QUERY_PROCESS_DEFINITION_BY_NAME_NOTES")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "processDefinitionName", value = "PROCESS_DEFINITION_ID", required = true, dataType = "String")
+    })
+    @GetMapping(value = "/select-by-name")
+    @ResponseStatus(HttpStatus.OK)
+    @ApiException(QUERY_DATAIL_OF_PROCESS_DEFINITION_ERROR)
+    public Result<ProcessDefinition> queryProcessDefinitionByName(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+                                                                  @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName,
+                                                                  @RequestParam("processDefinitionName") String processDefinitionName
+    ) {
+        Map<String, Object> result = processDefinitionService.queryProcessDefinitionByName(loginUser, projectName, processDefinitionName);
+        return returnDataList(result);
+    }
+
     /**
     /**
      * query Process definition list
      * query Process definition list
      *
      *

+ 13 - 0
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java

@@ -95,6 +95,19 @@ public interface ProcessDefinitionService {
                                                    String projectName,
                                                    String projectName,
                                                    Integer processId);
                                                    Integer processId);
 
 
+    /**
+     * query datail of process definition
+     *
+     * @param loginUser login user
+     * @param projectName project name
+     * @param processDefinitionName process definition name
+     * @return process definition detail
+     */
+
+    Map<String, Object> queryProcessDefinitionByName(User loginUser,
+                                                   String projectName,
+                                                   String processDefinitionName);
+
     /**
     /**
      * batch copy process definition
      * batch copy process definition
      *
      *

+ 23 - 1
dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java

@@ -349,7 +349,29 @@ public class ProcessDefinitionServiceImpl extends BaseService implements
 
 
         ProcessDefinition processDefinition = processDefineMapper.selectById(processId);
         ProcessDefinition processDefinition = processDefineMapper.selectById(processId);
         if (processDefinition == null) {
         if (processDefinition == null) {
-            putMsg(result, Status.PROCESS_INSTANCE_NOT_EXIST, processId);
+            putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processId);
+        } else {
+            result.put(Constants.DATA_LIST, processDefinition);
+            putMsg(result, Status.SUCCESS);
+        }
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> queryProcessDefinitionByName(User loginUser, String projectName, String processDefinitionName) {
+
+        Map<String, Object> result = new HashMap<>();
+        Project project = projectMapper.queryByName(projectName);
+
+        Map<String, Object> checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName);
+        Status resultStatus = (Status) checkResult.get(Constants.STATUS);
+        if (resultStatus != Status.SUCCESS) {
+            return checkResult;
+        }
+
+        ProcessDefinition processDefinition = processDefineMapper.queryByDefineName(project.getId(),processDefinitionName);
+        if (processDefinition == null) {
+            putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processDefinitionName);
         } else {
         } else {
             result.put(Constants.DATA_LIST, processDefinition);
             result.put(Constants.DATA_LIST, processDefinition);
             putMsg(result, Status.SUCCESS);
             putMsg(result, Status.SUCCESS);

+ 1 - 0
dolphinscheduler-api/src/main/resources/i18n/messages.properties

@@ -172,6 +172,7 @@ PROCESS_DEFINITION_ID=process definition id
 PROCESS_DEFINITION_IDS=process definition ids
 PROCESS_DEFINITION_IDS=process definition ids
 RELEASE_PROCESS_DEFINITION_NOTES=release process definition
 RELEASE_PROCESS_DEFINITION_NOTES=release process definition
 QUERY_PROCESS_DEFINITION_BY_ID_NOTES=query process definition by id
 QUERY_PROCESS_DEFINITION_BY_ID_NOTES=query process definition by id
+QUERY_PROCESS_DEFINITION_BY_NAME_NOTES=query process definition by name
 QUERY_PROCESS_DEFINITION_LIST_NOTES=query process definition list
 QUERY_PROCESS_DEFINITION_LIST_NOTES=query process definition list
 QUERY_PROCESS_DEFINITION_LIST_PAGING_NOTES=query process definition list paging
 QUERY_PROCESS_DEFINITION_LIST_PAGING_NOTES=query process definition list paging
 QUERY_ALL_DEFINITION_LIST_NOTES=query all definition list
 QUERY_ALL_DEFINITION_LIST_NOTES=query all definition list

+ 36 - 1
dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java

@@ -341,7 +341,7 @@ public class ProcessDefinitionServiceTest {
         Mockito.when(processDefineMapper.selectById(1)).thenReturn(null);
         Mockito.when(processDefineMapper.selectById(1)).thenReturn(null);
         Map<String, Object> instanceNotexitRes = processDefinitionService.queryProcessDefinitionById(loginUser,
         Map<String, Object> instanceNotexitRes = processDefinitionService.queryProcessDefinitionById(loginUser,
                 "project_test1", 1);
                 "project_test1", 1);
-        Assert.assertEquals(Status.PROCESS_INSTANCE_NOT_EXIST, instanceNotexitRes.get(Constants.STATUS));
+        Assert.assertEquals(Status.PROCESS_DEFINE_NOT_EXIST, instanceNotexitRes.get(Constants.STATUS));
 
 
         //instance exit
         //instance exit
         Mockito.when(processDefineMapper.selectById(46)).thenReturn(getProcessDefinition());
         Mockito.when(processDefineMapper.selectById(46)).thenReturn(getProcessDefinition());
@@ -350,6 +350,41 @@ public class ProcessDefinitionServiceTest {
         Assert.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS));
         Assert.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS));
     }
     }
 
 
+    @Test
+    public void testQueryProcessDefinitionByName() {
+        String projectName = "project_test1";
+        Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName));
+
+        Project project = getProject(projectName);
+
+        User loginUser = new User();
+        loginUser.setId(-1);
+        loginUser.setUserType(UserType.GENERAL_USER);
+
+        Map<String, Object> result = new HashMap<>();
+        putMsg(result, Status.PROJECT_NOT_FOUNT, projectName);
+
+        //project check auth fail
+        Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result);
+        Map<String, Object> map = processDefinitionService.queryProcessDefinitionByName(loginUser,
+                "project_test1", "test_def");
+        Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map.get(Constants.STATUS));
+
+        //project check auth success, instance not exist
+        putMsg(result, Status.SUCCESS, projectName);
+        Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result);
+        Mockito.when(processDefineMapper.queryByDefineName(project.getId(),"test_def")).thenReturn(null);
+        Map<String, Object> instanceNotexitRes = processDefinitionService.queryProcessDefinitionByName(loginUser,
+                "project_test1", "test_def");
+        Assert.assertEquals(Status.PROCESS_DEFINE_NOT_EXIST, instanceNotexitRes.get(Constants.STATUS));
+
+        //instance exit
+        Mockito.when(processDefineMapper.queryByDefineName(project.getId(),"test")).thenReturn(getProcessDefinition());
+        Map<String, Object> successRes = processDefinitionService.queryProcessDefinitionByName(loginUser,
+                "project_test1", "test");
+        Assert.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS));
+    }
+
     @Test
     @Test
     public void testBatchCopyProcessDefinition() {
     public void testBatchCopyProcessDefinition() {