This is an automated email from the ASF dual-hosted git repository.

kirs pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new c67083f  [Improvement-4257][api]  Increase 
"queryProcessDefinitionByName" API (#4390)
c67083f is described below

commit c67083f028820b035ebbd789fc29efa26dd3152a
Author: yy0812 <[email protected]>
AuthorDate: Wed Jan 6 18:27:30 2021 +0800

    [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 <[email protected]>
---
 .../controller/ProcessDefinitionController.java    | 26 ++++++++++++++-
 .../api/service/ProcessDefinitionService.java      | 13 ++++++++
 .../service/impl/ProcessDefinitionServiceImpl.java | 24 +++++++++++++-
 .../src/main/resources/i18n/messages.properties    |  1 +
 .../api/service/ProcessDefinitionServiceTest.java  | 37 +++++++++++++++++++++-
 5 files changed, 98 insertions(+), 3 deletions(-)

diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
index 1c13c13..8cfbc32 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java
+++ 
b/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.utils.ParameterUtils;
 import org.apache.dolphinscheduler.common.utils.StringUtils;
+import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
 import org.apache.dolphinscheduler.dao.entity.User;
 
 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 projectName project name
@@ -397,6 +398,29 @@ public class ProcessDefinitionController extends 
BaseController {
     }
 
     /**
+     * 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
      *
      * @param loginUser login user
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
index f6f786b..37d8560 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
+++ 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java
@@ -96,6 +96,19 @@ public interface ProcessDefinitionService {
                                                    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
      *
      * @param loginUser loginUser
diff --git 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
 
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
index e4b01e4..245d33b 100644
--- 
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java
+++ 
b/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);
         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 {
             result.put(Constants.DATA_LIST, processDefinition);
             putMsg(result, Status.SUCCESS);
diff --git a/dolphinscheduler-api/src/main/resources/i18n/messages.properties 
b/dolphinscheduler-api/src/main/resources/i18n/messages.properties
index 4d5055b..5837cfa 100644
--- a/dolphinscheduler-api/src/main/resources/i18n/messages.properties
+++ b/dolphinscheduler-api/src/main/resources/i18n/messages.properties
@@ -172,6 +172,7 @@ PROCESS_DEFINITION_ID=process definition id
 PROCESS_DEFINITION_IDS=process definition ids
 RELEASE_PROCESS_DEFINITION_NOTES=release process definition
 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_PAGING_NOTES=query process definition list paging
 QUERY_ALL_DEFINITION_LIST_NOTES=query all definition list
diff --git 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
 
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
index e197e56..89d8b86 100644
--- 
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java
+++ 
b/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);
         Map<String, Object> instanceNotexitRes = 
processDefinitionService.queryProcessDefinitionById(loginUser,
                 "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
         
Mockito.when(processDefineMapper.selectById(46)).thenReturn(getProcessDefinition());
@@ -351,6 +351,41 @@ public class ProcessDefinitionServiceTest {
     }
 
     @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
     public void testBatchCopyProcessDefinition() {
 
         String projectName = "project_test1";

Reply via email to